队列算法应用
#include<stdio.h>
#define MAXSIZE 100
typedef char DataType;
typedef struct{
DataType data[MAXSIZE];
int front; //队头下标
int rear; //队尾下标
}SeqQueue;
/*初始化队列*/
void InitQueue(SeqQueue *Q){
Q->front = Q->rear=0;
}
/*判断队空*/
int EmptyQueue(SeqQueue *Q){
if(Q->front == Q->rear)
return 1;
else
return 0;
}
/*入队*/
int InQueue(SeqQueue *Q,DataType x){
if((Q->rear+1)%MAXSIZE == Q->front){
printf("队满,不能入队!");
return 0;
}
else{
Q->rear = (Q->rear+1) % MAXSIZE;
Q->data[Q->rear] = x;
return 1;
}
}
/*出队*/
int DeQueue(SeqQueue *Q,DataType *x){
if(EmptyQueue(Q)){
printf("队空,不能出队!");
return 0;
}
else{
Q->front = (Q->front+1)%MAXSIZE; //队头指针增1
*x = Q->data[Q->front]; //队头元素赋给指针x的变量
return 1;
}
}
/*取队头元素*/
int GetFront(SeqQueue *Q,DataType *x){
if(EmptyQueue(Q)){
printf("队空,无队头元素!");
return 0;
}
else{
*x = Q->data[(Q->front+1) % MAXSIZE];
return 1;
}
}
/*显示队列元素*/
void ShowQueue(SeqQueue *Q){
int p=Q->front;
if(p == Q->rear){
printf("队列为空,无元素!");
}
else{
printf("从队头起,队列中的元素为:");
while(p != Q->rear){
p = (p+1)%MAXSIZE;
printf("%c",Q->data[p]);
}
}
}
void Menu()
{
printf("\n 队列的各种操作");
printf("\n===================================================");
printf("\n| 1--初始化队列 |");
printf("\n| 2--调用入队函数 |");
printf("\n| 3--调用出队函数,输出队列Q中指定的个数 |");
printf("\n| 4--输出此时的队头元素 |");
printf("\n| 5--调用显示函数,输出顺序队列Q |");
printf("\n===================================================");
printf("\n请输入菜单号(0-5):");
}
main(){
int i,n,flag;
SeqQueue Q;
DataType x; //char x
char ch1,ch2,a;
ch1 = 'y';
while(ch1 == 'y' || ch1 == 'Y'){
Menu();
scanf(" %c",&ch2);
getchar();
switch(ch2){
case '1':
InitQueue(&Q);
printf("队的初始化完成!");
break;
case '2':
printf("请输入入队元素的个数:");
scanf("%d",&n);
printf("请输入%d个入队的字符",n);
for(i=0; i<n; i++){
scanf(" %c",&x);
flag = InQueue(&Q,x);
}
if(flag == 1)
printf("入队成功!");
else
printf("入队失败!");
break;
case '3':
printf("请输入要出队元素的个数:");
scanf("%d",&n);
printf("出队的元素顺序依次为:");
for(i=0; i<n; i++){
flag = DeQueue(&Q,&x);
printf("%c",x);
}
if(flag == 1)
printf("出队成功!");
else
printf("出队失败!");
break;
case '4':
if(flag = GetFront(&Q,&x))
printf("当前队头元素为:%c",x);
break;
case '5':
ShowQueue(&Q);
break;
case '0':
ch1 = 'n';
break;
default:
printf("输入有误!请重新输入!");
}
}
}