#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("输入有误!请重新输入!"); } } }
28
2019
10
队列算法应用
作者:浩雨 | 分类:算法 | 浏览:6033