数据结构:循环队列(一)设置一个标志域后的入队列和出队列的算法
2014-04-26 00:06
1656 查看
如果希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分,尾指针和头指针值相同时的队列状态是"空"还是"满"。试编写与此结构相应的入队列和出队列的算法。
本题的循环队列CTagQueue的类型定义如下:
实现函数如下:
本题的循环队列CTagQueue的类型定义如下:
typedef char QElemType; typedef struct { QElemType elem[MAXQSIZE]; int tag; int front; int rear; } CTagQueue;
实现函数如下:
Status EnCQueue(CTagQueue &Q, QElemType x) { if(Q.tag)return ERROR; else{ Q.elem[Q.rear] = x;//将e赋值给队尾 Q.rear = (Q.rear + 1) % MAXQSIZE;//rear指针向后移一个位置,若到最后则转到数组头部 if(Q.rear == Q.front){ Q.tag = 1; //队列满 } return OK; } } Status DeCQueue(CTagQueue &Q, QElemType &x) { if(Q.front == Q.rear && Q.tag == 0){ return ERROR; } else{ x = Q.elem[Q.front];//将队头元素赋值给e Q.front = (Q.front + 1) % MAXQSIZE;//front指针向后移一个位置,若到最后则转到数组头部 if(Q.front == Q.rear){ Q.tag = 0; //队列空 } return OK; } }
相关文章推荐
- 要求顺序循环队不损失一个空间,全部能够得到有效利用,试采用设置标志位tag的方法解决“假溢出”问题,实现顺序循环队列算法
- 数据结构与算法之—两个栈实现一个队列
- 假设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。试设计相应的入队和出队的算法
- 数据结构与算法之—循环队列
- 数据结构经典算法汇总___循环队列:
- 如何采用设置标志的方法来区分循环队列的满和空
- 算法与数据结构 其四 循环队列的实现
- 顺序栈S中有2n个元素,从栈顶到栈底的元素依次为a2n、a2n-1、…、a1。试设计一个算法:通过一个循环队列重新排列该栈中的元素,使得从栈顶到栈底的元素先偶数,后奇数
- 假设以带头结点的循环链表表示队列, 并且只设一个指针指向队尾元素结点(注意不设头指针) 试编写相应的队列初始化,入队列和出队列的算法
- C++类模板 实现循环队列的顺序存储结构算法 《数据结构》(北京科海) 部分摘抄 自己编写实现
- 算法与数据结构【四】——C语言实现循环队列
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
- 数据结构习题分析:已知由一个线性链表表示的线性表中含有三类字符的数据元素,是编写算法将该线性表分割为三个循环链表,其中每个。。。。。
- 循环队列---数据结构和算法
- 带头结点的循环链表表示队列的初始化、入队列和出队列的算法
- JavaScript 版数据结构与算法(二)队列
- C++实现的一个循环队列
- 数据结构复习之[循环队列]
- 第九题:【数据结构】【微软面试题】假设我们有一个队列 我们需要快速的找到里面存储的最大值 该怎么做?
- 算法导论 顺序循环双向队列