循环队列
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct
{
int *base;
int front;
int rear;
}SqQueue;
void InitQueue(SqQueue &Q)
{
Q.base=new int[MAXSIZE];
Q.front=Q.rear=0;
}
int QueueLength(SqQueue Q)
{
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
void EnQueue(SqQueue &Q,int e)
{
if((Q.rear+1)%MAXSIZE==Q.front){cout<<"队满"<<endl;return;}
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
}
void DeQueue(SqQueue &Q,int &e)
{
if(Q.front==Q.rear){cout<<"队空"<<endl;return;}
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
}
int GetHead(SqQueue Q)
{
if(Q.front!=Q.rear)
return Q.base[Q.front];
}
int main()
{
SqQueue Q;
InitQueue(Q);
EnQueue(Q,1);
EnQueue(Q,5);
EnQueue(Q,7);
int ans1=GetHead(Q);
cout<<ans1<<endl;
DeQueue(Q,ans1);
cout<<ans1<<endl;
DeQueue(Q,ans1);
cout<<ans1<<endl;
int length=QueueLength(Q);
cout<<length<<endl;
return 0;
}
链队
#include <iostream>
using namespace std;
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
void InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
}
void EnQueue(LinkQueue &Q,int e)
{
QNode *p;
p=new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
void DeQueue(LinkQueue &Q,int &e)
{
if(Q.front==Q.rear){cout<<"队空"<<endl;return;}
QNode *p;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)Q.rear=Q.front;
delete p;
}
int GetHead(LinkQueue Q)
{
if(Q.front!=Q.rear)
return Q.front->next->data;
}
int main()
{
LinkQueue Q;
InitQueue(Q);
EnQueue(Q,1);
EnQueue(Q,5);
EnQueue(Q,7);
int ans1=GetHead(Q);
cout<<ans1<<endl;
DeQueue(Q,ans1);
cout<<ans1<<endl;
DeQueue(Q,ans1);
cout<<ans1<<endl;
return 0;
}