📄 linkqueue.c
字号:
#include "stdafx.h"
Status InitQueue(LinkQueue* Q)
{
// 构造一个空队列Q,该队列是带头结点的
Q->front=Q->rear = (QueuePtr) malloc(sizeof(QNode)) ;
if(!Q->front) exit(1); //存储分配失败
Q->front->next = NULL ;
return OK;
}
Status DestroyQueue(LinkQueue* Q)
{ // 销毁队列Q
while(Q->front)
{
Q->rear = Q->front->next ;
free(Q->front) ;
Q->front = Q->rear ;
}
Q->front = Q->rear = NULL;
return OK;
}
Status ClearQueue(LinkQueue* Q)
{//清空队列里的元素
DestroyQueue(Q);
InitQueue(Q);
return OK;
}
int QueueEmpty(LinkQueue* Q)
{ //队列空则返回true , 否则返回false
if(Q->front==Q->rear) return 1;
else return 0;
}
int QueueLength(LinkQueue* Q)
{ //获取队列的长度
QueuePtr p= Q->front ;
int length=0;
for(length=0;p->next != NULL;p=p->next,length++);
return length;
}
Status GetHead(LinkQueue* Q,int* e)
{
//获得队列的头结点
if(Q->rear == Q->front) return -1;
*e = Q->front->next->data;
return OK;
}
Status EnQueue(LinkQueue* Q,int e)
{
//插入元素e为Q的新的队尾元素。
QueuePtr p = (QueuePtr) malloc(sizeof(QNode)) ;
if(!p) exit(1) ; //分配存储空间失败
p->data = e;
p->next = NULL;
Q->rear ->next = p;
Q->rear = p;
return OK;
}
Status DeQueue(LinkQueue* Q,int* e)
{
//若队列不空,则删除Q的队头元素,并用e返回队头元素的值
if(Q->front==Q->rear) return ERROR;
QueuePtr p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if(Q->rear == p) Q->rear = Q->front ; //删除的是尾结点
free(p);
p=NULL;
return 0;
}
Status QueueTraverse(LinkQueue* Q)
{//从队头到队尾依次对队列Q中的每一个元素进行遍历
QueuePtr temp=Q->front;
for(;temp!=Q->rear;temp=temp->next)
{
printf("%d ",temp->data);
}
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -