网站开发名词解释南宁网站建设电话
网站开发名词解释,南宁网站建设电话,做设计开哪个素材网站的会员好,怎么成立个人网站1、基本概念
队列是只允许在一端进行插入#xff0c;而在另一段进行删除的线性表队头#xff1a;允许删除的一端队尾#xff1a;允许插入的一端空队列#xff1a;没有任何元素的空表
队列是操作受限的线性表#xff0c;因此不是任何对线性表的操作都可以作为队列的操作…1、基本概念
队列是只允许在一端进行插入而在另一段进行删除的线性表队头允许删除的一端队尾允许插入的一端空队列没有任何元素的空表
队列是操作受限的线性表因此不是任何对线性表的操作都可以作为队列的操作比如不可以随便读取队列中间某个数据
2、顺序队列
队列的顺序实现是指分配一块连续存储单元存放队列中的元素并设两个指针front和rear分别指向队头和队尾元素的元素。队尾rear指针指向队尾元素的下一个位置也可以让rear指向队尾元素front指向队头元素的前一个位置为什么要这样处理呢当队列中只有一个元素是rear和front将会相等处理起来很麻烦。
初始状态队空条件frontrear0进队不满时送值到队尾队尾rear加1出队不空时取队头元素队头front加1
/*
顺序队列
*/
typedef struct {ElemType data[MaxSize];int front, rear;
}SqQueue;当此时队列的状态为上图的d时在入队现任此时rear再加一会出现溢出但这种溢出并不是真正的溢出在data数组里依然有位置存放数据所以这是一种假溢出
2、循环队列
把存储队列元素的表从逻辑上看作是一个环称为循环队列。当用循环队列时上面顺序队列出现假溢出的问题就能解决
初始时Q.frontQ.rear0出队 front指针加1Q.front(Q.front1)%MaxSize入队rear指针加1Q.rear(Q.rear1)%MaxSize队列长度(Q.rear-Q.frontMaxSize)%MaxSize出队入队指针按顺时针方向进1
如何判断队列空和队满呢
法1牺牲一个单元来区分队空和队满入队时少用一个队列单元这是个普遍的做法约定以队头指针在队尾指针的下一个位置作为队满的标志
队满Q.rear1%MaxSizeQ.front队空条件Q.frontQ.rear(注意和顺序队列区分开Q.frontQ.rear0队中元素个数Q.rear-Q.frontMaxSize%MaxSize 法2类型中增设表示元素个数的数据成员。这样
队空的条件为Q.size0队满Q.sizeMaxSize
法3类型增设tag数据成员以区分队满还是队空。tag等于0时若因删除导致QQ.frontQ.rear,则为对空tag等于1时若因插入导致Q.frontQ.rear则为队满
3、链式队列
队列的链式存储结构其实就是线性表的单链表只不过需要加点限制只能在表尾插入表头删除。
typedef struct {ElemType data;struct LinkNode* next;
}LinkNode;
typedef struct {LinkNode* front, * rear;
}LinkQueue;当 Q.front NULL Q.rearNULL时链式队列为空
4、双端队列
双端队列是指允许两端都可以进行入队和出队操作的队列将队列的两端分别称为前端和后端不再是队头和队尾其逻辑结构依然是线性结构。 输出受限的双端队列允许在一端进行插入和删除但在另一端只允许插入的双端队列被称为输出受限的双端队列 输入受限的双端队列允许在一端进行插入和删除但另一端只允许删除的双端队列称为输入受限的双端队列
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92434.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!