顺序队列
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int *elem;
int queuesize;
int rear=0;
int front=0;
}Queue;
int InitQueue(Queue &s)
{
s.elem=(int *)malloc(10*sizeof(int));
s.queuesize=10;
return 1;
}
int print(Queue s)
{
while(s.front!=s.rear)
{
printf("%d",s.elem[s.front]);
s.front++;
}
}
int enQueue(Queue &s,int e)
{
if(s.rear==s.queuesize)
{
int *newbase;
newbase=(int *)realloc(s.elem,(s.queuesize+10)*sizeof(int));
s.elem=newbase;
s.queuesize=s.queuesize+10;
}
s.elem[s.rear]=e;
s.rear++;
return 0;
}
int deQueue(Queue &s)
{
if(s.front==s.rear)
{
return 0;
}
s.front++;
}
int QueueEmpty(Queue s)
{
if(s.front==0&&s.rear==0)
{
return 1;
}
return 0;
}
void destroyQueue(Queue &s)
{
delete s.elem;
}
main()
{
Queue s;
InitQueue(s);
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int e;
scanf("%d",&e);
enQueue(s,e);
}
deQueue(s);
// destroyQueue(s);
print(s);
}
链队
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
using namespace std;
typedef struct QNode{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}QueueLink;
int InitQueue(QueueLink &s)
{
s.rear=s.front=(QueuePtr)malloc(sizeof(QNode));
s.front->next=NULL;
return 0;
}
int Print(QueueLink &s)
{
QueuePtr q;
q=s.front->next;
while(q!=NULL)
{
printf("%d",q->data);
q=q->next;
}
}
int enQueue(QueueLink &s,int e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
s.rear->next=p;
s.rear=p;
return 0;
}
bool QueueEmpty(QueueLink s)
{
if(s.front==s.rear)
{
return true;
}
return false;
}
int deQueue(QueueLink &s)
{
if(s.front==s.rear)
{
return 0;
}
s.front=s.front->next;
}
int GetTop(QueueLink s)
{
if(s.rear==s.front)
{
return 0;
}
int x;
x=s.front->next->data;
return x;
}
int GetLength(QueueLink s)
{
QueuePtr p;
p=s.front->next;
int i=1;
while(p!=NULL)
{
i++;
p=p->next;
}
return i-1;
}
int main()
{
QueueLink s;
InitQueue(s);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int e;
cin>>e;
enQueue(s,e);
}
cout<<QueueEmpty(s)<<endl;
cout<<GetTop(s)<<endl;
cout<<GetLength(s)<<endl;
Print(s);
}
循序队
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct{
int *base;
int front;
int rear;
int length;
int queuesize;
}SQueue;
int InitQueue(SQueue &s)
{
s.base=(int*)malloc(10*sizeof(int));
s.rear=s.front=0;
s.length=0;
s.queuesize=10;
return 0;
}
int Print(SQueue s)
{
int k=s.front;
for(int i=0;i<s.length;i++)
{
cout<<s.base[k]<<" ";
k=(k+1)%s.queuesize;
}
}
int enQueue(SQueue &s,int e)
{
if(s.length==s.queuesize)
{
return 0;
}
s.base[s.rear]=e;//元素入队
s.rear=(s.rear+1)%s.queuesize;//位置后移
s.length++;//元素个数增加
}
int deQueue(SQueue &s)
{
if(s.length==0)
{
return 0;
}
s.front=(s.front+1)%s.queuesize;
s.length--;
return 1;
}
int getHead(SQueue s)
{
if(s.length==0)
{
return 0;
}
return s.base[s.front];
}
bool QueueEmpty(SQueue s)
{
if(s.length==0)
{
return true;
}
return false;
}
int main()
{
SQueue s;
InitQueue(s);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int e;
cin>>e;
enQueue(s,e);
}
deQueue(s);
Print(s);
}
注:循环队列的长度:s.length=(s.rear-s.front+s.queuesize)%s.queuesize;