#include<iostream>
using namespace std;
//不带头节点的单链表实现队列
struct QNode{ //队列节点
int data;
QNode *next;
};
struct Queue{ //队列
QNode *front,*back; //头指针 尾指针
};
//初始化队列
void InitQueue(Queue &Q){
Q.front=NULL;
Q.back==NULL;
}
//判断队列是否为空
void IsEmpty(Queue &Q){
if(Q.front==NULL)
cout<<"队列为空"<<endl;
else
cout<<"队列不空"<<endl;
}
//入队
void QueuePush(Queue &Q,int value){
QNode *p=(QNode *)malloc(sizeof(QNode));
p->data=value;
p->next=NULL;
if(Q.front==NULL){
Q.front=p;
Q.back=p;
}else{
Q.back->next=p;
Q.back=p;
}
}
//出队
void QueuePop(Queue &Q){
if(Q.front==NULL){
cout<<"队列为空,无法出队"<<endl;
return;
}
QNode *p=Q.front;
Q.front=Q.front->next;
if(Q.back==Q.front){ //只剩下一个节点
Q.back=NULL;
}
free(p);
}
//取队头元素
void GetFront(Queue Q){
if(Q.front==NULL){
cout<<"队列为空,无法取队头元素"<<endl;
return;
}
cout<<Q.front->data<<endl;
}
int main(){
Queue Q; //定义一个队列
InitQueue(Q); //初始化队列
IsEmpty(Q); //判断队列是否为空
QueuePush(Q,1); //入队
QueuePush(Q,2);
QueuePush(Q,3);
QueuePush(Q,4);
QueuePush(Q,5);
IsEmpty(Q); //判断队列是否为空
GetFront(Q); //取队头元素
QueuePop(Q); //出队
GetFront(Q); //取队头元素
QueuePop(Q); //出队
IsEmpty(Q); //判断队列是否为空
GetFront(Q); //取队头元素
QueuePop(Q); //出队
GetFront(Q); //取队头元素
QueuePop(Q); //出队
GetFront(Q); //取队头元素
QueuePop(Q); //出队
GetFront(Q); //取队头元素
QueuePop(Q); //出队
IsEmpty(Q); //判断队列是否为空
return 0;
}
不带头节点的单链表实现队列
最新推荐文章于 2024-10-02 23:22:52 发布