資源簡介 隊列專項練習習題一、選擇題已知隊列(13,2,11,34,41,77,5,7,18,26,15),第一個進入隊列的元素是13,第五個出隊列的元素是( A )A.41 B.5 C.77 D.18解析:第五個出隊列的元素就是第五個進隊列的元素2.下列對隊列的描述,正確的是( C )A.隊列的特點是先進后出B.在隊列中,允許插入的一端稱為隊首,允許刪除的一端稱為隊尾C.剛建立的隊列,隊首指針和隊尾指針均為0D.出隊操作時,先將隊首指針加1,然后再將隊首元素出隊解析:隊列的特點是先進先出,因此A選項錯誤;允許插入的一端稱為隊尾,允許刪除的一端稱為隊首,因此B選項錯誤;出隊操作時,先將隊首元素出隊,然后將隊首指針加1,因此D選項錯誤;剛建立的隊列,隊首指針和隊尾指針均指向下標為0的元素,即隊首指針和隊尾指針均為0。3.小王在使用隊列解決問題的過程中,初始時,隊列為空,隊列的首指針和尾指針分為為head、tail,接著小王開始進行了一系列的操作,操作序列為:入隊、入隊、入隊、出隊、入隊、入隊、出隊、出隊、出隊、入隊、入隊,則操作結束時head和tail的值分別為( A )A.4 7 B.4 8 C.5 7 D.5 8解析:初始時,隊列為空,隊首指針head和隊尾指針tail的值均為0,隊列不為空時,隊首指針指向隊首元素,隊尾指針指向隊尾元素的下一個位置,本題中共進行了7次入隊操作和4次出隊操作,因此最終head和tail的值分別為4、7。4.在汽車站候車室,信息提示屏上顯示某個班車已做好準備,該車次的旅客可以檢票上車。旅客q1與q2依次排隊等待檢票,工作人員在檢票時,旅客q3,q4也排隊等待檢票。旅客q1檢完票后準備上車,這時應該接受工作人員檢票的旅客是(B)A.q1 B.q2 C.q3 D.q4解析:排隊上車是一個隊列。由于當前隊列的次序為q1,q2,q3,q4。因此q1檢完票后應對q2進行檢票。5.若用能存放6個元素(索引用0-5表示)的數組來實現循環隊列,當前尾指針rear和頭指針front的值分別為1和5,當從隊列中出隊一個元素再入隊兩個元素后,rear和front的值分別為(B)A.3和4 B.3和0 C.5和0 D.5和1解析:循環隊列下標n-1的后一個為0.rear指針的值為1,加入2個元素后rear指針的值需要增加2。front指針的值為5,出隊一個元素需要將front指針加1。由于5為循環隊列最大的下標,則其下一個腳標應為0。6.使用有m+1個元素的列表data作為循環隊列SQ的存儲空間,front為隊列頭指針,rear為隊列尾指針,則執行出隊操作的語句為(D)A.front=front+1B.front=(front+1)%mC.rear=(rear+1)%(m+1)D.front=(front+1)%(m+1)解析:出隊操作需要將隊首指針后移(即將隊首指針值+1)。由于當前隊列是一個循環隊列,一共有m+1個元素,其下標為0至m。如果隊首指在m處,此時出隊指針值+1的話,隊首指針會落在m+1處,但實際上不存在該位置,指針應該落在0處。所以隊首指針+1后還需對其進行除以m+1取余操作。7.設循環隊列中數組的下標范圍是1-n,其頭、尾指針分別為f和r,則該隊列元素個數為(D)A.r-f B.r-f+1 C.(r-f)%n+1 D.(r-f+n)%n解析:循環隊列在經過進隊、出隊操作后,隊首指針f與隊尾指針r所指向的數值可能會產生兩種情況:①fr。當fr時,r-f的值為負,當其實際數量為r-f+n。將兩種情況合在一起時,其結果為(r-f+n)%n。8.有如下程序:qu=“thonepy”h=5t=4s=“”while h!=t:s=s+qu[h]h=(h+1)%len(qu)print(s)運行后,變量s的值為( B )A.pythone B.python C.epython D.epytho解析:此程序為循環隊列的應用,隊首定位在5號索引位,隊尾定位在4號索引位。每次出隊后,隊首指針向后移動1位,當隊首指針超過最后1個字符時,就要指向索引號為0的位置,因此隊首指針值計算時需要對字符串長度進行取余。當隊首指針與隊尾指針重合時就停止出隊,所以s的長度比原隊列的長度少1。9.某診所叫號系統中,利用隊列來存儲當前正在排隊病人的編號,head指向隊首元素,tail指向隊尾元素的下一個位置。若當前沒有病人,則head與tail的值分別為( C )A.head!=tail B.head>tail C.head==tail D.head解析:head、tail分別是隊首和隊尾指針,當隊列為空時,指針head和tail指向同一個位置。10.若用一個規模為8的數組來實現循環隊列,且當前隊頭指針head與隊尾指針tail的值分別為5和7,當從隊列中刪除一個元素,再加入兩個元素后,head和tail的值分別為( B )A.5和2 B.6和2 C.5和9 D.6和9解析:本題考查的是循環隊列。循環隊列是首尾相連的隊列,從隊列中刪除一個元素后,head的值為6,加入兩個元素后,tail的值為2。11.循環隊列SQ(rear為隊尾指針,front為隊首指針,maxlen為循環隊列的長度)隊滿的條件是(B)A.rear==SQ B.(rear+1)%maxlen==frontC.rear==0 D.front==0解析:在循環隊列中,若隊尾指針再下移1個就與隊首指針重疊在一起,說明隊列已滿。由于是在循環隊列中,隊首與隊尾指針的值都在0至maxlen-1之間。因此將隊尾指針下移后還需要對其值進行取余操作。12.下列程序的功能是在一個循環隊列中進行入隊操作,輸入“+n”表示入隊操作,入隊元素為n,輸入“-”表示出隊操作,輸入“@”時表示操作結束,部分程序如下:m=int(input(‘please input m:’)) #輸入隊列的規模mque=[‘’]*mhead=tail=0data=input(‘please input data:’)while data!=’@’:if data[0]==”+”:que[tail]=data[1:]____________則程序中劃線處應填入的代碼為( C )A.head+=1B.tail+=1C.tail=(tail+1)%mD.tail=tail%m+1解析:循環隊列中的tail指針、head指針每次移動時,都對隊列元素的個數取模運算,“+”表示進行入隊操作,因此劃線處代碼為tail=(tail+1)%m。二、非選擇題13.小王在學習循環隊列后發現循環隊列的本質就是將隊列空間的隊列尾指針連接隊列空間的隊列首指針。小王想用循環單向鏈表表示一個循環隊列,小王知道該隊列的首指針head的位置,想嘗試向循環隊列的隊尾增加一個值為x的元素。小王寫了如下程序代碼,請完善代碼。data=[34,21,64,23,76,54]nextL=[5,3,4,0,1,2]head=1x=80data.append(x);nextL.append(-1) #添加元素wz=len(data)-1_______①________while nextL[t]!=head: #找隊尾_______②______nextL[t]=wz______③___________t=hprint(data[t],end=””)while nextL[t]!=head: #輸出添加后的隊列t=nextL[t]print(data[t],end=””)答案:①t=nextL[head] ②t=nextL[t] ③nextL[wz]=h解析:本題的循環隊列是采用單向鏈表來實現的。列表data用于記錄鏈表節點中元素的值,列表nextL用于記錄當前元素的下一個元素在data列表中的存儲位置。新元素要插入到單向鏈表的尾部,首先要找到單向鏈表的表尾。在本單向鏈表中只知道鏈表的表頭,所以必須從表頭逐一向后查找表尾,表尾的特征是它的下一個是表頭。查找表頭時當前指針向下移的條件為當前指針的下一個節點不是表頭。找到鏈表尾后,需要做的工作是將尾節點的指針指向需插入的節點,插入節點的指針指向表頭。隊列專項練習習題一、選擇題已知隊列(13,2,11,34,41,77,5,7,18,26,15),第一個進入隊列的元素是13,第五個出隊列的元素是( )A.41 B.5 C.77 D.182.下列對隊列的描述,正確的是( )A.隊列的特點是先進后出B.在隊列中,允許插入的一端稱為隊首,允許刪除的一端稱為隊尾C.剛建立的隊列,隊首指針和隊尾指針均為0D.出隊操作時,先將隊首指針加1,然后再將隊首元素出隊3.小王在使用隊列解決問題的過程中,初始時,隊列為空,隊列的首指針和尾指針分為為head、tail,接著小王開始進行了一系列的操作,操作序列為:入隊、入隊、入隊、出隊、入隊、入隊、出隊、出隊、出隊、入隊、入隊,則操作結束時head和tail的值分別為( )A.4 7 B.4 8 C.5 7 D.5 84.在汽車站候車室,信息提示屏上顯示某個班車已做好準備,該車次的旅客可以檢票上車。旅客q1與q2依次排隊等待檢票,工作人員在檢票時,旅客q3,q4也排隊等待檢票。旅客q1檢完票后準備上車,這時應該接受工作人員檢票的旅客是( )A.q1 B.q2 C.q3 D.q45.若用能存放6個元素(索引用0-5表示)的數組來實現循環隊列,當前尾指針rear和頭指針front的值分別為1和5,當從隊列中出隊一個元素再入隊兩個元素后,rear和front的值分別為( )A.3和4 B.3和0 C.5和0 D.5和16.使用有m+1個元素的列表data作為循環隊列SQ的存儲空間,front為隊列頭指針,rear為隊列尾指針,則執行出隊操作的語句為( )A.front=front+1B.front=(front+1)%mC.rear=(rear+1)%(m+1)D.front=(front+1)%(m+1)7.設循環隊列中數組的下標范圍是1-n,其頭、尾指針分別為f和r,則該隊列元素個數為( )A.r-f B.r-f+1 C.(r-f)%n+1 D.(r-f+n)%n8.有如下程序:qu=“thonepy”h=5t=4s=“”while h!=t:s=s+qu[h]h=(h+1)%len(qu)print(s)運行后,變量s的值為( )A.pythone B.python C.epython D.epytho9.某診所叫號系統中,利用隊列來存儲當前正在排隊病人的編號,head指向隊首元素,tail指向隊尾元素的下一個位置。若當前沒有病人,則head與tail的值分別為( )A.head!=tail B.head>tail C.head==tail D.head10.若用一個規模為8的數組來實現循環隊列,且當前隊頭指針head與隊尾指針tail的值分別為5和7,當從隊列中刪除一個元素,再加入兩個元素后,head和tail的值分別為( )A.5和2 B.6和2 C.5和9 D.6和911.循環隊列SQ(rear為隊尾指針,front為隊首指針,maxlen為循環隊列的長度)隊滿的條件是( )A.rear==SQ B.(rear+1)%maxlen==frontC.rear==0 D.front==012.下列程序的功能是在一個循環隊列中進行入隊操作,輸入“+n”表示入隊操作,入隊元素為n,輸入“-”表示出隊操作,輸入“@”時表示操作結束,部分程序如下:m=int(input(‘please input m:’)) #輸入隊列的規模mque=[‘’]*mhead=tail=0data=input(‘please input data:’)while data!=’@’:if data[0]==”+”:que[tail]=data[1:]____________則程序中劃線處應填入的代碼為( )A.head+=1B.tail+=1C.tail=(tail+1)%mD.tail=tail%m+1二、非選擇題13.小王在學習循環隊列后發現循環隊列的本質就是將隊列空間的隊列尾指針連接隊列空間的隊列首指針。小王想用循環單向鏈表表示一個循環隊列,小王知道該隊列的首指針head的位置,想嘗試向循環隊列的隊尾增加一個值為x的元素。小王寫了如下程序代碼,請完善代碼。data=[34,21,64,23,76,54]nextL=[5,3,4,0,1,2]head=1x=80data.append(x);nextL.append(-1) #添加元素wz=len(data)-1_______①________while nextL[t]!=head: #找隊尾_______②______nextL[t]=wz______③___________t=hprint(data[t],end=””)while nextL[t]!=head: #輸出添加后的隊列t=nextL[t]print(data[t],end=””) 展開更多...... 收起↑ 資源列表 隊列專題練習.docx 隊列專題練習答案及解析.docx 縮略圖、資源來源于二一教育資源庫