#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;
}
因爲我的水平不高,所以在描述中可能有些不準確,但此代碼我編譯運行過,結果正確(是我想要的結果),不知道是不是各位想要的結果。希望對看的人有所幫助。
各位也可將你們認爲好的程序代碼、功能更多的程序代碼留下來,我們大家一起探討探討!