顺序队列的基本操作(进行了修改解决了假溢出问题)

复制代码
  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 }
复制代码

 

posted on   18软工五班龙向昆  阅读(629)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示