循环队列
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100
typedef struct{
int data[MAX_SIZE];
int front;
int rear;
}SeqQueue;
void InitQueue(SeqQueue *Q){//初始化队列
if(!Q){printf("内存分配错误\n"); return;}
Q->front=0;
Q->rear=0;
printf("初始化完毕\n");
}
void InQueue(SeqQueue *Q,int e){//进队列
int pos=(Q->rear+1)%MAX_SIZE;
if(!Q){printf("内存分配错误\n"); return;}
if(pos==Q->front){
printf("内存已经满了\n");
return;
}
Q->data[Q->rear]=e;
Q->rear=pos;
printf("%d已经入队\n",e);
}
void OutQueue(SeqQueue *Q){//出队列
int e;
if(!Q){printf("内存分配错误\n"); return;}
if(Q->front==Q->rear){printf("队列为空\n");return;}
e=Q->data[Q->front];
Q->front=(Q->front+1)%MAX_SIZE;
printf("%d已经出队\n",e);
}
void IsEmpty(SeqQueue *Q){//是否为空
if(!Q){printf("内存分配错误\n"); return;}
if(Q->rear==Q->front){printf("队列为空\n");}
printf("队列不为空\n");
}
void LengthQueue(SeqQueue *Q){//队列长度
int length;
length=((Q->rear-Q->front+MAX_SIZE)%MAX_SIZE);
printf("队列的长度为:%d\n",length);
}
void TraversalQueue(SeqQueue *Q){//遍历队列
int i;
int p=Q->front;
if(!Q){printf("内存分配错误\n"); return;}
if(Q->front==Q->rear){printf("队列为空\n");return;}
for(i=Q->front;i<Q->rear;i++){
printf("%d\t",Q->data[p]);
p++;
}
printf("\n");
}
int main(void){
SeqQueue* Q=(SeqQueue*)malloc(sizeof(SeqQueue));
int n,a;
int y=1;
while(y){
printf("***********************\n");
printf("--1.初始化队列--\n");
printf("--2.进队--\n");
printf("--3.出队--\n");
printf("--4.遍历队--\n");
printf("--5.求队长--\n");
printf("--6.队是否为空--\n");
printf("--7.退出--\n");
printf("请输入你要进行的操作:\n");
scanf("%d",&n);
switch(n){
case 1: InitQueue(Q); break;
case 2: printf("请输入你要进队的数:\n");scanf("%d",&a);InQueue(Q,a); break;
case 3: OutQueue(Q); break;
case 4: TraversalQueue(Q); break;
case 5: LengthQueue(Q); break;
case 6: IsEmpty(Q); break;
case 7: y=0;break;
}
}
return 0;
}