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("队满 ");; 31 // }else if(S->rear==MAXSIZE&&S->front!=0){ 32 // return printf("队满,但队内前端依然有空位 "); 33 // } 34 // return 0; 35 //} 36 37 //进队运算算法 38 int EnQueue(SqQueue *S){ 39 if(S->rear==MAXSIZE&&S->front==0){ 40 return printf("队满 ");; 41 }else if(S->rear==MAXSIZE&&S->front!=0){ 42 return printf("队满,但队内前端依然有空位 出现假溢出现象 "); 43 } 44 int n; 45 printf("请输入你想入队的值 "); 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("进队成功 "); 51 } 52 //输出队列元素 53 int DisElem(SqQueue *S){ 54 if(IsEmpty(S)){ 55 return printf("队内是空无法输出 "); 56 } 57 int i=S->front;//i=0 58 printf("队内元素有: "); 59 for(int n=0;i<S->rear;n++){ 60 printf("%3d",S->data[i]); 61 i++; 62 } 63 printf(" "); 64 return printf("输出成功"); 65 } 66 //获取队首元素 67 int GetHead(SqQueue *S){ 68 if(IsEmpty(S)){ 69 return printf("队内是空 "); 70 } 71 return printf("队首元素为 %d",S->data[S->front]); 72 } 73 int GetLength(SqQueue *S){ 74 if(IsEmpty(S)){ 75 return printf("队内为空 "); 76 } 77 return printf("队的长度为%d",S->rear); 78 79 } 80 //出队 81 int DeleteQueue(SqQueue *S){ 82 if(IsEmpty(S)){ 83 return printf("队内是空无法输出 "); 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 ",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("请输入你想入队的数 "); 98 scanf("%d",&n); 99 S->data[S->front]=n; 100 } 101 printf("你已经成功填补空位"); 102 } 103 return printf("现在未出现假溢出现象 "); 104 } 105 int main(){ 106 SqQueue S; 107 int n; 108 InitQueue(&S); 109 while(true){ 110 printf("||||||||||||||||||||||||||||||||||||||||||||||| "); 111 printf("|| 1:入队 || "); 112 printf("|| 2:查看队伍元素 || "); 113 printf("|| 3:查看队首元素 || "); 114 printf("|| 4:查看队列长度 || "); 115 printf("|| 5:出队 || "); 116 printf("|| 6:使前端空位补上解决假溢出问题 || "); 117 printf("|| (输入-1退出系统) || "); 118 printf("||||||||||||||||||||||||||||||||||||||||||||||| "); 119 120 printf("请输入你的操作序号 "); 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 }