AC代码:
#include <iostream>
#define Status int
#define QElemType int
using namespace std;
// 链队结点数据结构
typedef struct QNode
{
QElemType data; // 数据域
struct QNode *next; // 指针域
}QNode, *QueuePtr;
typedef struct
{
struct QNode *front, *rear; // 队头,队尾指针
}LinkQueue;
//*****************************基本操作函数******************************//
//初始化函数
Status InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = new QNode; // 生成新结点作为头结点,队头队尾指针均指向它
Q.front->next = NULL;
return 1;
}
// 入队函数
Status EnQueue(LinkQueue &Q, QElemType e)
{
QNode *p;
p = new QNode; // 生成新结点
p->data = e; // 赋值
p->next = NULL;
Q.rear->next = p; // 加入队尾
Q.rear = p; // 队尾指针后移
return 1;
}
// 出队函数
bool DeQueue(LinkQueue &Q, QElemType &e)
{
QueuePtr p;
if(Q.front==Q.rear) // 队空
return false;
e = Q.front->next->data;
p = Q.front->next; // 复制指针,一会释放空间
Q.front->next = p->next;
if(Q.rear==p)
Q.rear = Q.front; // 如果最后一个元素出队,尾指针指向头结点
free(p);
return true;
}
//取队头函数
bool GetHead(LinkQueue &Q, QElemType &e)
{
if(Q.front==Q.rear) // 队空
return false;
e = Q.front->next->data;
return true;
}
// **********************************功能实现函数************************//
// 入队功能函数,调用EnQueue函数
void EnterQueue(LinkQueue &Q)
{
int n; QElemType e; int flag;
cout<<"请输入入队元素个数(>=1):"<<endl;
cin>>n;
for(int i = 0; i<n; i++)
{
cout<<"请输入第"<<i+1<<"个元素的值:"<<endl;
cin>>e;
flag = EnQueue(Q, e);
if(flag)
cout<<e<<"已入队"<<endl;
}
}
// 出队功能函数 调用DeQueue函数
void OutQueue(LinkQueue &Q)
{
int n; QElemType e; int flag;
cout<<"请输入出队元素个数(>=1):"<<endl;
cin>>n;
for(int i = 0; i<n; i++)
{
flag = DeQueue(Q, e);
if(flag)
cout<<e<<"已出队"<<endl;
else
{
cout<<"队列已空!"<<endl;
break;
}
}
}
// 取队头功能函数 调用GetHead函数
void GetHeadOfQueue(LinkQueue &Q)
{
QElemType e; bool flag;
flag = GetHead(Q, e);
if(flag)
cout<<"队头元素为:"<<e<<endl;
else
cout<<"队列已空!"<<endl;
}
// 菜单
void menu()
{
cout<<"********1.入队 2.出队********"<<endl;
cout<<"********3.取队头 4.退出********"<<endl;
}
int main()
{
LinkQueue Q;
int choice;
InitQueue(Q);
while(1)
{
menu();
cout<<"请输入菜单序号:"<<endl;
cin>>choice;
if(choice==4)
break;
switch(choice)
{
case 1: EnterQueue(Q); break;
case 2: OutQueue(Q); break;
case 3: GetHeadOfQueue(Q); break;
default : cout<<"输入错误!"<<endl;
}
}
return 0;
}