📄 qnode.h
字号:
#include"stdio.h"
#include"malloc.h"
#include"string.h"
#include"define.h"
typedef int QElemType;
typedef struct QNode/*声明链队列中的结点*/
{
QElemType data; /*定义数据元素*/
QNode *next; /*定义后继指针*/
}QNode;
typedef struct /*声明链队列的结构*/
{
QNode *front; /*定义队头指针*/
QNode *rear; /*定义队尾指针*/
}LinkQueue;
Status InitQueue(LinkQueue &Q)
/*构造空队列*/
{
Q.front=Q.rear=(QNode *)malloc(sizeof(QNode));/*为空栈队列分配头结点*/
if(Q.front==0)return OVERFLOW;/*分配失败*/
Q.front->data=0; /*头结点的数据域用来记录队列长度*/
Q.front->next=NULL; /*头结点的指针域置零*/
return OK;
}
Status DestroyQueue(LinkQueue &Q)
/*销毁队列*/
{
QNode *q;
q=Q.front; /*q指向头结点*/
while(q!=NULL) /*判断q不为零*/
{
Q.front=q->next;
free(q);
q=Q.front;
}
Q.front=NULL;
Q.rear=NULL;
return OK;
}
Status EnQueue(LinkQueue &Q,QElemType e)
/*在队尾插入数据元素e*/
{
QNode *p;
p=(QNode*)malloc(sizeof(QNode));/*为插入的数据元素开辟结点空间*/
if(p==0)return OVERFLOW;
p->data=e; /*新结点空间的数据域赋插入值*/
p->next=NULL; /*新结点空间的指针域置零*/
Q.rear->next=p; /*新结点增加到队尾*/
Q.rear=p; /*对尾指针指向新结点*/
(Q.front->data)++; /*队列长度加1*/
return OK;
}
Status DeQueue(LinkQueue &Q,QElemType &e)
/*删除队头结点,用e返回结点的数据元素*/
{
QNode *p;
if(Q.front==Q.rear)return ERROR;
if(Q.front->next==Q.rear)Q.rear=Q.front;
/*如果只剩下最后一个结点(除了头结点),则让尾结点重新指向头结点*/
p=Q.front->next; /*p指向第一个(紧跟头结点)结点*/
Q.front->next=p->next; /*头结点指向第二个结点,使之成为第一结点*/
e=p->data; /*e返回结点的数据元素*/
free(p); /*释放结点*/
(Q.front->data)--; /*链队列长度减1*/
return OK;
}
void print_Queue(LinkQueue Q)
/*从队头开始依次输出数据元素*/
{
QNode *p;
p=Q.front->next;
printf("Length of Queue is %d\nElement of Queue is :",Q.front->data);
while(p!=NULL)
{
printf("%d,",p->data);
p=p->next;
}
N;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -