1 #include<stdio.h>
2 #include<stdlib.h>
3 #define MAXSIZE 5
4
5 typedef int ElemType;
6 //队列结构体
7 typedef struct{
8 ElemType data[MAXSIZE];
9 int front,rear;//队头与队尾指针 (实际就是两个变量)
10 }SqQueue;
11 //初始化顺序队列
12 int InitQueue(SqQueue *S){
13 S->front=S->rear=0;
14 //指针赋0,就是不指向任何对象,相当于NULL。
15 }
16 //销毁队列
17 int DestroyQueue(SqQueue *S){
18
19 }
20 //判断队列为空
21 int IsEmpty(SqQueue *S){
22 if(S->front==S->rear){
23 return 1;
24 }
25 return 0;
26 }
27 //判断队列以满
28 //int IsFull(SqQueue *S){
29 // if(S->rear==MAXSIZE&&S->front==0){
30 // return printf("队满\n");;
31 // }else if(S->rear==MAXSIZE&&S->front!=0){
32 // return printf("队满,但队内前端依然有空位\n");
33 // }
34 // return 0;
35 //}
36
37 //进队运算算法
38 int EnQueue(SqQueue *S){
39 if(S->rear==MAXSIZE&&S->front==0){
40 return printf("队满\n");;
41 }else if(S->rear==MAXSIZE&&S->front!=0){
42 return printf("队满,但队内前端依然有空位\n出现假溢出现象\n");
43 }
44 int n;
45 printf("请输入你想入队的值\n");
46 scanf("%d",&n);
47 S->data[S->rear]=n;
48 S->rear=S->rear+1;
49 // S->front=S->front+1;
50 return printf("进队成功\n");
51 }
52 //输出队列元素
53 int DisElem(SqQueue *S){
54 if(IsEmpty(S)){
55 return printf("队内是空无法输出\n");
56 }
57 int i=S->front;//i=0
58 printf("队内元素有:\n");
59 for(int n=0;i<S->rear;n++){
60 printf("%3d",S->data[i]);
61 i++;
62 }
63 printf("\n");
64 return printf("输出成功");
65 }
66 //获取队首元素
67 int GetHead(SqQueue *S){
68 if(IsEmpty(S)){
69 return printf("队内是空\n");
70 }
71 return printf("队首元素为\n%d",S->data[S->front]);
72 }
73 int GetLength(SqQueue *S){
74 if(IsEmpty(S)){
75 return printf("队内为空\n");
76 }
77 return printf("队的长度为%d",S->rear);
78
79 }
80 //出队
81 int DeleteQueue(SqQueue *S){
82 if(IsEmpty(S)){
83 return printf("队内是空无法输出\n");
84 }
85 int x;
86 // SqQueue *temp=S->front;
87 x=S->data[S->front];
88 S->front=S->front+1;
89 return printf("出队的元素为%d\n",x);
90 }
91 //使前端空位补上解决假溢出问题
92 int FrontQueue(SqQueue *S){
93 if(S->rear==MAXSIZE&&S->front!=0){
94 int n;
95 while(S->front!=0){
96 S->front=S->front-1;
97 printf("请输入你想入队的数\n");
98 scanf("%d",&n);
99 S->data[S->front]=n;
100 }
101 printf("你已经成功填补空位");
102 }
103 return printf("现在未出现假溢出现象\n");
104 }
105 int main(){
106 SqQueue S;
107 int n;
108 InitQueue(&S);
109 while(true){
110 printf("|||||||||||||||||||||||||||||||||||||||||||||||\n");
111 printf("|| 1:入队 ||\n");
112 printf("|| 2:查看队伍元素 ||\n");
113 printf("|| 3:查看队首元素 ||\n");
114 printf("|| 4:查看队列长度 ||\n");
115 printf("|| 5:出队 ||\n");
116 printf("|| 6:使前端空位补上解决假溢出问题 ||\n");
117 printf("|| (输入-1退出系统) ||\n");
118 printf("|||||||||||||||||||||||||||||||||||||||||||||||\n");
119
120 printf("请输入你的操作序号\n");
121 scanf("%d",&n);
122 switch(n){
123 case 1:
124 EnQueue(&S);
125 break;
126 case 2:
127 DisElem(&S);
128 break;
129 case 3:
130 GetHead(&S);
131 break;
132 case 4:
133 GetLength(&S);
134 break;
135 case 5:
136 DeleteQueue(&S);
137 break;
138 case 6:
139 FrontQueue(&S);
140 break;
141 case -1:
142 return 0;
143
144 }
145
146 }
147 }