#include<stdio.h>
#define OK 1
#dfine OVERFLOW 0
#define MAXQSIZE 100
typedef struct Qnode{
QElemtype data;
struct Qnode *next;//递归定义
}QNode, *QuenePtr;//对节点进行定义
typedef struct{
QuenePtr front;//指向一个固定不变的空白空间
QuenePtr rear;
}LinkQueue;//对队列进行定义
//链队列的初始化
Status InitQueue(LinkQueue &Q){
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q.front)exit(OVERFLOW);
Q.front -> NULL;
return OK;
}
//链队列的销毁
Status DestoryQueue(LinkQueue &Q){
QuenePtr p;
while(Q.front){
p = Q.front -> next;
free(Q.front);
Q.front = p;
}
return OK;
}
//将元素e入队
Status EnQueue(LinkQueue &Q, QElemType e){
QuenePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW)
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
//链队列的出队
Status DeQueue(LinkQueue &Q, QElemType &e){
if(Q.front == Q.rear) return ERROR;
QuenePtr p;
p = Q.front -> next;//记录首元素的地址
e = p->data;//存储首元素的数据
Q.front->next = p->next;//将首元素出队
if(Q.rear == p) Q.rear = Q.front;//如果要删除的是尾节点
delete p;
return OK;
}
//求队头元素
Status GetHead(LinkQueue Q, QElemType &e){
if(Q.front == Q.rear) return ERROR;
e = Q.front->next->data;
return OK;
}
链队列的实现
最新推荐文章于 2024-08-25 23:11:21 发布