顺序队列的基本操作(进行了修改解决了假溢出问题)
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现