链队的基本操作:创建,初始化,出队,入队,取队头元素等。
#include<iostream>
#define MAXQSIZE 100
using namespace std;
typedef struct QNode //定义链表
{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
int InitQueue(LinkQueue &Q) //初始化链队
{
Q.front=Q.rear=new QNode;
Q.front->next=0; //头结点的指针域置空
return 1;
}
int EnQueue(LinkQueue &Q,int e) //入队
{
QueuePtr p;
p=new QNode;
p->data=e;
p->next=0;
Q.rear->next=p; //将新结点插入到队尾
Q.rear=p; //修改队尾指针
return 1;
}
int DeQueue(LinkQueue &Q,int &e) //出队
{
QueuePtr p;
if(Q.front==Q.rear) return 0;
p=Q.front->next; //删除队头元素
e=p->data;
Q.front->next=p->next; //修改头结点的指针域
if(Q.rear==p) Q.rear=Q.front; //如果最后一个元素被删,队尾指针指向头结点
delete p; //释放原队头元素的空间
return 1;
}
int GetHead(LinkQueue Q)
{
if(Q.front!=Q.rear)
return Q.front->next->data;
}
int main()
{
LinkQueue Q;
InitQueue(Q);
cout<<"五元素入队: "<<endl;
for(int i=0;i<5;i++)
{
int j;
cin>>j;
EnQueue(Q,j);
}
int k;
DeQueue(Q,k);
cout<<"出队1位:"<<endl;
cout<<k<<endl;
DeQueue(Q,k);
cout<<"再出队1位:"<<endl;
cout<<k<<endl;
cout<<"取队头元素:"<<endl;
cout<<GetHead(Q);
return 0;
}