#include <iostream>
using namespace std;
/* 定义ElemType为int类型 */
typedef int ElemType;
#define TRUE 1
#define FALSE 0
#define NULL 0
#define flag -1
typedef struct LQNode
{ElemType data;
struct LQNode *next;
}LQNode, * LinkedQNode;
typedef struct
{struct LQNode *front,*rear;
}LQueue,*LinkedQueue;
LinkedQueue LinkedQueueInit()
{LinkedQueue Q;
LinkedQNode p;
Q=new LQueue;
p=new LQNode;
p->next=NULL;
Q->front=Q->rear=p;
return Q;
}
//判队空
int LinkedQueueEmpty(LinkedQueue Q)
{if(Q->front==Q->rear) return TRUE;
else return FALSE;
}
//入队
void LinkedQueueIn(LinkedQueue Q,ElemType x)
{LinkedQNode p=new LQNode;
p->data=x;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}
//出队
ElemType LinkedQueueOut(LinkedQueue Q)
{LinkedQNode p;
if(Q->front!=Q->rear)
{p=Q->front->next;
Q->front->next=p->next;
ElemType x=p->data;
delete (p);
if(Q->front->next==NULL)
Q->rear=Q->front;
return x;
}
}
/*链队列的清空
LinkedQueue LinkedQueueClear(LinkedQueue Q)
{LinkedQNode p,q;
if(LinkedQueueEmpty(Q))
cout<<"队列已为空!"<<endl;
else {p=Q->front->next;
while(!LinkedQueueEmpty(Q))
{q=p->next;
//p=p->next;
delete p;
p=q;
p=p->next;
}
}
return Q;
}
*/
/*遍历
void LinkedTraverse(LinkedQueue Q)
{if(Q->front->next&&Q->rear->next)
cout<<"空队列!/n";
else
{LinkedQNode p=Q->front->next;
while(p!=Q->rear->next)
{p=p->next;
cout<<p->data<<" ";
}
}
}
*/
int scan()
{int d;
cout<<"请选择要进行的操作/n";
cout<<"1.初始化 2.入队3.出队 4判队空 /n";
cout<<"其他键退出。。。。。/n";
cin>>d;
return(d);
}
int main()
{int quit=0;
ElemType e,f;
LinkedQueue Q;
while(!quit)
switch(scan())
{case 1:Q=LinkedQueueInit();cout<<"/n";break;
case 2:cout<<"输入你要进队的元素!/n";
cin>>e;
LinkedQueueIn(Q,e);cout<<"/n";break;
case 3:
if((Q->front->next==NULL)&&(Q->rear->next==NULL))
cout<<"空链栈!"<<endl;
else
{f=LinkedQueueOut(Q);
cout<<"出队元素是:"<<f<<endl;}
break;
//case 4: LinkedTraverse(Q);break;
//case 4:Q=LinkedQueueClear(Q);
case 4:if(LinkedQueueEmpty(Q))
cout<<"队为空!"<<endl;
else cout<<"队不空!"<<endl;break;
default:quit=1;}
return 0;
}