【C++】【数据结构】循环队列的基本操作(初始化、入队、出队、取队头元素、遍历输出队列、求队列长度)顺序队列的算法实现【附全代码】 您所在的位置:网站首页 算法的基本结构中包括 【C++】【数据结构】循环队列的基本操作(初始化、入队、出队、取队头元素、遍历输出队列、求队列长度)顺序队列的算法实现【附全代码】

【C++】【数据结构】循环队列的基本操作(初始化、入队、出队、取队头元素、遍历输出队列、求队列长度)顺序队列的算法实现【附全代码】

2024-05-28 17:53| 来源: 网络整理| 查看: 265

C++实现循环队列的算法+步骤(附全代码):

使用c++完成数据结构循环队列的基本操作,包括(初始化、入队、出队、取队头元素、遍历输出队列、求队列长度等),可直接编译运行。

队列又称为 “先进先出” (FIFO)线性表。限定插入操作只能在队尾进行,而删除操作只能在队首进行。 循环队列——采用顺序存储结构来实现,用一组连续的存储单元依次存放从队首到队尾的元素,附设两个整型变量front和rear分别指向队首元素和队尾元素的位置。

循环队列的定义: #define MAXQSIZE 100 typedef int QElemType; typedef int Status; //队列的顺序存储结构 typedef struct { QElemType* base; //存储空间的基地址 int front; //头指针 int rear; //尾指针 }SqQueue; 循环队列的初始化:

【算法步骤】

① 为队列分配一个最大容量为MAXQSIZE的数组空间,base指向数组空间首地址。 ② 头指针和尾指针置为零,表示队列为空。

【算法描述】

//循环队列的初始化 Status InitQueue(SqQueue& Q) {//构造一个空队列Q Q.base = new QElemType[MAXQSIZE]; if(!Q.base) exit(OVERFLOW); //存储分配失败 Q.front = Q.rear = 0; return OK; } 循环队列的入队:

【算法步骤】

① 判断队列是否满,满则返回ERROR。 ② 将新元素插入队尾。 ③ 队尾指针加1。

【算法描述】

//循环队列的入队 Status EnQueue(SqQueue& Q, QElemType e) {//插入元素e为Q的新的队尾元素 if ((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR; //尾指针在循环意义上加1后等于头指针,表明队满 Q.base[Q.rear] = e; Q.rear = (Q.rear + 1) % MAXQSIZE; return OK; } 循环队列的出队:

【算法步骤】

① 判断队列是否为空,若空则返回ERROR。 ② 保存队头元素。 ③ 队头指针加1。

【算法描述】

//循环队列的出队 Status DeQueue(SqQueue& Q, QElemType &e) {//删除Q的队头元素,用e返回其值 if (Q.front == Q.rear) return ERROR; e = Q.base[Q.front]; Q.front = (Q.front + 1) % MAXQSIZE; return OK; } 取循环队列的队头元素:

【算法步骤】

① 判断队列是否空。 ② 返回队头元素的值,队头指针不变。

【算法描述】

//取循环队列的队头元素 Status GetHead(SqQueue Q) {//返回Q的队头元素,不修改队头指针 if (Q.front != Q.rear) //队列非空 return Q.base[Q.front]; //返回队头元素的值,队头指针不变 } 取循环队列的队头元素:

【算法步骤】

① 判断队列是否空,若空则返回ERROR。 ② 循环输出队头元素。

【算法描述】

//遍历输出循环队列 Status QueueTraverse(SqQueue Q) { cout //返回Q的元素个数 int len = (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; cout SqQueue S; int e, a; if (InitQueue(S)) cout case 1: int x, n; cout n; for (int i = 0; i if (!DeQueue(S, e)) cout //插入元素e为Q的新的队尾元素 if ((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR; //尾指针在循环意义上加1后等于头指针,表明队满 Q.base[Q.rear] = e; Q.rear = (Q.rear + 1) % MAXQSIZE; return OK; } //循环队列的出队 Status DeQueue(SqQueue& Q, QElemType &e) {//删除Q的队头元素,用e返回其值 if (Q.front == Q.rear) return ERROR; e = Q.base[Q.front]; Q.front = (Q.front + 1) % MAXQSIZE; return OK; } //取循环队列的队头元素 Status GetHead(SqQueue Q) {//返回Q的队头元素,不修改队头指针 if (Q.front != Q.rear) //队列非空 return Q.base[Q.front]; //返回队头元素的值,队头指针不变 } //遍历输出循环队列 Status QueueTraverse(SqQueue Q) { cout //返回Q的元素个数 int len = (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有