/*
*数据结构值顺序队列的基本操作,用菜单实现(初始化,判满,进队列,判空,出队列,从队头打印到队尾,从队尾打印到队头)
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAXSIZE 10
#define FALSE 0
#define TRUE 1
typedef struct {
char elem[MAXSIZE];
int front;
int rear;
}SeQueue;
//初始化队列
void InitQueue(SeQueue *Q){
Q->front=Q->rear=0;
}
//判空
int IsEmpty(SeQueue *Q){
if(Q->rearQ->front)
return TRUE;
else
return FALSE;
}
//判满
int IsFull(SeQueue *Q){
if((Q->rear+1)%MAXSIZEQ->front)
return TRUE;
else
return FALSE;
}
//进队列
int EnterQueue(SeQueue *Q,char x){
if((Q->rear+1)%MAXSIZEQ->front)
return FALSE;
Q->elem[Q->rear]=x;
Q->rear=(Q->rear+1)%MAXSIZE;
return TRUE;
}
//出队列 (从队头出,从队尾入)
int DeleteQueue(SeQueue *Q,char *x){
if(Q->rearQ->front)
return FALSE;
*x=Q->elem[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return TRUE;
}
//求队列的长度
int LengthQueue(SeQueue *Q){
int sum=0;
int i;
for(i=Q->front+1;i<=Q->rear;i++)
sum++;
printf(“现在的队列的长度为:%d\n”,sum);
return TRUE;
}
//从队头打印到队尾
void PrintQueue(SeQueue *Q){
int t;
t=Q->front;
while (t !=Q->rear)
{
printf("%3c",Q->elem[t]);
t=(t+1)%MAXSIZE;
}
//printf("%3c",Q->elem[Q->front]);
}
//从队尾打印到队头
void PrintQueue2(SeQueue *Q){
int t;
t=Q->rear;
while (t !=Q->front)
{
printf("%3c",Q->elem[t]);
t=(t-1)%MAXSIZE;
}
printf("%3c",Q->elem[Q->front]);
}
int main(){
//创建一个队列Q
SeQueue Q;
char x;
char sel=’ ';
while(sel !=‘0’){
printf("-----队列演示系统-----\n");
printf("*********************\n");
printf(" 1.初始化操作\n");
printf(" 2.进队操作\n");
printf(" 3.出队操作\n");
printf(" 4.打印队伍长度\n");
printf(" 5.(从头到尾)打印队伍\n");
printf(" 6.清空屏幕\n");
printf(" 7.(从队尾大队头)打印队列\n");
printf(" 0.退出系统\n");
printf(“请输入选项[0-7]:\n”);
sel=getch();
switch (sel)
{
case ‘1’:
printf(“初始化队列\n”);
InitQueue(&Q);
printf(“初始化成功\n”);
system(“pause”);
break;
case '2':
fflush(stdin);//清除输入缓冲区
printf("进队列操作.\n");
printf("请输入你要进入队列的数据:\n");
scanf("%c",&x);
if(EnterQueue(&Q,x)==true)
printf("进队列成功!\n");
else
printf("进队列失败!\n");
system("pause");
break;
case '3':
printf("出队列操作.\n");
if(DeleteQueue(&Q,&x))
printf("出队列成功!\n");
else
printf("出队列失败!\n");
system("pause");
break;
case '4':
printf("打印队列长度操作.\n");
LengthQueue(&Q);
system("pause");
break;
case '5':
printf("(从队头到队尾)打印队列操作.\n");
printf("现在队列的元素为:");
PrintQueue(&Q);
system("pause");
break;
case '6':
system("cls");
break;
case '7':
printf("(从队尾到队头)打印队列操作.\n");
printf("现在队列中的元素为.\n");
PrintQueue2(&Q);
system("pause");
break;
case '0':
printf("\n谢谢使用,再见!\n");
break;
default:
printf("你输入的选项不合法,请重新输入!\n");
printf("按任意键继续\n");
system("pause");
}
}
return 0;
}