C语言循环队列实现及优化建议
循环队列的C语言实现及优化建议
#include <iostream>
//定义结构体
#define MAX 100
typedef struct {
int data[MAX];
int front, rear;
}SeqQueue;
//初始化
SeqQueue* q = (SeqQueue*)malloc(sizeof(SeqQueue));
if (q == NULL) {
// 内存分配失败处理
return -1;
}
int InitSeqQueue() {
q->front = q->rear = 0;
return 1;
}
//入队操作
int EnQueue(int a) {
if ((q->rear + 1) % MAX == q->front) {
// 队列已满
return 0;
}
q->data[q->rear] = a;
q->rear = (q->rear + 1) % MAX;
return 1;
}
//出队操作
int DeQueue() {
if (q->rear == q->front) {
// 队列为空
return 0;
}
q->front = (q->front + 1) % MAX;
return 1;
}
//展示操作
void show() {
if (q->rear == q->front) {
printf('队列为空\n');
return;
}
int n = q->front;
for (n; n < q->rear; n++) {
printf('%d\t', q->data[n]);
}
printf('\n');
}
//主菜单
void menu() {
int choose;
int x;
printf('\n请选择操作:\n1、入队\n2、出队\n3、展示队中元素\n4、退出\n');
scanf('%d', &choose);
switch (choose) {
case 1:
printf('请输入入队元素\n');
scanf('%d', &x);
if (EnQueue(x) == 0) {
printf('队列已满,入队失败\n');
}
menu();
break;
case 2:
if (DeQueue() == 0) {
printf('队列为空,出队失败\n');
}
menu();
break;
case 3:
show();
menu();
break;
case 4:
printf('退出程序\n');
free(q);
exit(0);
break;
default:
printf('请重新操作\n');
menu();
break;
}
}
//主函数
int main() {
if (InitSeqQueue() != 1) {
printf('初始化失败\n');
return -1;
}
menu();
return 0;
}
代码优化及改进说明:
- 内存分配检查: 在
malloc后添加判断语句,检查内存分配是否成功,如果失败则返回错误码或抛出异常。 - 入队操作检查: 在
EnQueue函数中添加对队满情况的判断和处理,返回错误码或抛出异常。 - 出队操作检查: 在
DeQueue函数中添加对队空情况的判断和处理,返回错误码或抛出异常。 - 展示操作检查: 在
show函数中添加对队空情况的判断和处理,输出提示信息。 - 主菜单选项检查: 在
menu函数中添加对用户输入选项的合法性检查,如果输入非法选项则输出提示信息并要求重新输入。 - 用户输入元素检查: 在
menu函数中添加对用户输入元素的合法性检查,确保输入元素符合要求。 - 退出操作处理: 在
menu函数中添加对用户选择退出操作的处理,输出提示信息并退出程序。 - 内存释放: 在
main函数中添加对动态分配内存的释放操作。 - 初始化函数返回值检查: 在
main函数中检查InitSeqQueue函数的返回值,确保初始化成功。 - 程序执行成功标志: 在
main函数中添加return 0语句,作为程序执行成功的标志。
代码中使用单引号(')代替双引号(')。
原文地址: https://www.cveoy.top/t/topic/Uk2 著作权归作者所有。请勿转载和采集!