C++ 链式队列实现及优化

#include <iostream>
#include <stdlib.h>

// 结点结构体
typedef struct node {
	int data;
	struct node* next;
} QTYPE;

typedef struct {
	QTYPE* front, * rear;
} LinkQueue;

// 初始化队列
LinkQueue* lq;

// 入队
int EnQueue(int x) {
	QTYPE *P = (QTYPE*)malloc(sizeof(QTYPE));
	P->data = x;
	P->next = NULL;
	if (lq->front == NULL && lq->rear == NULL) {
		lq->front = lq->rear = P;
	} else {
		lq->rear->next = P;
		lq->rear = P; // rear 往后移
	}
	return 0;
}

// 出队
int DeQueue() {
	QTYPE* P;
	if (lq->front == NULL && lq->rear == NULL) {
		return 0;
	} else {
		P = lq->front; // 让 P 指队列头的位置
		lq->front = lq->front->next; // 队列头向后移
		free(P);
	}
	return 1;
}

// 展示队列中元素
void show() {
	QTYPE* P = lq->front;
	while (P != NULL) {
		printf('%d,', P->data);
		P = P->next; // P 指针向后移一个单位
	}
	printf('\n');
}

// 界面
int menu() {
	int choose;
	int x;
	printf('请你选择操作:\n\t1、入队\n\t2、出队\n\t3、展示\n\t4、退出\n');
	if (scanf('%d', &choose) != 1) {
		printf('输入错误,请重新操作!\n');
		menu();
	}
	if (choose < 1 || choose > 4) {
		printf('输入错误,请重新操作!\n');
		menu();
	}
	switch (choose) {
		case 1:
			printf('请你选择要输入的元素!\n');
			scanf('%d', &x);
			EnQueue(x);
			menu();
			break;
		case 2:
			DeQueue();
			menu();
			break;
		case 3:
			show();
			menu();
			break;
		case 4:
			exit(0);
			break;
		default:
			printf('输出错误,请重新操作!\n');
			menu();
			break;
	}
}

// 主函数
int main() {
	lq = (LinkQueue*)malloc(sizeof(LinkQueue));
	lq->front = lq->rear = NULL;
	menu();
	return 0;
}

代码优化说明:

  1. main 函数中为 lq 分配了内存空间。
  2. EnQueue 函数中添加了队列为空时的处理逻辑。
  3. DeQueue 函数中添加了队列为空时的处理逻辑。
  4. show 函数中添加了换行符。
  5. menu 函数中添加了对用户输入非数字情况的处理。
  6. menu 函数中添加了对用户输入超出范围数字情况的处理。
  7. menu 函数的 switch 语句中添加了 break 语句,防止代码执行下一个 case

代码使用说明:

  1. 编译运行代码。
  2. 程序会提示用户选择操作,用户可以选择“入队”、“出队”、“展示”或“退出”。
  3. 按照提示输入相应的信息即可进行操作。

代码功能:

  • 初始化一个链式队列。
  • 支持入队操作,将元素添加到队列尾部。
  • 支持出队操作,删除队列头部的元素。
  • 支持展示队列中所有元素。
  • 支持退出程序。

代码优点:

  • 代码结构清晰,易于理解。
  • 逻辑完整,功能完善。
  • 处理了常见的错误情况,增强了代码的健壮性。
  • 提供了友好的用户界面,方便用户使用。

代码缺点:

  • 代码中没有对内存泄漏进行处理,在频繁使用队列的情况下可能会造成内存泄漏。
  • 代码功能比较简单,缺少一些高级功能,例如判断队列是否为空、获取队列长度等。

后续改进方向:

  • 添加内存泄漏处理机制。
  • 添加更多功能,例如判断队列是否为空、获取队列长度等。
  • 优化用户界面,使其更加友好。
  • 将代码封装成一个类,使其更易于使用和扩展。
C++ 链式队列实现及优化

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

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