#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1024
typedef int elemtype;
typedef struct SequenQueue
{
elemtype data[MAXSIZE];
int front;
int rear;
}SequenQueue;
SequenQueue *Init_SequenQueue();
int SequenQueue_Empty(SequenQueue * Q);
int SequenQueue_Full(SequenQueue * Q);
int SequenQueue_Length(SequenQueue *Q);
int Enter_SequenQueue(SequenQueue * Q,elemtype x);
int Delete_SequenQueue(SequenQueue * Q);
int GetFront_SequenQueue(SequenQueue * Q);
int find(SequenQueue * Q,elemtype key);
void menu();
//初始化
SequenQueue *Init_SequenQueue()
{
SequenQueue * Q;
Q=(SequenQueue *)malloc(sizeof(SequenQueue));
if(Q!=NULL)
{
Q->front=0;
Q->rear=0;
}
return Q;
}
//判队列空
int SequenQueue_Empty(SequenQueue * Q)
{
if(Q->front==Q->rear)
{
return 1;
}
else
{
return 0;
}
}
//判断队列满
int SequenQueue_Full(SequenQueue * Q)
{
if((Q->rear+1)%MAXSIZE==Q->front)
{
return 1;
}
else
{
return 0;
}
}
//循环队列的长度
int SequenQueue_Length(SequenQueue * Q)
{
return((Q->rear-Q->front+MAXSIZE)%MAXSIZE);
}
//入队
int Enter_SequenQueue(SequenQueue * Q,elemtype x)
{
if(SequenQueue_Full(Q))
{
return 0;
}
Q->data[Q->rear]=x;
Q->rear=(Q->rear+1)%MAXSIZE;
return 1;
}
//出队
int Delete_SequenQueue(SequenQueue * Q)
{
if(Q->front==Q->rear)
{
return 0;
}
else
{
printf("取出的队头元素:%d",Q->data[Q->front]);
Q->front=(Q->front+1)%MAXSIZE;
return 1;
}
}
//取队头数据元素
int GetFront_SequenQueue(SequenQueue * Q)
{
if(Q->front==Q->rear)
{
return 0;
}
else
{
printf("队头元素:%d",Q->data[Q->front]);
return 1;
}
}
int find(SequenQueue * Q,elemtype key)
{
int j=0;
if(Q->front==Q->rear)
{
return 0;
}
else
{
while(Q->data[Q->front]!=key)
{
j++;
Q->front=(Q->front+1)%MAXSIZE;
}
}
return j;
}
void menu()
{ system("cls");
printf("\t\t1-initial stack\n");
printf("\t\t2-input data\n");
printf("\t\t3-get length\n");
printf("\t\t4-判断队空\n");
printf("\t\t5-修改队头元素\n");
printf("\t\t6-取出队头元素\n");
printf("\t\t7-查找\n");
printf("\t\t8-输出\n");
printf("\t\t9-判断队满\n");
printf("\t\t#-quit\n");
printf("Please select: ");
}
int main()
{
SequenQueue * Q=NULL;
char cmd;
int i,len,isdo;
elemtype x,key;
system("cls");
menu();
while((cmd=getchar())!='#')
{ switch(cmd)
{ case '1': Q=Init_SequenQueue();
printf("\nCreated the Queue!\n");
printf("\n\n\n\t\t\t");
break;
case '2': printf("\nInputing data ....\n");
scanf("%d",&x);
while(x!=0)
{
isdo=Enter_SequenQueue(Q,x);
if(isdo==0)
{
printf("入队失败\n");
}
scanf("%d",&x);
}
printf("\n\n\n\t\t\t");
break;
case '3': printf("\nCaculating the Length of the Queue...\n");
len=SequenQueue_Length(Q);
printf("队列的长度为:%d\n",len);
printf("\n\n\n\t\t\t");
break;
case '4':
isdo=SequenQueue_Empty(Q);
if(isdo==0)
{
printf("队列不为空\n");
}
else if(isdo==1)
{
printf("队列为空\n");
}
printf("\n\n\n\t\t\t");
break;
case '5':
isdo=Delete_SequenQueue(Q);
if(isdo==0)
{
printf("修改队头元素失败\n");
}
else if(isdo==1)
{
printf("新的队头元素为%d\n",Q->data[Q->front]);
}
printf("\n\n\n\t\t\t");
break;
case '6': isdo=GetFront_SequenQueue(Q);
if(isdo==0)
{
printf("取出失败\n");
}
printf("\nGeting the data of the position...\n");
printf("\n\n\n\t\t\t");
break;
case '7': printf("请输入要查找的数值:");
scanf("%d",&key);
isdo=find(Q,key);
if(isdo==0)
{
printf("查找失败\n");
}
else
{
printf("该数值在队列中的位置:%d\n",isdo+1);
}
printf("\n\n\n\t\t\t");
break;
case '8': printf("\nDisplaying the all data of the Queue!...");
while(Q->front!=Q->rear)
{
printf("%d\t",Q->data[Q->front]);
Q->front=(Q->front+1)%MAXSIZE;
}
printf("\n\n\n\t\t\t");
break;
case '9': isdo=SequenQueue_Full(Q);
if(isdo==1)
{
printf("队列已满\n");
}
else
{
printf("队列不满");
}
}
fflush(stdin);
system("pause");
menu();
}
return 0;
}