//h1.h
#include<iostream>
typedef char QElemType;
typedef void Status;
using namespace std;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}*QueuePtr;
typedef struct
{
QueuePtr front;//队头指针
QueuePtr rear;//队尾指针
}LinkQueue;
//function.h
#include"h1.h"
using namespace std;
LinkQueue InitQueue() //构建一个空队列Q(初始化Q队列)
{
LinkQueue Q;
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
exit(0);
Q.front->next=NULL;
return Q;
}
Status EnQueue(LinkQueue &Q,QElemType e) //向队列中插入一个元素
{
if(!Q.front)
cout<<" 不存在队列!"<<endl;
else
{
QNode *p; p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(0);
p->data=e;
p->next=NULL;
Q.rear->next =p; Q.rear =p;
}
}
Status DestroyQueue(LinkQueue &Q) //删除队列中的一个元素
{
while(Q.front)
{ Q.rear=Q.front->next;
free(Q.front); Q.front=Q.rear;
}
cout<<" 成功销毁队列!"<<endl;
}
Status DeQueue(LinkQueue &Q) //销毁队列
{
if(!Q.front) cout<<" 不存在队列!"<<endl;
else
{
QNode *p; QElemType e;
if(Q.front==Q.rear ) exit(0);
p=Q.front->next; e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
cout<<"被删除的元素:"<<e<<endl;
}
}
Status CreateQueue(LinkQueue &Q) //创建一个队列
{
QElemType e; cout<<"请输入创建队列的元素:";
cin>>e;
while(e!='#')
{ EnQueue(Q,e); cin>>e; }
}
Status DispalyQueue(LinkQueue &Q)
{
if(!Q.front)
{ cout<<" 不存在队列!"<<endl; }
else
{ QNode *p; p=Q.front->next; cout<<"显示队列:";
while(p)
{ cout<<p->data; if(p->next) cout<<"->"; p=p->next ; }
cout<<endl;
}
}
//jiemain.h
#include<iostream>
using namespace std;
void jiemain()
{
cout<<" 链队列操作 "<<endl;
cout<<" 1.创建队列 2.显示队列 3.插入元素 "<<endl;
cout<<" 4.删除元素 5.销毁队列 6.退出队列 "<<endl;
}
//main.ccp
#include"function.h"
#include"jiemain.h"
using namespace std;
Status main()
{
LinkQueue Q;
int i,n=0;
jiemain();
Q=InitQueue();
while(n!=1)
{
cout<<"输入操作号码:";
cin>>i;
switch(i)
{
case 1:CreateQueue(Q);break;
case 2:DispalyQueue(Q);break;
case 3:QElemType e;cout<<"请输入插入的元素:";cin>>e;
EnQueue(Q,e);break;
case 4:DeQueue(Q);break;
case 5:DestroyQueue(Q);break;
case 6:n=1;cout<<" 退出! "<<endl;break;
default:cout<<"输入错误!"<<endl;
}
}
}