队列
#include <iostream>
using namespace std;
#define maxsize 10
typedef struct queue1{
int *base;
int front1;
int rear;
}que;
bool initqueue(que &q)//循环队列的初始化
{
q.base=new int[maxsize];
q.front1=q.rear=0;
return true;
}
int queuelength(que q)//循环队列的长度
{
return (q.rear-q.front1+maxsize)%maxsize;
}
bool enqueue(que &q,int x)//循环队列的入队
{
if((q.rear+1)%maxsize==q.front1)
return false;
else
{
q.base[q.rear]=x;
q.rear=(q.rear+1)%maxsize;
return true;
}
}
bool dequeue(que &q,int &x)//循环队列的出队
{
if(q.front1==q.rear)
return false;
else
{
x=q.base[q.front1];
q.front1=(q.front1+1)%maxsize;
return true;
}
}
int getqueue(que q)//取循环队列的队头元素
{
return q.base[q.front1];
}
int main()
{
que q;
int i,x,y,z;
initqueue(q);
for(i=0;i<5;i++)
{
scanf("%d",&x);
enqueue(q,x);
}
printf("%d\n",getqueue(q));
dequeue(q,x);
printf("%d\n",getqueue(q));
return 0;
}
input
1 2 3 4 5
output
1
2
链队
#include <iostream>
using namespace std;
typedef struct queue1{
int data;
struct queue1 *next;
}que,*queu;
bool initqueue(queu &front1,queu &rear)
{
front1=rear=NULL;
return true;
}
void enqueue(queu &front1,queu &rear,int x)
{
queu p;
p=new que;
p->data=x;
p->next=NULL;
if(front1==NULL)
{
front1=p;
rear=p;
}
else
{
rear->next=p;
rear=p;
}
}
void dequeue(queu &front1,queu &rear,int &x)
{
queu p;
p=front1;
x=p->data;
front1=front1->next;
delete p;
}
int getqueue(queu &front1)
{
return front1->data;
}
int main()
{
queu front1,rear;
int i,x,y,z;
initqueue(front1,rear);
for(i=0;i<5;i++)
{
scanf("%d",&x);
enqueue(front1,rear,x);
}
printf("%d\n",getqueue(front1));
dequeue(front1,rear,x);
printf("%d\n",getqueue(front1));
return 0;
}
input
1 2 3 4 5
output
1
2