这里要说明一下 队尾指针指向最后一个元素并且带头结点
实现显示的时候指针读取下一个data 应该使用next 而不是++
#include <iostream>
using namespace std;
typedef int QElemType;
typedef struct QNode
{
QElemType data;
QNode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
bool InitQueue(LinkQueue &Q){
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return true;
}
bool QueueEmpty(LinkQueue Q){
if(Q.front==Q.rear) return true;
else return false;
}
//从头出队 依次删除
bool DestroyQueue(LinkQueue &Q){
while(Q.front){
Q.rear=Q.front->next;
delete(Q.front);
Q.front=Q.rear;
}
return true;
}
bool Enqueue(LinkQueue &Q,QElemType e){
QNode *p=new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return true;
}
bool DeQueue(LinkQueue &Q,QElemType &e){
if(QueueEmpty(Q))return false;
QNode *p=new QNode;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)Q.rear=Q.front;
delete(p);
return true;
}
void Print(LinkQueue Q)
{
cout << "队列元素为";
if (QueueEmpty(Q))
{
cout << "队列为空" << endl;
return;
}
QNode *ptr=new QNode;
ptr=Q.front->next;
while (ptr!=Q.rear)
{
cout << ptr->data << ' ';
ptr=ptr->next;
}
cout << ptr->data <<endl;
}
int main() {
cout << "请输入队列元素";
LinkQueue q;
InitQueue(q);
int val;
while(cin>>val)
Enqueue(q,val);
int e;
Print(q);
DeQueue(q,e);
Print(q);
system("pause");
return 0;
}