赞
踩
1、循环队列的初始化
2、循环队列的入队
3、循环队列的出队
4、循环队列的取值
5、循环队列的求长
6、循环队列的判空
7、循环队列的清空
8、循环队列的销毁
9、循环队列的打印
有了用C++实现顺序表和顺序栈的基础后,编写循环队列的代码就会容易很多,相应的链接如下:
C++实现顺序表_平头哥melo的博客-CSDN博客
C++实现顺序栈_平头哥melo的博客-CSDN博客
-
- //Date:2021/11/16
-
- #include <iostream>
- using namespace std;
- #define Maxsize 100
- #define QElemType int//QElemType类型可根据实际情况自行设定
-
- //*****************************队列的顺序存储结构******************************
- typedef struct
- {
- QElemType* base;
- int front;
- int rear;
- }SqQueue;
-
- //***************************循环队列的基本操作函数****************************
-
- //循环队列的初始化
- int InitQueue(SqQueue& Q)
- {
- //构造一个空队列Q
- Q.base = new QElemType[Maxsize];//为队列分配一个最大容量为Maxsize的数组空间
- if (!Q.base)
- exit(OVERFLOW);//存储分配失败
- Q.front = Q.rear = 0;//头指针和尾指针置为零,队列为空
- return 0;
- }
-
- //循环队列的入队
- bool EnQueue(SqQueue& Q, QElemType e)
- {
- //插入一个元素e为Q的新的队尾元素
- if ((Q.rear + 1) % Maxsize == Q.front)
- return false;//队满
- Q.base[Q.rear] = e;//新元素插入队尾
- Q.rear = (Q.rear + 1) % Maxsize;//队尾指针加1
- return true;
- }
-
- //循环队列的出队
- bool DeQueue(SqQueue& Q, QElemType& e)
- {
- //删除Q的队头元素,用e返回其值
- if (Q.front == Q.rear)
- return false;//队空
- e = Q.base[Q.front];//保存队头元素
- Q.front = (Q.front + 1) % Maxsize;//队头指针加1
- return true;
- }
-
- //取循环队列的队头元素
- bool GetHead(SqQueue Q, QElemType& e)
- {
- //返回Q的队头元素,不修改队头指针
- if (Q.front == Q.rear)
- return false;//队列为空,取元素失败
- e = Q.base[Q.front];
- return true;
- }
-
- //***************************循环队列的基本功能函数****************************
-
- //1、入队
- void EnQueue(SqQueue& Q)
- {
- QElemType e;
- int flag;
- cout << "请输入入队元素:" << endl;
- cin >> e;
- flag = EnQueue(Q, e);
- if (flag)
- cout << "入队成功!" << endl;
- else
- cout << "入队失败!" << endl;
- }
-
- //2、出队
- void DeQueue(SqQueue& Q)
- {
- QElemType e;
- int flag;
- flag = DeQueue(Q, e);
- if (flag)
- cout << "出队元素为:" << e << endl;
- else
- cout << "出队失败!" << endl;
- }
-
- //3、取值
- void GetHead(SqQueue Q)
- {
- QElemType e;
- int flag;
- flag=GetHead(Q,e);
- if (flag)
- cout << "取得的队头元素为:" << e << endl;
- else
- cout << "取值失败!" << endl;
- }
-
- //4、求长
- void QueueLength(SqQueue Q)
- {
- //返回Q的元素个数,即队列的长度
- int n = (Q.rear - Q.front + Maxsize) % Maxsize;
- cout << "队列长度为:" << n << endl;
- }
-
- //5、判空
- void QueueEmpty(SqQueue Q)
- {
- if (Q.front == Q.rear)
- cout << "队列为空!" << endl;
- else
- cout << "队列不为空!" << endl;
- }
-
- //6、清空
- void ClearQueue(SqQueue& Q)
- {
- Q.rear = Q.front = 0;
- }
-
- //7、销毁
- void DestoryQueue(SqQueue& Q)
- {
- if (Q.base)
- {
- delete[]Q.base;
- Q.base = NULL;
- Q.rear = Q.front = 0;
- }
- }
-
- //8、打印
- void PrintQueue(SqQueue Q)
- {
- QElemType* p = Q.base;
- int n = (Q.rear - Q.front + Maxsize) % Maxsize;
- for (int i = 1; i <= n; i++)
- cout << "第" << i << "个元素为:" << *p++ << endl;
- }
-
- //菜单
- void menu()
- {
- cout << "***************************************************************************" << endl;
- cout << "***********************************1、入队*********************************" << endl;
- cout << "***********************************2、出队*********************************" << endl;
- cout << "***********************************3、取值*********************************" << endl;
- cout << "***********************************4、求长*********************************" << endl;
- cout << "***********************************5、判空*********************************" << endl;
- cout << "***********************************6、清空*********************************" << endl;
- cout << "***********************************7、销毁*********************************" << endl;
- cout << "***********************************8、打印*********************************" << endl;
- cout << "***********************************0、退出*********************************" << endl;
- cout << "***************************************************************************" << endl;
- }
-
- int main()
- {
- SqQueue Q;
- int select;
- InitQueue(Q);
- while (1)
- {
- system("CLS");//清屏操作
- menu();
- cout << "请输入菜单序号:" << endl;
- cin >> select;
- switch (select)
- {
- case 1://入队
- EnQueue(Q);
- system("pause");//按任意键继续
- break;
- case 2://出队
- DeQueue(Q);
- system("pause");
- break;
- case 3://取队头元素
- GetHead(Q);
- system("pause");
- break;
- case 4://求队列长度
- QueueLength(Q);
- system("pause");
- break;
- case 5://判断队列是否为空
- QueueEmpty(Q);
- system("pause");
- break;
- case 6://清空队列
- ClearQueue(Q);
- system("pause");
- break;
- case 7://销毁队列,销毁后会自动退出
- DestoryQueue(Q);
- system("pause");
- return 0;
- break;
- case 8://从队头到队尾遍历栈并打印
- PrintQueue(Q);
- system("pause");
- break;
- case 0:
- cout << "欢迎下次使用!" << endl;//退出
- system("pause");
- return 0;
- break;
- default:
- cout << "菜单序号输入有误!" << endl;
- system("pause");
- break;
- }
- }
- system("pause");
- return 0;
- }
参考资料:《数据结构》(C语言版)严蔚敏
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。