链队列的读取对头和队尾以及清除和摧毁函数较为简单,和普通单链表相似,所以在此我只展示,链队列的关键操作,初始化以及入队和出队操作
#ifndef LINKQUEUE_H
#define LINKQUEUE_H
typedef int Qelemtype;
typedef struct QueueNode
{
Qelemtype data;
QueueNode *next;
}QueueNode;
typedef struct{
QueueNode *front;
QueueNode *rear;
int cursize;
}LinkQueue;
QueueNode *buynode();
void initQueue(LinkQueue&myQ);
void EnQueue(LinkQueue&myQ, Qelemtype x);
bool DeQueue(LinkQueue&myQ, Qelemtype e);
#endif
void initQueue(LinkQueue&myQ)
{
myQ.cursize = 0;
myQ.front = myQ.rear = buynode();
}
void EnQueue(LinkQueue&myQ, Qelemtype x)
{
QueueNode *p = buynode();
p->data = x;
myQ.rear->next = p;
myQ.rear = p;
myQ.cursize += 1;
}
bool DeQueue(LinkQueue&myQ, Qelemtype e)
{
if (myQ.cursize == 0)//判断队列是否为空--
{
return false;
}
QueueNode *p = myQ.front->next;
e = p->data;
myQ.front->next = p->next;
free(p);
myQ.cursize -= 1;
if (myQ.cursize == 0)
{
myQ.rear = myQ.front;
}
return true;
}