- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
队列基本操作及应用
队列的基本操作及应用
【教学目的】
(1)掌握队列的定义及队列的存储结构(顺序存储、链式存储);
(2)掌握队列的基本操作运算:建队列、插入、删除、队列空等;
(3)掌握循环队列的概念及运算;
(4)能够利用队列解决一些实际问题:宽度优先搜索算法
【教学重点】
综合运用队列结构解决实际问题。
【教学过程】
一、队列的定义
前面所讲的栈是一种后进先出的数据结构,而在实际问题中还经常使用一种“先进先出” (FIFO―First In First Out)的数据结构:即插入在表一端进行,而删除在表的另一端进行,我们将这种数据结构称为队或队列,把允许插入的一端叫队尾(rear),把允许删除的一端叫队头(front)。如图1所示是一个有5 个元素的队列。入队的顺序依次为a1、a2、a3、a4、a5,出队时的顺序将依然是a1、a2、a3、a4、a5。
显然,队列也是一种运算受限制的线性表,所以又叫先进先出表。
在日常生活中队列的例子很多,如排队买东西,排头的买完后走掉,新来的排在队尾。
二、基本术语
(1)队空:当队列中没有元素时称为空队列;
(2)队满:当队列中单元全部被占用;
(3)进队:向队列中插入新元素;
(4)出队:从队列中删除元素;
(5)(假)溢出:队尾指针指向最后一个位置,但队头前面仍有空闲的单元可被利用。
三、队列操作示意图
front=rear=-1 front=-1 rear=2 front=5 rear=8 front=5 rear=9
(a) 空队 (b)有3个元素 (c)一般情况 (d) 假溢出现象
四、队列的存储结构
与线性表、栈类似,队列也有顺序存储和链式存储两种存储方法。
1.顺序存储
顺序存储的队列称为顺序队列。因为队列的队头和队尾都是活动的,因此,除了队列的数据区外还有队头、队尾两个指针。顺序队列的类型定义如下:
type queue=record
data : array[0..maxsize-1] of elemtype
front, rear : integer ;
end;
front指向队列中第一个元素的前一个单元;rear指向队列中最后一个元素的单元。
2.链式存储
链式存储的队列称为链队。和链栈类似,用单链表来实现链队,根据队的FIFO原则,为了操作上的方便,我们分别需要一个头指针和尾指针,如图2所示。
五、队列的基本运算
(1)初始化:设定Q为一空队列:
procedure iniqueue(var Q:queue);
begin
Q.front:=-1;
Q.rear:=-1;
end;
(2)判队列空:若队列Q为空,则返回值true,否则返回值false:
function qempty(Q:queue):Boolean;
begin
qempty:=(Q.front=Q.rear)
end;
(3)判队满:若队列满,则返回值true,否则返回值false:
function qfull(Q:queue):Boolean;
begin
Qfull:=(Q.rear=maxsize-1);
end;
(4)元素进队:若队列Q不满时,把元素X插入到队列Q的队尾,否则返回信息“Overflow”:
procedure inqueue(var Q:queue;X:elemtype);
begin
if qfull(Q)
then writeln(‘Overflow’)
else begin
Q.rear:=Q.rear+1;
Q.data[Q.rear]:=X;
end
end;
(5)元素出队:若队列Q不空,则把队头元素删除并返回值给X,否则输出信息“Underflow”:
procedure delqueue(var Q:queue;var X:elemtype);
begin
if qempty(Q)
then writeln(‘Underflow’)
else begin
Q.front:=Q.front+1;
X:=Q.data[Q.front];
end;
end;
(6)取队头元素:若队列不空,返回队头元素的值,否则返回信息“Underflow”:
function gethead(Q:queue):elemtype;
begin
if qempty(Q)
then writeln(‘Underflow’)
else ge
您可能关注的文档
- 镜头下80年代中国彩照.doc
- 长亮科技2012年度内部控制自我评价报告.ppt
- 长安汽车在徐州市场上营销策略分析正文.doc
- 长城集团关于公司募集资金2012年度存放与使用情况鉴证报告.pdf
- 长方体体积认识和体积计算.ppt
- 长荣股份内部控制自我评价报告.pdf
- 长途汽车信息管理数据库设计与实现.pdf
- 门磁开关安装方法与技巧.doc
- 长江流域棉区Bt基因棉关键生理代谢特征与棉盲蝽危害相关生理指标研究.pdf
- 门诊病历、门诊处方、住院病历书写要求.ppt
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)