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