带头结点的链队列front指向表头结点,rear指向最后一个结点
#include<iostream>
using namespace std;
//结点
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
//链队列
typedef struct LinkQueue{
LinkNode *front,*rear;
};
//初始化
void InitQueue(LinkQueue &Q){
Q.front = Q.rear = new LinkNode; //给链队列创建结点
Q.front->next = NULL;
}
//判空
bool IsEmpty(LinkQueue Q){
if(Q.front==Q.rear)
return true;
}
//入队
bool EnQueue(LinkQueue &Q,int x){
LinkNode *s = new LinkNode; //创建新结点
s->data = x;
s->next = NULL;
Q.rear->next = s; //新结点插入到rear之后
Q.rear = s; //修改表尾指针
}
//出队
bool DeQueue(LinkQueue &Q,int &x){
if(Q.front==Q.rear) //判空
return false;
LinkNode *p = Q.front->next;
x = p->data;
Q.front->next = p->next;
if(Q.rear==p){ //如果出队的是最后一个元素,将链队列置空
Q.rear = Q.front;
}
delete p;
return true;
}
int main(){
LinkQueue Q;
InitQueue(Q);
IsEmpty(Q);
EnQueue(Q,2);
EnQueue(Q,3);
int x;
DeQueue(Q,x);
cout << x;
return 0;
}