循环队列
#include<stdio.h>
#include<malloc.h>
typedef struct Queue{
int *pBase;
int front;
int rear;
}Que;
void init(Que *p){
p->pBase = (int *)malloc(sizeof(int) * 6);
p->front=p->rear=0;
}
bool en(Que *p,int val){
if((p->rear+1)%6==p->front){
printf("溢出了");
return false;
}
else{
p->pBase[p->rear]=val;
p->rear = (p->rear+1)%6 ;
return true;
}
}
void print(Que *p)
{
int a;
a=(p->front)%6;
for(;a!=p->rear;a=a%6){
printf("%d ",p->pBase[a]);
a++;
}
}
bool De(Que *p,int *e)
{
if(p->rear==p->front){
printf("队列为空");
return false;
}
else{
*e=p->pBase[p->front];
p->front=(p->front+1)%6;
return true;
}
}
int main(){
Que Q;
init(&Q);
en(&Q,1);
en(&Q,2);
en(&Q,3);
en(&Q,4);
print(&Q);
int b;
De(&Q,&b);
printf("出队为%d\n",b);
print(&Q);
return 0;
}
链式队列
#include<stdio.h>
#include<malloc.h>
typedef struct Qnode
{
int date;
struct Qnode *next;
}Qn,*QNO;
typedef struct{
QNO front;
QNO rear;
}Link;
void init(Link &Q){
Q.front=Q.rear=new Qn;
Q.front->next=NULL;
}
void inset(Link &Q,int e){
QNO p;
p=new Qn;
p->date=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
bool print(Link &Q){
if(Q.rear==Q.front){
printf("队列为空");
return false;
}
else{
QNO p;
for(p=Q.front->next;p!=Q.rear->next;p=p->next){
printf("%d ",p->date);
}
return true;
}
}
bool sta(Link &Q,int *e){
if(Q.rear==Q.front){
printf("队列为空");
return false;
}
else
{
QNO p;
p=Q.front->next;
*e=Q.front->next->date;
Q.front->next=Q.front->next->next;
if(Q.rear==Q.front->next){
Q.rear=Q.front;
}
delete p;
return true;
}
}
int main(){
Link Q;
init(Q);
inset(Q,1);
inset(Q,2);
inset(Q,3);
print(Q);
int e;
sta(Q,&e);
printf("出队为%d\n",e);
print(Q);
return 0;
}