#include<stdio.h>
//定义节点的结构体
typedef struct qnode{
DataType data;
struct qnode *next;
}LQNode;
//定义队头指针队尾指针的结构体
typedef struct{
//队头指针
LQNode *front;
//队尾指针
LQNode *rear;
}LQueue;
//初始化链式队列Q
void QueueInitiate(LQueue *Q){
//定义初始队尾指针下标值
Q->rear = NULL;
//定义初始对头指针下标值
Q->front = NULL;
}
//非空否(判断链式队列Q非空否)
int QueueNotEmpty(LQueue Q){
//判断链式队列Q是否为空
if(Q->rear->next==Q->rear){
//若为空,返回0
return 0;
}
else{
//若不为空返回1
return 1;
}
}
//入队列(将x的值从队尾插入到链式队列Q)
int QueueAppend(LQueue *Q,DataType x){
LQNode *p;
//申请新节点
p = (LQNode *)malloc(sizeof(LQNode));
//将x的值赋值给p节点的数据域
p->data = x;
//将p指向的指针域指向空值
p->next = NULL;
//保持循环,将插入的节点指向头节点
p->next=Q->rear->next;
//将p接到队尾
Q->rear->next=p;
//尾指针后移
Q->rear=p;
//入队列成功,返回1
return 1;
}
//出队列(删除队列Q的队头元素并赋值给d)
int QueueDelete(LQueue *Q,DataType *d){
LQNode *p;
//判断链式队列Q是否为空
if(Q->rear->next==Q->rear){
printf("队列已空无数据元素出列!\n");
//若为空,则返回0
return 0;
}
//若不为空
else{
//将队头的元素值赋值给d
*d = Q->front->data;
p = Q->front;
//出队列节点脱链
Q->front = Q->front->next;
//删除最后一个节点,要置最后一个节点为空
if(Q->front == NULL){
Q->rear = NULL;
}
//释放空间
free(p);
//出队列成功,返回1
return 1;
}
}
//取对头数据元素(将队头的元素赋值给d带回输出)
int QueueGet(LQueue Q,DataType *d){
//判断链式队列Q是否为空
if(Q->rear->next==Q->rear){
printf("队列已空无数据元素出队列!\n");
//若为空,则返回0
return 0;
}
//否则
else{
//将队头元素值赋值给d
*d = Q.front->data;
//取得成功返回1
return 1;
}
}
链式队列操作的实现(无头节点)
最新推荐文章于 2023-02-25 10:56:19 发布