typedef struct QNode
{
int data;
struct QNode * next;
} * QueuePtr;
struct LinkQueue
{
struct QNode * rear;
struct QNode * front;
};
void InitQueue(LinkQueue & q) //初始化
{
q.rear = q.front = (QueuePtr)malloc(sizeof(QNode));
if(!q.rear)
exit(OVERFLOW);
q.rear -> next = NULL;
}
void DestroyQueue(LinkQueue & q) //销毁
{
while(q.rear)
{
q.front = q.rear -> next;
free(q.rear);
q.rear = q.front;
}
}
void ClearQueue(LinkQueue & q) //清空
{
DestroyQueue(q);
InitQueue(q);
}
int QueueEmpty(LinkQueue &q)
{
return q.rear == q.front;
}
int QueueLength(LinkQueue & q) //队列长度
{
int len = 0;
QueuePtr r = q.front->next;
while(r != q.rear->next)
{
len++;
r = r->next;
}
return len;
}
int GetHead(LinkQueue & q)
{
if(q.rear == q.front)
exit(OVERFLOW);
QueuePtr r = q.front->next;
return r->data;
}
void EnQueue(LinkQueue & q,int e) //入队
{
QueuePtr r;
r = (QueuePtr)malloc(sizeof(QNode));
if(!r)
exit(OVERFLOW);
r->data = e;
r->next = NULL;
q.rear->next = r;
q.rear = r;
}
int DeQueue(LinkQueue & q,int &e) //出队
{
QueuePtr r = q.front->next;
if(q.rear == q.front)
exit(OVERFLOW);
q.front->next = r->next;
e = r->data;
free(r);
r->next = NULL;
return 1;
}
void TraverseQueue(LinkQueue & q) //遍历
{
QueuePtr p;
p = q.front->next;
if(q.front == q.rear)
exit(OVERFLOW);
while(p != q.rear->next)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
链式队列
最新推荐文章于 2020-10-30 14:02:26 发布