第2章 線性表
一 選擇題
1.下述哪一條是順序存儲結構的優點?( A )
A.存儲密度大 B.插入運算方便 C.刪除運算方便 D.可方便地用於各種邏輯結構的存儲表示
2.下面關於線性表的敘述中,錯誤的是哪一個?( B )
A.線性表采用順序存儲,必須占用一片連續的存儲單元。
B.線性表采用順序存儲,便於進行插入和刪除操作。
C.線性表采用鏈接存儲,不必占用一片連續的存儲單元。
D.線性表采用鏈接存儲,便於插入和刪除操作。
3.線性表是具有n個( C )的有限序列(n>0)。
A.表元素 B.字符 C.數據元素 D.數據項 E.信息項
4.若某線性表最常用的操作是存取任一指定序號的元素和在最后進行插入和刪除運算,則利用( A )存儲方式最節省時間。
A.順序表 B.雙鏈表 C.帶頭結點的雙循環鏈表 D.單循環鏈表
5.某線性表中最常用的操作是在最后一個元素之后插入一個元素和刪除第一個元素,則采用( D )存儲方式最節省運算時間。
A.單鏈表 B.僅有頭指針的單循環鏈表 C.雙鏈表 D.僅有尾指針的單循環鏈表
6.設一個鏈表最常用的操作是在末尾插入結點和刪除尾結點,則選用( D )最節省時間。
A. 單鏈表 B.單循環鏈表 C. 帶尾指針的單循環鏈表 D.帶頭結點的雙循環鏈表
7.若某表最常用的操作是在最后一個結點之后插入一個結點或刪除最后一個結點。則采用( D )存儲方式最節省運算時間。
A.單鏈表 B.雙鏈表 C.單循環鏈表 D.帶頭結點的雙循環鏈表
8. 靜態鏈表中指針表示的是( BC ).
A. 內存地址 B.數組下標 C.下一元素地址 D.左、右孩子地址
9. 鏈表不具有的特點是( C )
A.插入、刪除不需要移動元素 B.可隨機訪問任一元素
C.不必事先估計存儲空間 D.所需空間與線性長度成正比
10. 下面的敘述不正確的是( BC )
A.線性表在鏈式存儲時,查找第i個元素的時間同i的值成正比
B. 線性表在鏈式存儲時,查找第i個元素的時間同i的值無關
C. 線性表在順序存儲時,查找第i個元素的時間同i 的值成正比
D. 線性表在順序存儲時,查找第i個元素的時間同i的值無關
11. 線性表的表元存儲方式有(順序)和鏈接兩種。試指出下列各表中使用的是何種存儲方式:表1是(順序)存儲方式;表2是(循環鏈接)存儲方式;表3是(單向鏈接)存儲方式;表4是(雙向鏈接)存儲方式。表左的s指向起始表元。
表元編號 | 貨號 | 數量 | 表元間聯系 |
1 | 618· | 40 | 2 |
2 | 205 | 2 | 3 |
3 | 103 | 15 | 4 |
4 | 501 | 20 | 5 |
5 | 781 | 17 | 6 |
6 | 901 | 24 | 0 |
表1
s→
表元編號 | 貨號 | 數量 | 表元間聯系 |
1 | 618· | 40 | 5 |
2 | 205 | 2 | 1 |
3 | 103 | 15 | 4 |
4 | 501 | 20 | 2 |
5 | 781 | 17 | 6 |
6 | 901 | 24 | 3 |
表2
s→
表元編號 | 貨號 | 數量 | 表元間聯系 |
1 | 618· | 40 | 5 |
2 | 205 | 2 | 1 |
3 | 103 | 15 | 6 |
4 | 501 | 20 | 0 |
5 | 781 | 17 | 4 |
6 | 901 | 24 | 3 |
表3
s—>
表元編號 | 貨號 | 數量 | 1 2 |
1 | 618· | 40 | 5 2 |
2 | 205 | 2 | 1 0 |
3 | 103 | 15 | 4 6 |
4 | 501 | 20 | 0 3 |
5 | 781 | 17 | 6 1 |
6 | 901 | 24 | 3 5 |
表4
s→
供選擇的答案:
A.連續 B.單向鏈接 C.雙向鏈接 D.不連接 E.循環鏈接
F.樹狀 G.網狀 H.隨機 I.順序 J.順序循環
12.(1) 靜態鏈表既有順序存儲的優點,又有動態鏈表的優點。所以,它存取表中第i個元素的時間與i無關。
(2) 靜態鏈表中能容納的元素個數的最大數在表定義時就確定了,以后不能增加。
(3) 靜態鏈表與動態鏈表在元素的插入、刪除上類似,不需做元素的移動。
以上錯誤的是( B )
A.(1),(2) B.(1) C.(1),(2),(3) D.(2)
13. 若長度為n的線性表采用順序存儲結構,在其第i個位置插入一個新元素的算法的時間復雜度為( C )(1<=i<=n+1)。
A. O(0) B. O(1) C. O(n) D. O(n2)
14. 對於順序存儲的線性表,訪問結點和增加、刪除結點的時間復雜度為( C )。
A.O(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1)
15.線性表( a1,a2,…,an)以鏈接方式存儲時,訪問第i位置元素的時間復雜性為( C )
A.O(i) B.O(1) C.O(n) D.O(i-1)
16.非空的循環單鏈表head的尾結點p滿足( A )。
A.p.link=head B.p.link=NIL C.p=NIL D.p= head
17.循環鏈表H的尾結點P的特點是( A )。
A.P.NEXT=H B.P.NEXT= H.NEXT C.P=H D.P=H.NEXT
18.在一個以 h 為頭的單循環鏈中,p 指針指向鏈尾的條件是(A)
A. p.next=h B. p.next=NIL C. p^.next.^next=h D. p^.data=-1
二、判斷
1. 鏈表中的頭結點僅起到標識的作用。( × )
2. 順序存儲結構的主要缺點是不利於插入或刪除操作。(√ )
3.線性表采用鏈表存儲時,結點和結點內部的存儲空間可以是不連續的。( √ )
4.順序存儲方式插入和刪除時效率太低,因此它不如鏈式存儲方式好。( × )
5. 對任何數據結構鏈式存儲結構一定優於順序存儲結構。(× )
6.順序存儲方式只能用於存儲線性結構。( × )
7.集合與線性表的區別在於是否按關鍵字排序。( × )
8. 所謂靜態鏈表就是一直不發生變化的鏈表。( × )
9. 線性表的特點是每個元素都有一個前驅和一個后繼。( × )
10. 取線性表的第i個元素的時間同i的大小有關. ( × )
11. 循環鏈表不是線性表. ( × )
12. 線性表只能用順序存儲結構實現。( × )
13. 線性表就是順序存儲的表。( × )
14.為了很方便的插入和刪除數據,可以使用雙向鏈表存放數據。( √ )
15. 順序存儲方式的優點是存儲密度大,且插入、刪除運算效率高。( × )
16. 鏈表是采用鏈式存儲結構的線性表,進行插入、刪除操作時,在鏈表中比在順序存儲結構中效率高。 ( √ )
三、填空
1.當線性表的元素總數基本穩定,且很少進行插入和刪除操作,但要求以最快的速度存取線性表中的元素時,應采用____順序___存儲結構。
2.線性表L=(a1,a2,…,an)用數組表示,假定刪除表中任一元素的概率相同,則刪除一個元素平均需要移動元素的個數是____n-1/2____。
3.設單鏈表的結點結構為(data,next),next為指針域,已知指針px指向單鏈表中data為x的結點,指針py指向data為y的新結點 , 若將結點y插入結點x之后,則需要執行以下語句:___py->next=px->next___; ____px->next=py__;
4.在一個長度為n的順序表中第i個元素(1<=i<=n)之前插入一個元素時,需向后移動____n-i+1____個元素。
5.在單鏈表中設置頭結點的作用是___主要是使插入和刪除等操作統一,在第一個元素之前插入元素和刪除第一個結點不必另作判斷。另外,不論鏈表是否為空,鏈表指針不變。_____。
6.對於一個具有n個結點的單鏈表,在已知的結點*p后插入一個新結點的時間復雜度為___o(1)_____,在給定值為x的結點后插入一個新結點的時間復雜度為___O(n)_____。
7.根據線性表的鏈式存儲結構中每一個結點包含的指針個數,將線性鏈表分成___單鏈表_____和___多重鏈表____;而又根據指針的連接方式,鏈表又可分成____動態鏈表____和___靜態鏈表_____。
8. 在雙向循環鏈表中,向p所指的結點之后插入指針f所指的結點,其操作是____f->next=p->next;___、___f->next=p;____、___p->next->prior=f;____、____p->next=f;____。
10.鏈接存儲的特點是利用____指針____來表示數據元素之間的邏輯關系。
11.順序存儲結構是通過____物理上相鄰____表示元素之間的關系的;鏈式存儲結構是通過_____指針___表示元素之間的關系的。
12. 對於雙向鏈表,在兩個結點之間插入一個新結點需修改的指針共 ___4___個,單鏈表為____2___個。
13. 循環單鏈表的最大優點是:____從任一結點出發都可訪問到鏈表中每一個元素____。
14. 已知指針p指向單鏈表L中的某結點,則刪除其后繼結點的語句是:___q=p->next; p->next=q->next;delete q;_____
15. 帶頭結點的雙循環鏈表L中只有一個元素結點的條件是:___ L->next->next==L 或者L->next->prior==L 或者L->prior->next==L或者L->prior->prior==L_____
16. 在單鏈表L中,指針p所指結點有后繼結點的條件是:__ p->next!=null
17.帶頭結點的雙循環鏈表L為空表的條件是:____ L->next==L &&L->prior==L ____。
18. 在單鏈表p結點之后插入s結點的操作是:__ s->next=p->next;p->next=s _____。
四 應用題
1.線性表有兩種存儲結構:一是順序表,二是鏈表。試問:
(1)如果有 n個線性表同時並存,並且在處理過程中各表的長度會動態變化,線性表的總數也會自動地改變。在此情況下,應選用哪種存儲結構? 為什么?
答:選鏈式存儲結構,它可動態申請內存空間,不受長度(即表中元素個數)的影響,插入、刪除復雜度為O(1)
(2)若線性表的總數基本穩定,且很少進行插入和刪除,但要求以最快的速度存取線性表中的元素,那么應采用哪種存儲結構?為什么?
答:選取順序結構,順序表可以隨機存取,時間復雜度為O(1)。
2.線性表的順序存儲結構具有三個弱點:其一,在作插入或刪除操作時,需移動大量元素;其二,由於難以估計,必須預先分配較大的空間,往往使存儲空間不能得到充分利用;其三,表的容量難以擴充。線性表的鏈式存儲結構是否一定都能夠克服上述三個弱點,試討論之。
答:鏈式存儲結構一般說克服了順序存儲結構的三個弱點。首先,插入、刪除不需移動元素,只修改指針,時間復雜度為O(1);其次,不需要預先分配空間,可根據需要動態申請空間;其三,表容量只受可用內存空間的限制。其缺點是因為指針增加了空間開銷,當空間不允許時,就不能克服順序存儲的缺點。
3.若較頻繁地對一個線性表進行插入和刪除操作,該線性表宜采用何種存儲結構?為什么?
答:采用鏈式存儲結構,它根據實際需要申請內存空間,而當不需要時又可將不用結點空間返還給系統。在鏈式存儲結構中插入和刪除操作不需要移動元素。
4.線性結構包括___線性表___、___棧___、___隊列____和___串____。線性表的存儲結構分成___順序存儲結構___和____鏈式存儲結構__。
5.線性表(a1,a2,…,an)用順序映射表示時,ai和ai+1(1<=i<n〉的物理位置相鄰嗎?鏈接表示時呢?
答:順序映射時,ai與ai+1的物理位置相鄰;鏈表表示時ai與ai+1的物理位置不要求相鄰。
6. 說明在線性表的鏈式存儲結構中,頭指針與頭結點之間的根本區別;頭結點與首元結點的關系。
答:在線性表的鏈式存儲結構中,頭指針指鏈表的指針,若鏈表有頭結點則是鏈表的頭結點的指針,頭指針具有標識作用,故常用頭指針冠以鏈表的名字。頭結點是為了操作的統一、方便而設立的,放在第一元素結點之前,其數據域一般無意義(當然有些情況下也可存放鏈表的長度、用做監視哨等等),有頭結點后,對在第一元素結點前插入結點和刪除第一結點,其操作與對其它結點的操作統一了。而且無論鏈表是否為空,頭指針均不為空。首元結點也就是第一元素結點,它是頭結點后邊的第一個結點。
7. 在單鏈表和雙向鏈表中,能否從當前結點出發訪問到任何一個結點?
答:在單鏈表中不能從當前結點(若當前結點不是第一結點)出發訪問到任何一個結點,鏈表只能從頭指針開始,訪問到鏈表中每個結點。在雙鏈表中求前驅和后繼都容易,從當前結點向前到第一結點,向后到最后結點,可以訪問到任何一個結點。
8. 如何通過改鏈的方法,把一個單向鏈表變成一個與原來鏈接方向相反的單向鏈表?
答:鏈表逆置問題。設該鏈表帶頭結點,將頭結點摘下,並將其指針域置空。然后從第一元素結點開始,直到最后一個結點為止,依次前插入頭結點的后面,則實現了鏈表的逆置。