资源简介 二、 队列及其基本操作1. 队列的概念队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一端称为队首。2. 队列的特性(1)先进先出、后进后出。如图所示,出队时,队首元素A1先出队,接下来是A2、A3、…、An,队尾元素An最后出队。队列基本操作图(2)有限序列性。队列中的元素也是有限的。队列可以是空的,也可以包含多个元素。队列中的所有元素呈线性特征,每个元素只有一个前驱点(队首元素没有前驱点),也只有一个后继点(队尾元素没有后继点)。3. 队列的存储结构队列一般按顺序结构存储,可以用数组来实现。设置头指针head和尾指针tail分别记录队首元素的位置和队尾元素的下一个位置。初始时,head指针和tail指针均记录下标为0的位置。队列元素“A”“B”“C”“D”入队后,tail指针指向下标为4的位置。队列初始化(head=tail) 元素入队(tail=tail+1)4. 队列的基本操作及其实现(1)建队。在Python中,用列表(数组)创建队列,刚建队列时,head=tail=0。(2)入队。当有新元素入队时,先将元素存储到tail指针指向的位置,然后将tail指针加1,即向队尾方向移动。(3)出队。当队列非空时(head!=tail),先读取队首head指针指向的元素,然后head指针加1,即向队尾方向移动,直到head=tail为止。建队、入队和出队的过程用Python代码模拟如下:s=input("请输入字符串:")que=[""]*100head=0;tail=0 #建队for i in range(len(s)): #入队操作,从队尾开始 que[tail]=s[i] #先进队 tail+=1 #然后tail后移一个位置while head print(que[head],end="") #先输出队首元素head+=1 #然后移动head到下一个位置5. 循环队列对于队列的操作,经过多次出队、入队操作后,会出现tail指针已经指向了队列最后一个位置、head指针指向了中间某处位置的情况,此时队尾无法继续进行入队操作,而head指针前又存在空余部分,这种现象叫作队列“假溢出”,如图所示:解决假溢出的办法就是如果队列满了而前面有空位,就再从头开始,形成头尾相接的循环队列。我们把队列的这种头尾相接的顺序存储结构称为循环队列,如图所示:空循环队列和满循环队列分别如图所示:当队列满时,会留出一个空间,这样就便于区分队列的满与空。可利用队首和队尾(队首下标为head,队尾下标为tail,队列最大长度为n)指针位置判断循环队列的状态:代码 描述head=tail 队列为空(tail+1)% n=head 队列为满qsize=(tail-head+n)% n 队列长度tail=(tail+1)% n 入队head=(head+1)% n 出队【例1】 (2023·浙江6月选考)列表q长度为20,q[0]至q[4]的值依次为p,r,i,n,t,执行如下程序段后,输出的最后一个字符是( D )head,tail= 0,5while head < tail: if head % 3 == 0: print(q[head]) else: q[tail] = q[head] tail += 1 head += 1 A. t B. n C. i D. r【解析】 本题考查单向顺序队列的数组实现。根据队列基本操作可知,程序段的功能是:当队列q非空时(空队列为head =tail),根据头指针的索引位置(head % 3 =0),分别执行“出队”操作或者“出队并入队”操作,再结合题意,本题求解的是最后一个出队元素。用表格法模拟该队列头、尾指针和“出队”操作的变化,如下表所示:综上所述,D正确。【例2】 (2023·浙江6月选考)有1个队列,队首到队尾的元素依次为8,3,2,9,5。约定如下:T操作是指队列中1个元素出队后再入队,Q操作是指队列中1个元素出队,则经过TTTQTTQ系列操作后,队列中队首到队尾的元素依次是( B )A. 2,9,5 B. 2,5,8C. 5,8,2 D. 8,3,2【解析】 本题考查顺序队列的基本操作。T的操作为出队并入队,Q的操作为出队。TTTQTTQ之后队列内元素依次为:2,5,8。出队的元素依次为9,3。B正确。【例3】 假设以数组a[m]存放循环队列的元素,其头指针和尾指针分别为head和tail,则当前队列中的元素个数是( A )A. (tail-head+m)% m B. tail-head+1C. (head-tail+m)% m D. (tail-head)% m【解析】 本题考查队列的基本操作。循环队列,如果tail> head,元素个数为tail-head,如果tail< head,元素个数为tail-head+m,所以综合可以用(tail-head+m)%m来表示。1. 某种特殊的队列 Q,支持以下3个操作:操作Q1,若队列非空,则队首元素出队,并输出;操作Q2,若队列非空,则队首元素出队;操作Q3,一个元素入队;以上任意一种操作后,若队列非空,则新的队首元素仍为队列中所有元素的最小值。若队列 Q 的初始状态为空,则依次进行 Q3、Q2、Q1、Q2、Q3、Q1、Q3 七次操作后,下列说法中,正确的是( D )A.当前队列中的元素个数为 2B.输出的元素个数为 2C.第一个输出的元素肯定比当前队首元素大D.队列初始状态是否为空对输出结果有影响【解析】 操作Q3、Q2之后,队列为空。Q3、Q1,队列为空。因此队列中元素个数为1,Q1操作出队并输出元素,输出的元素个数为1。C选项没有可比性。D选项若队列不为空,则Q3、Q2、Q1、Q2输出的结果不一样。2. 在某点餐系统中,利用队列来储存当前正在排队顾客的编号,head指向队首元素,tail指向队尾元素的下一个位置。若tail=head+4,则目前队列中的顾客数是( C )A. 0 B. 3C. 4 D. 5【解析】 队列初始时为空,head和tail的值都为0。由于tail指向队尾元素的下一个位置,当队列中有1个元素时,tail=head+1,以此类推,队列中的元素个数为4,C正确。3. 对某队列进行操作:初始化时,头指针head和尾指针tail均为0,当进行了5次入队和2次出队操作后,head指针和tail指针指向的值分别是( D )A. 0,5 B. 5,2 C. 3,5 D. 2,5【解析】 本题考查队列知识。由题意可得,5次入队后,tail指向5,2次出队操作后,head指向2,D正确。4. 有一个队列s,其中指针head 指向队首元素的位置,指针tail指向队尾元素的下一个位置。下列关于该队列的说法,正确的是( D )A.队列中元素个数为tail-head+1B.新元素入队时,指针head向右移动C.元素出队时,指针tail向右移动D.当tail==len(s)时,无法再入队新元素【解析】 本题考查队列性质和基本操作。tail是指向队尾元素后面的位置,因此队列长度为tail-head。 当tail值为len(s),队尾元素存储在len(s)-1,因此队列已满。5. 下列有关队列的说法,正确的是( B )A.队列是一种先进先出的线性表,插入一端为队首,删除一端为队尾B.队列的存储结构可用数组实现,也可用链表实现C.一队列队头指针head,队尾指针tail,则tail-1-head表示队列中元素个数D.学生排队就餐与软件连续撤销操作都是数据结构“队列”的应用实例【解析】 本题考查队列的性质。A选项队列在队尾插入,在队首删除;C选项队尾指针tail指向队尾元素的下一个位置,所以tail-head表示队列中元素的个数;D选项软件连续撤销操作是撤销前一步操作,是栈的应用实例。(共20张PPT)二、 队列及其基本操作信息技术 选择性必修1 数据与数据结构第三章 字符串、队列和栈知识过关1. 队列的概念队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一端称为队首。2. 队列的特性(1)先进先出、后进后出。如图所示,出队时,队首元素A1先出队,接下来是A2、A3、…、An,队尾元素An最后出队。队列基本操作图(2)有限序列性。队列中的元素也是有限的。队列可以是空的,也可以包含多个元素。队列中的所有元素呈线性特征,每个元素只有一个前驱点(队首元素没有前驱点),也只有一个后继点(队尾元素没有后继点)。3. 队列的存储结构队列一般按顺序结构存储,可以用数组来实现。设置头指针head和尾指针tail分别记录队首元素的位置和队尾元素的下一个位置。初始时,head指针和tail指针均记录下标为0的位置。队列元素“A”“B”“C”“D”入队后,tail指针指向下标为4的位置。队列初始化(head=tail) 元素入队(tail=tail+1)4. 队列的基本操作及其实现(1)建队。在Python中,用列表(数组)创建队列,刚建队列时,head=tail=0。(2)入队。当有新元素入队时,先将元素存储到tail指针指向的位置,然后将tail指针加1,即向队尾方向移动。(3)出队。当队列非空时(head!=tail),先读取队首head指针指向的元素,然后head指针加1,即向队尾方向移动,直到head=tail为止。建队、入队和出队的过程用Python代码模拟如下:s=input("请输入字符串:")que=[""]*100head=0;tail=0 #建队for i in range(len(s)): #入队操作,从队尾开始 que[tail]=s[i] #先进队 tail+=1 #然后tail后移一个位置while head print(que[head],end="") #先输出队首元素head+=1 #然后移动head到下一个位置5. 循环队列对于队列的操作,经过多次出队、入队操作后,会出现tail指针已经指向了队列最后一个位置、head指针指向了中间某处位置的情况,此时队尾无法继续进行入队操作,而head指针前又存在空余部分,这种现象叫作队列“假溢出”,如图所示:解决假溢出的办法就是如果队列满了而前面有空位,就再从头开始,形成头尾相接的循环队列。我们把队列的这种头尾相接的顺序存储结构称为循环队列,如图所示:空循环队列和满循环队列分别如图所示:当队列满时,会留出一个空间,这样就便于区分队列的满与空。可利用队首和队尾(队首下标为head,队尾下标为tail,队列最大长度为n)指针位置判断循环队列的状态:代码 描述head=tail 队列为空(tail+1)% n=head 队列为满qsize=(tail-head+n)% n 队列长度tail=(tail+1)% n 入队head=(head+1)% n 出队典例精选【例1】 (2023·浙江6月选考)列表q长度为20,q[0]至q[4]的值依次为p,r,i,n,t,执行如下程序段后,输出的最后一个字符是( )head,tail= 0,5while head < tail: if head % 3 == 0: print(q[head]) else: q[tail] = q[head] tail += 1 head += 1 A. t B. n C. i D. rD【解析】 本题考查单向顺序队列的数组实现。根据队列基本操作可知,程序段的功能是:当队列q非空时(空队列为head =tail),根据头指针的索引位置(head % 3 =0),分别执行“出队”操作或者“出队并入队”操作,再结合题意,本题求解的是最后一个出队元素。用表格法模拟该队列头、尾指针和“出队”操作的变化,如下表所示:综上所述,D正确。【例2】 (2023·浙江6月选考)有1个队列,队首到队尾的元素依次为8,3,2,9,5。约定如下:T操作是指队列中1个元素出队后再入队,Q操作是指队列中1个元素出队,则经过TTTQTTQ系列操作后,队列中队首到队尾的元素依次是( )A. 2,9,5 B. 2,5,8C. 5,8,2 D. 8,3,2【解析】 本题考查顺序队列的基本操作。T的操作为出队并入队,Q的操作为出队。TTTQTTQ之后队列内元素依次为:2,5,8。出队的元素依次为9,3。B正确。B【例3】 假设以数组a[m]存放循环队列的元素,其头指针和尾指针分别为head和tail,则当前队列中的元素个数是( )A. (tail-head+m)% m B. tail-head+1C. (head-tail+m)% m D. (tail-head)% m【解析】 本题考查队列的基本操作。循环队列,如果tail> head,元素个数为tail-head,如果tail< head,元素个数为tail-head+m,所以综合可以用(tail-head+m)%m来表示。A自我检测1. 某种特殊的队列 Q,支持以下3个操作:操作Q1,若队列非空,则队首元素出队,并输出;操作Q2,若队列非空,则队首元素出队;操作Q3,一个元素入队;以上任意一种操作后,若队列非空,新的队首元素仍为队列中所有元素的最小值。若队列 Q 的初始状态为空,则依次进行 Q3、Q2、Q1、Q2、Q3、Q1、Q3 七次操作后,下列说法中,正确的是( )A.当前队列中的元素个数为 2B.输出的元素个数为 2C.第一个输出的元素肯定比当前队首元素大D.队列初始状态是否为空对输出结果有影响【解析】 操作Q3、Q2之后,队列为空。Q3、Q1,队列为空。因此队列中元素个数为1,Q1操作出队并输出元素,输出的元素个数为1。C选项没有可比性。D选项若队列不为空,则Q3、Q2、Q1、Q2输出的结果不一样。D2. 在某点餐系统中,利用队列来储存当前正在排队顾客的编号,head指向队首元素,tail指向队尾元素的下一个位置。若tail=head+4,则目前队列中的顾客数是( )A. 0 B. 3C. 4 D. 5【解析】 队列初始时为空,head和tail的值都为0。由于tail指向队尾元素的下一个位置,当队列中有1个元素时,tail=head+1,以此类推,队列中的元素个数为4,C正确。C3. 对某队列进行操作:初始化时,头指针head和尾指针tail均为0,当进行了5次入队和2次出队操作后,head指针和tail指针指向的值分别是( )A. 0,5 B. 5,2 C. 3,5 D. 2,5【解析】 本题考查队列知识。由题意可得,5次入队后,tail指向5,2次出队操作后,head指向2,D正确。D4. 有一个队列s,其中指针head 指向队首元素的位置,指针tail指向队尾元素的下一个位置。下列关于该队列的说法,正确的是( )A.队列中元素个数为tail-head+1B.新元素入队时,指针head向右移动C.元素出队时,指针tail向右移动D.当tail==len(s)时,无法再入队新元素【解析】 本题考查队列性质和基本操作。tail是指向队尾元素后面的位置,因此队列长度为tail-head。 当tail值为len(s),队尾元素存储在len(s)-1,因此队列已满。D5. 下列有关队列的说法,正确的是( )A.队列是一种先进先出的线性表,插入一端为队首,删除一端为队尾B.队列的存储结构可用数组实现,也可用链表实现C.一队列队头指针head,队尾指针tail,则tail-1-head表示队列中元素个数D.学生排队就餐与软件连续撤销操作都是数据结构“队列”的应用实例【解析】 本题考查队列的性质。A选项队列在队尾插入,在队首删除;C选项队尾指针tail指向队尾元素的下一个位置,所以tail-head表示队列中元素个数;D选项软件连续撤销操作是撤销前一步操作,是栈的应用实例。B 展开更多...... 收起↑ 资源列表 二、 队列及其基本操作.docx 二、 队列及其基本操作.pptx