循环队列的简单实现
#include<iostream>
#define MAXQSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
using namespace std;
typedef int Status;
typedef struct
{
int *base;
int front;
int rear;
}SqQueue;
Status InitQueue(SqQueue &Q)
{
Q.base=new int[MAXQSIZE];
if(!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
Status QueueLength(SqQueue Q)
{
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
Status EnQueue(SqQueue &Q,int e)
{
if((Q.rear+1) % MAXQSIZE == Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue &Q,int &e)
{
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
Status GetHead(SqQueue Q)
{
if(Q.front!=Q.rear)
return Q.base[Q.front];
}
Status QueueEmpty(SqQueue Q)
{
if(Q.front ==Q.rear )
return OK;
else
return ERROR;
}
void ClearQueue(SqQueue &Q)
{
if(Q.base) Q.front = Q.rear;
}
void DetroyQueue(SqQueue &Q)
{
if(Q.base)
{
delete Q.base;
}
}
int main()
{
SqQueue Q;
cout<<"简单实现循环队列:"<<endl;
cout<<"初始化:"<<endl;
if(InitQueue(Q))
cout<<"初始化成功!"<<endl<<endl;
else
cout<<"初始化失败!"<<endl<<endl;
cout<<"输入你想要几个元素入队:";
int n,e,x;
cin>>n;
cout<<"输入这几个元素:";
for(int i=1;i<=n;i++)
{
cin >> x;
EnQueue(Q,x);
}
cout<<endl;
cout<<"此时队列内的元素个数为:"<<QueueLength(Q)<<endl<<endl;
cout<<"删除队头元素:"<<endl;
if(DeQueue(Q,e))
cout <<"删除成功!"<<"这个元素是:"<<e<<endl<<endl;
else
cout<<"删除失败!"<<endl<<endl;
cout<<"取队头元素:"<<GetHead(Q)<<endl<<endl;
if(QueueEmpty(Q))
cout<<"循环队列为空!"<<endl<<endl;
else
cout<<"循环队列不为空!"<<endl<<endl;
cout<<"此时队列内的元素个数为:"<<QueueLength(Q)<<endl<<endl;
cout<<"清除队列:"<<endl;
ClearQueue(Q);
cout <<"已清除!"<<"此时队列内的元素个数为:"<<QueueLength(Q)<<endl<<endl;
if(QueueEmpty(Q))
cout<<"循环队列为空!"<<endl<<endl;
else
cout<<"循环队列不为空!"<<endl<<endl;
cout<<"销毁队列:"<<endl;
DetroyQueue(Q);
cout<<"已销毁!";
return 0;
}
链队的简单实现
#include<iostream>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
using namespace std;
typedef int Status;
typedef struct QNode
{
int data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return OK;
}
Status EnQueue(LinkQueue &Q,int e)
{
QueuePtr p;
p=new QNode;
p->data=e;
p->next=NULL; Q.rear->next=p;
Q.rear=p;
return OK;
}
Status DEQueue(LinkQueue &Q,int &e)
{
QueuePtr p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
delete p;
return OK;
}
Status GetHead(LinkQueue Q)
{
if(Q.front!=Q.rear)
return Q.front->next->data;
}
Status EmptyQueue(LinkQueue Q)
{
if(Q.front==Q.rear)
return OK;
else
return ERROR;
}
Status LengthQueue(LinkQueue Q)
{
int len=0;
QueuePtr p=Q.front;
while(p->next!=NULL)
{
p=p->next;
len++;
}
return len;
}
void ClearQueue(LinkQueue &Q)
{
if(Q.front)
Q.front->next =NULL;
}
void DestroyQueue(LinkQueue &Q)
{
QueuePtr p;
while(Q.front)
{
p=Q.front->next;
delete Q.front;
Q.front=p;
}
}
int main()
{
LinkQueue Q;
cout<<"链队的简单实现:"<<endl;
cout<<"初始化:"<<endl;
if(InitQueue(Q))
cout <<"初始化成功!"<<endl<<endl;
else
cout <<"初始化失败!"<<endl<<endl;
cout<<"输入你想让几个元素入队:";
int n,x;
cin >> n;
cout<<"输入这几个元素:";
for(int i=0;i<n;i++)
{
cin>>x;
EnQueue(Q,x);
}
cout<<endl;
int e;
cout<<"删除队头元素:"<<endl;
if(DEQueue(Q,e))
cout <<"删除成功!"<<"这个元素是:"<<e<<endl<<endl;
else
cout<<"删除失败!"<<endl<<endl;
if(EmptyQueue(Q))
cout <<"链队空!"<<endl<<endl;
else
cout<<"链队非空!"<<endl<<endl;
cout<<"队内元素个数为:"<<LengthQueue(Q)<<endl<<endl;
cout<<"取队头元素:"<<GetHead(Q)<<endl<<endl;
cout<<"清除链队:"<<endl;
ClearQueue(Q);
cout <<"已清除!"<<"此时元素个数为:"<< LengthQueue(Q)<<endl<<endl;
cout<<"销毁链队:"<<endl;
DestroyQueue(Q);
cout<<"已销毁!";
return 0;
}