知识大全 顺序队列
Posted 指针
篇首语:莫问天涯路几重,轻衫侧帽且从容。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 顺序队列相关的知识,希望对你有一定的参考价值。
顺序队列
顺序队列 ( )顺序队列的定义 队列的顺序存储结构称为顺序队列 顺序队列实际上是运算受限的顺序表
( ) 顺序队列的表示 ①和顺序表一样 顺序队列用一个向量空间来存放当前队列中的元素 ②由于队列的队头和队尾的位置是变化的 设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中的位置 它们的初值在队列初始化时均应置为 ( ) 顺序队列的基本操作 ①入队时 将新元素插入rear所指的位置 然后将rear加 ②出队时 删去front所指的元素 然后将front加 并返回被删元素 注意 ①当头尾指针相等时 队列为空 ②在非空队列里 队头指针始终指向队头元素 尾指针始终指向队尾元素的下一位置 顺序队列基本操作【参见动画演示】
( )顺序队列中的溢出现象 ① 下溢 现象 当队列为空时 做出队运算产生的溢出现象 下溢 是正常现象 常用作程序控制转移的条件 ② 真上溢 现象 当队列满时 做进栈运算产生空间溢出的现象 真上溢 是一种出错状态 应设法避免 ③ 假上溢 现象 由于入队和出队操作中 头尾指针只增加不减小 致使被删元素的空间永远无法重新利用 当队列中实际的元素个数远远小于向量空间的规模时 也可能由于尾指针已超越向量空间的上界而不能做入队操作 该现象称为 假上溢 现象 【例】假设下述操作序列作用在初始为空的顺序队列上 EnQueue DeQueue EnQueue DeQueue … 尽管在任何时刻 队列元素的个数均不超过 但是只要该序列足够长 事先定义的向量空间无论多大均会产生指针越界错误
循环队列 为充分利用向量空间 克服 假上溢 现象的方法是 将向量空间想象为一个首尾相接的圆环 并称这种向量为循环向量 存储在其中的队列称为循环队列(Circular Queue)
( ) 循环队列的基本操作 循环队列中进行出队 入队操作时 头尾指针仍要加 朝前移动 只不过当头尾指针指向向量上界(QueueSize )时 其加 操作的结果是指向向量的下界 这种循环意义下的加 操作可以描述为 ① 方法一 if(i+ ==QueueSize) //i表示front或rear i= ; else i++;② 方法二 利用 模运算 i=(i+ )%QueueSize
( ) 循环队列边界条件处理 循环队列中 由于入队时尾指针向前追赶头指针 出队时头指针向前追赶尾指针 造成队空和队满时头尾指针均相等 因此 无法通过条件front==rear来判别队列是 空 还是 满 【参见动画演示】 解决这个问题的方法至少有三种 ① 另设一布尔变量以区别队列的空和满 ② 少用一个元素的空间 约定入队前 测试尾指针在循环意义下加 后是否等于头指针 若相等则认为队满(注意 rear所指的单元始终为空) ③使用一个计数器记录队列中元素的总数(即队列长度)
( ) 循环队列的类型定义 #define Queur Size //应根据具体情况定义该值 typedef char Queue DataType; //DataType的类型依赖于具体的应用 typedef Sturet //头指针 队非空时指向队头元素 int front; //尾指针 队非空时指向队尾元素的下一位置 int rear; //计数器 记录队中元素总数 DataType data[QueueSize] CirQueue;
( ) 循环队列的基本运算 用第三种方法 循环队列的六种基本运算 ① 置队空 void InitQueue(CirQueue *Q) Q >front=Q >rear= ; Q >count= ; //计数器置
相关参考
基本概念 队列的顺序存储结构称为顺序队列顺序队列用一个向量空间来存放当前队列中的元素 由于队列的队头和队尾的位置是变化的因而要设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中
顺序栈 栈的顺序存储结构简称为顺序栈它是运算受限的顺序表 顺序栈的类型定义 #defineStackSize//假定预分配的栈空间最多为个元素 typedefcharDataType;//
(三)队列的顺序存储结构 //顺序存储结构(循环队列) 结构定义: #defineMAXQSIZE//最大队列长度 typedefstruct QElem
希赛教育计算机专业考研专业课辅导招生 希赛教育计算机专业考研专业课辅导视频 希赛教育计算机考研专业课在线测试系统 循环队列是队列的一种顺序存储表示那么为什么要称作循环队列而不说是顺序队列呢?
知识大全 数据结构考研分类复习真题 第三章 栈和队列[16]
设一数列的输入顺序为若采用堆栈结构并以A和D分别表示入栈和出栈操作试问通过入出栈操作的合法序列【北方交通大学 一(分)】 ()能否得到输出顺序为的序列(分) ()能否得到输出顺序为的
第三章栈和队列 本章介绍的是栈和队列的逻辑结构定义及在两种存储结构(顺序存储结构和链式存储结构)上如何实现栈和队列的基本运算本章的重点是掌握栈和队列在两种存储结构上实现的基本运算难点是循环队列中
知识大全 数据结构考研分类复习真题 第三章 栈和队列[25]
一个双端队列deque是限定在两端endend都可进行插入和删除的线性表队空条件是end=end若用顺序方式来组织双端队列试根据下列要求定义双端队列的结构并给出在指定端i(i=)的插入enq和删除
设有三个元素XYZ顺序进栈(进的过程中允许出栈)下列得不到的出栈排列是( )【南京理工大学一(分)】 A.XYZ
知识大全 数据结构考研分类复习真题 第三章 栈和队列[22]
五算法设计题 设有两个栈SS都采用顺序栈方式并且共享一个存储区[Omaxsize]为了尽量利用空间减少溢出的可能可采用栈顶相向迎面增长的存储方式试设计SS有关入栈和出栈的操作算法【哈尔滨工业大学
类似于表插入排序附设指针数组将顺序表视作一个静态链表利用修改指针实现分配和收集同时设置rd个队列的头指针和尾指针分别指示各队列的头结点和尾结点在链表中的位置 首先初始化空队列即将每个队列的头指针