循环队列的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;
}

代码优化及改进说明:

  1. 内存分配检查:malloc后添加判断语句,检查内存分配是否成功,如果失败则返回错误码或抛出异常。
  2. 入队操作检查:EnQueue函数中添加对队满情况的判断和处理,返回错误码或抛出异常。
  3. 出队操作检查:DeQueue函数中添加对队空情况的判断和处理,返回错误码或抛出异常。
  4. 展示操作检查:show函数中添加对队空情况的判断和处理,输出提示信息。
  5. 主菜单选项检查:menu函数中添加对用户输入选项的合法性检查,如果输入非法选项则输出提示信息并要求重新输入。
  6. 用户输入元素检查:menu函数中添加对用户输入元素的合法性检查,确保输入元素符合要求。
  7. 退出操作处理:menu函数中添加对用户选择退出操作的处理,输出提示信息并退出程序。
  8. 内存释放:main函数中添加对动态分配内存的释放操作。
  9. 初始化函数返回值检查:main函数中检查InitSeqQueue函数的返回值,确保初始化成功。
  10. 程序执行成功标志:main函数中添加return 0语句,作为程序执行成功的标志。

代码中使用单引号(')代替双引号(')。

C语言循环队列实现及优化建议

原文地址: https://www.cveoy.top/t/topic/Uk2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录