一、顺序队
#include<iostream>
#include<stdlib.h>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int Status ;
typedef int ElemType;
typedef struct
{
ElemType *base;
int front;
int rear;
}SqQueue;
Status InitQueue(SqQueue &Q);
Status EnQueue(SqQueue &Q,ElemType e);
Status DeQueue(SqQueue &Q,ElemType &e) ;
Status GetHead(SqQueue &Q,ElemType &e) ;
bool EmptyQueue(SqQueue Q);
int Length(SqQueue Q);
void Show(SqQueue Q);
//初始化
Status InitQueue(SqQueue &Q)
{
Q.base=new ElemType[MAXSIZE];
if(Q.base==NULL)
return ERROR;
Q.front=Q.rear=0;
return OK;
}
//入队
Status EnQueue(SqQueue &Q,ElemType e)
{
if((Q.rear+1)%MAXSIZE==Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
return OK;
}
//出队
Status DeQueue(SqQueue &Q,ElemType &e)
{
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
return OK;
}
//取队顶元素
Status GetHead(SqQueue &Q,ElemType &e)
{
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
return OK;
}
//判断队是否为空
bool EmptyQueue(SqQueue Q)
{
if(Q.front==Q.rear)
return true;
else
return false;
}
//计算有效长度
int Length(SqQueue Q)
{
if(Q.front==Q.rear)
return ERROR;
else
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
//输出函数
void Show(SqQueue Q)
{
if(Q.front==Q.rear)
{
cout<<"栈空,输出错误"<<endl;
return ;
}
while(Q.front!=Q.rear)
{
cout<<Q.base[Q.front]<<" ";
Q.front=(Q.front+1)%MAXSIZE;
}
cout<<endl;
}
int main()
{
SqQueue Q;
ElemType e;
int choice;
int i;
while(1)
{
cout<<"1、初始化 2、入队 3、出队 4、显示"<<endl;
cout<<"5、判断队空 6、取队头元素 7、计算长度 0、退出"<<endl;
cout<<"输入选项=";
cin>>choice;
switch(choice)
{
case 1:
InitQueue(Q);
cout<<"初始化成功"<<endl;
break;
case 2:
cout<<"入队数据=";
cin>>e;
if(EnQueue(Q,e)==OK)
cout<<"插入成功"<<endl;
else
cout<<"插入失败"<<endl;
break;
case 3:
if(DeQueue(Q,e)==OK)
{
cout<<"出队成功"<<endl;
cout<<"出队数据="<<e<<endl;
}
else
cout<<"出队失败"<<endl;
break;
case 4:
Show(Q);
break;
case 5:
if(EmptyQueue(Q)==true)
cout<<"队空"<<endl;
else
cout<<"队非空"<<endl;
break;
case 6:
if(GetHead(Q,e)==OK)
cout<<"对头元素="<<e<<endl;
else
cout<<"输出错误"<<endl;
break;
case 7:
i=Length(Q);
cout<<"当前有效长度="<<i<<endl;
break;
case 0:
return 0;
default:
cout<<"选项输入错误!"<<endl;
}
system("pause");
system("cls");
}
return 0;
}
二、链队
#include<iostream>
#include<stdlib.h>
using namespace std;
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
//类型定义
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode;
typedef struct
{
QNode *front;
QNode *rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q);
Status EnQueue(LinkQueue &Q,ElemType e);
Status DeQueue(LinkQueue &Q,ElemType &e);
ElemType GetHead(LinkQueue Q,ElemType &e);
void Show(LinkQueue Q);
Status EmptyQueue(LinkQueue Q);
//初始化
Status InitQueue(LinkQueue &Q)
{
QNode *p;
p=new QNode;
if(!p) return ERROR;
Q.front =Q.rear=p;
p->next=NULL;
return OK;
}
//输入数据
Status EnQueue(LinkQueue &Q,ElemType e)
{
QNode *p;
p=new QNode;
if(!p) return ERROR;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
//输出数据
Status DeQueue(LinkQueue &Q,ElemType &e)
{
QNode *p;
if(Q.front ==Q.rear) return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(p==Q.rear) Q.rear =Q.front ;
delete p;
return OK;
}
//取对头元素
ElemType GetHead(LinkQueue Q,ElemType &e)
{
if(Q.front ==Q.rear) return ERROR;
else return Q.front->next->data;
}
//输出函数
void Show(LinkQueue Q)
{ QNode *p;
if(Q.front ==Q.rear)
{
cout<<"队空,输出错误"<<endl;
return ;
}
p=Q.front->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//判断是否为空
Status EmptyQueue(LinkQueue Q)
{
if(Q.front ==Q.rear)
return OK;
else
return ERROR;
}
int main()
{
LinkQueue Q;
ElemType e;
int choice;
int i;
while(1)
{
cout<<"1、初始化 2、入队 3、出队 4、显示"<<endl;
cout<<"5、判断队空 6、取队头元素 0、退出"<<endl;
cout<<"输入选项=";
cin>>choice;
switch(choice)
{
case 1:
InitQueue(Q);
cout<<"初始化成功"<<endl;
break;
case 2:
cout<<"入队数据=";
cin>>e;
if(EnQueue(Q,e)==OK)
cout<<"插入成功"<<endl;
else
cout<<"插入失败"<<endl;
break;
case 3:
if(DeQueue(Q,e)==OK)
{
cout<<"出队成功"<<endl;
cout<<"出队数据="<<e<<endl;
}
else
cout<<"出队失败"<<endl;
break;
case 4:
Show(Q);
break;
case 5:
if(EmptyQueue(Q)==true)
cout<<"队空"<<endl;
else
cout<<"队非空"<<endl;
break;
case 6:
if(GetHead(Q,e)==ERROR)
cout<<"输入错误"<<endl;
else
cout<<GetHead(Q,e)<<endl;
break;
case 0:
return 0;
default:
cout<<"选项输入错误!"<<endl;
}
system("pause");
system("cls");
}
return 0;
}