c语言 队列的操作

Python013

c语言 队列的操作,第1张

//定义队列结构体

typedef struct Qnode

{

int data

struct Qnode *next

} Queue , *QueuePtr

typedef struct

{

QueuePtr front

QueuePtr rear

} linkQnode

//创建一个队列

initQueue (linkQnode *q)

{

q ->front = q ->rear = (QueuePtr) malloc (sizeof (Queue))

if (!q ->front) exit (0)

q ->front ->next = NULL

}

//入队列

EnterQueue (linkQnode *q , int item)

{

QueuePtr p

p = (QueuePtr) malloc (sizeof (Queue))

if (!p) exit (0)

p ->data = item

p ->next = NULL

q ->rear ->next = p

q ->rear = p

}

//出队列

DelQueue (linkQnode *q , int *item)

{

QueuePtr p

if (q ->front = q ->rear) return

p = q ->front ->next

*item = p ->data

q ->front ->next = p ->next

if (q ->rear == p)

q ->rear = q ->front

free (p)

}

C语言的链表与队列是两种不同的概念:

链表是一种数据的存储方式,其保存的数据在内存中是不连续的,采用指针对数据进行访问;

队列是一种数据结构,其特点是先进先出,后进后出;

队列的存储方式可以使用线性表进行存储,也可以使用链表进行存储。

SQQUEUE的第一个元素elemtype

*elem其实是指向了一个数组,该数组中存储着类型为elemtype的元素,然后front和rear就标识了队首和队尾元素对应的数组下标。

typedef

struct _Point{

int x,y

}Point

#defineelemtype

Point//这个elemtype可以是任意你自己定义的结构,可以是结构体,也可以是简单数据类型

elemtype

array[10]={0}//这个是队列的数据结构,在这里是一个Point数组

SQQUEUE

queue={0}

queue.elem=array//这样array中的元素就是queue中的元素了。

queue.front=queue.rear=queue.size=0