#include<stdio.h>
#define MaxSize 4 //声明队列元素,可以任意定制
typedef int BOOL;
int menu_select( ); //声明选择函数
typedef struct queue //声明结构体类型
{
int Front,Rear,MaxQueue;
int Elements[MaxSize];
}Queue;
void Create_Queue(Queue *q,int maxsize)
{
q->Front=q->Rear=0;
q->MaxQueue=maxsize;
}
BOOL Is_Empty(Queue *q)
{
if(q->Front==q->Rear)
//头结点等于尾结点,有两中情况:1、在刚开始为空的情
况 下;2、当循环队列中只有一个元素的情况下
{
if(q->Elements[q->Front]==q->Elements[q->Rear])
return 0;
else
return 1;
}
else
{
if(q->Elements[q->Front]==0) //这一步是因为我在serve里面都是将front的后一个赋给front的,所以如果删除所有的元素的情况下要考虑到front的值
return 1;
else
return 0;
}
}
BOOL Is_Full(Queue *q )
{
return (q->Rear+1)%q->MaxQueue==q->Front;
}
void Append(Queue *q,int x)
{
if(Is_Full(q))
{
q->Front=(q->Front+1)%q->MaxQueue; //如果队列已满,再 插入元素的话就覆盖首元素
q->Elements[q->Rear=(q->Rear+1)%q->MaxQueue]=x;
}
else
{
q->Elements[q->Rear=(q->Rear+1)%q->MaxQueue]=x;
}
}
void Serve(Queue *q)
{
if(Is_Empty(q))
printf("Underflow");
else
{
printf("%d",q->Elements[(q->Front)%q->MaxQueue]);
q->Elements[q->Front]=0; //目的是在删除一个元素并没有释放掉 的情况下,将删除的元素内存空间的值赋为0,这样在后面的列印中,才能显示真确的结果!
q->Front=(q->Front+1)%q->MaxQueue;
}
}
void PrintQueue1(Queue *q)
{
if(Is_Empty(q))
printf("/n/nIs Empty!/n/n");
else
{
printf("Front=%d/n",q->Elements[q->Front=(q->Front)%q->MaxQueue]); //显示出首元素
printf("Rear=%d",q->Elements[q->Rear=(q->Rear)%q->MaxQueue]); //显示出尾部元素
}
}
void main()
{
Queue q;
int i,n;
int a[MaxSize];
Create_Queue(&q,MaxSize); /*Construction of a capacity for MaxSize air for Queue*/
for(;;)
{
switch(menu_select() )
{
case 1:
printf("please put into number element:/n"); //输入您想要输入的队列元素个数,最大值为4
scanf("%d",&n);
for(i=0;i<n;i=i++)
{
scanf("%ld",a+i);
}
printf("/n");
for(i=0;i<n;i++)
{
Append(&q,a[i]);
printf("%d ",a[i]);
}
printf("/n/n");
break;
case 2:
Serve(&q);
break;
case 3:
printf("The Front element:/n");
PrintQueue1(&q);
break;
case 0:
printf("/Thank you for your using!/n");
return;
}
}
}
int menu_select() //选择哪一部操作的函数
{
int sn;
printf(" /n");
printf(" Queue operate /n");
printf(" ======================/n");
printf(" 1.Queue Append/n");
printf(" 2.Queue Serve/n");
printf(" 3.print the front element:/n");
printf(" 0.exit Queue operate/n");
printf(" ======================/n");
printf( " please select 0-3 /n");
printf("**************************/n");
for(;;)
{
scanf("%d",&sn);
if(sn<0||sn>3)
printf("/tInsert Error/n");
else
break;
}
return sn;
}
因为我的水平不高,所以在描述中可能有些不准确,但此代码我编译运行过,结果正确(是我想要的结果),不知道是不是各位想要的结果。希望对看的人有所帮助。
各位也可将你们认为好的程序代码、功能更多的程序代码留下来,我们大家一起探讨探讨!