資料結構習題之線性表

2022-08-19 06:45:08 字數 3534 閱讀 7372

第二章

線性表

一.基本要求、重點、難點

本章主要介紹線性表的邏輯結構和各種儲存表示方法,以及定義在邏輯結構上的各種基本運算及其在儲存結構上怎樣實現這些基本演算法。本章的重點是熟練掌握順序表(即線性表的順序儲存)和單鏈表上實現各種基本演算法以及相關的時間複雜度分析。難點是可以使用本章所學到的基本知識設計有效演算法,解決與線性表相關的應用問題。

二.考核目標和考核要求

要求達到識記層次的有:線性表的邏輯結構特徵、線性表上定義的基本運算,並能利用基本運算構造出較複雜的運算。

要求達到理解層次的有:順序表和煉表的主要優缺點、針對線性表上所須要執行的主要操作,知道選擇順序表還是鍊錶作為其儲存結構才幹取得較優的時空效能。

要求達到綜合應用層次有:順序表的含義及特點,即順序表怎樣反映線形表中元素之間的邏輯關係;順序表上的插入、刪除操作及其平均時間效能分析;利用順序表設計演算法解決簡單的應用問題。鍊錶怎樣表示線性表中元素之間的邏輯關係。鍊錶中頭指標和頭結點的使用;單鏈表、雙鏈表、迴圈鍊錶鏈結方式上的差別;單鏈表上實現的建表、查詢、插入和刪除等基本演算法、並分析其時間複雜度;迴圈表上尾指標代替頭指標的作用。以及單迴圈鍊錶上的演算法與單鏈表上對應演算法的異同點;雙鏈表的定義及其相關的演算法;利用鍊錶設計演算法解決簡單的應用問題。

三.練習

1.單項選擇題

1.1假設乙個順序表中第乙個元素的儲存位址為1000。每乙個元素佔4個位址單元,那麼,第6個元素的儲存位址應是(a)a)

1020

b)1010

c)1016

d)1024

凝視:利用計算儲存位址的公式計算為loc(ai

)=loc(a1

)+l*(i-1):1000+4*(6-1)=1020。

1.2帶頭結點的單鏈表(以head為頭指標)為空的推斷條件是(c )a)

head!=null

b)head->next==head

c)head->next==null

d)head==null

凝視:帶頭結點的單鏈表為空的條件是:head->next==null。

1.3對順序儲存的線性表,設其長度為n,在不論什麼位置上刪除操作都是等概率的。刪除乙個元素時大約要移動表中元素的個數是(d  )

a)n/2

b)(1)/2

c)n-1

d)(n-1)/2

凝視:對於順序儲存的線性表,設其長度為n,在不論什麼位置上刪除操作都是等概率的。插入乙個元素大約須要移動n/2個元素,刪除乙個元素大約須要移動(n-1)/2個元素。

1.4鍊錶不具有的特點是(a  )a)

可隨機訪問任一元素

b)插入刪除不須要移動元素

c)不必事先預計儲存空間

d)所需空間與線性表長度成正比

1.5 l是線性表,已知length(l)的值是5。經運算delete(l。2),後length(l)的值是(c  )

a)5b)0

c)4d)6

1.6在乙個單鏈表中。若刪除p指向結點的後繼結點,則執行的操作為(a )a)

q=p->next

;p->next=p->next->next。dispose(q);

b)p=p->next

;q=p->next;p=q->next。dispose(q)。

c)q=p->next->next

;p=p->next;dispose(q)。

a)p=p->next->next

;q=p->next。dispose(q)。)a)

首元素b)

尾元素c)

中間的元素

d)全部的元素

凝視:線性表的首元素僅僅有乙個直接後繼。尾元素僅僅有乙個直接前驅,中間的元素僅僅有乙個前驅元素和後繼元素。

1.8在單迴圈鍊錶中。已知q指向p指向結點的前驅結點,若在q。p所指結點之間插入乙個s所指向的新結點,則執行的操作是(a 

)a)q->next=s,s->next=p。

b)p->next=s;s->next=q;

c)s->next=p->next;p->next=s;

d)p->next=s->next;s->next=p。

2.填空題

2.1在乙個長度為n的順序表中第i個元素之前插入乙個元素時,須要後移[n-i+1]個元素

2.2在乙個長度為n的順序表中刪除第i個元素須要向前移動[n-1]個元素

2.3順序表中邏輯相鄰的元素,在物理位置上[相鄰]

2.4在用p指標訪問單鏈表時,推斷表沒有訪問結束的條件是[p!=null]

2.5線性表a的元素長度為l。在順序儲存結構下loc(ai

)=loc(a1

)+[l*(i-1)]

2.6在單鏈表中除首結點外。隨意結點的儲存位置都由[直接前驅]結點中的指標表示

2.7在單鏈表中。設定表頭結點的作用是插入或刪除首結點時不必對[表頭指標]進行處理

2.8迴圈鍊錶s是空表的條件是[s->next==s]

2.9雙向鍊錶s是空表的條件是[s->next==s->prior==s]

3.簡答題

3.1線性表有兩種儲存結構。即順序表和煉表,這兩種儲存表示各有什麼優缺點?

答:a,表的順序儲存表示結構簡單,不須要額外的儲存空間,資料記錄在邏輯上相鄰,在儲存位置上亦相鄰。可隨機訪問。有些運算easy實現;但在做插入和刪除運算時要移動大量的元素,表長是固定的。不易擴充套件。

b.鏈式儲存表示是動態結構。表長可隨意擴充,插入和刪除不須要移動大量的元素;但不能隨機訪問,須要新增對應的儲存空間。

3.2在鍊錶結構中,頭結點與開始結點有什麼差別?

答: 在開始結點之前附設的乙個結點稱為頭結點。它的資料域值是無意義的,而開始結點是鍊錶中儲存線性表中第乙個元素的結點。

3.3哪些鍊錶從尾指標出發能夠訪問到鍊錶中的任何位置?

答:迴圈鍊錶和雙向鍊錶

4.演算法設計

4.1在順序表中第i個位置上插入元素x

voidinsertlist(seqlist *l,datatype x,int i)

4.2將順序表中位置為i的元素刪除

voiddeletelist(seqlist*l,int i)

4.3頭插法建立單鏈表

linklistcreatelistf(void)

returnhead;//返回頭指標

}4.4尾插法建立單鏈表

linklistcreatelistr(void)

if(r!=null)

r->next=null;//對於非空表,將尾結點指標域置空

returnhead;}

4.5在鍊錶中查詢序號為i的結點

listnode *getnode(linklisthead,int i)

if(i==j)return p。//找到了第i個結點

elsereturn null;//當i<0或i>n時。找不到第i個結點}

4.6將值為x的結點插入到單鏈表的第i個位置上

voidinsertlist(linklisthead,datatypex,int i)

4.7刪除單鏈表中的第i個結點

voiddeletelist(linklist head,int i)

mysql 線性表 資料結構之線性表

概要 參考 大話資料結構 把常用的基本資料結構梳理一下。線性表定義 線性表 list 零個或多個資料元素的有限序列。若將線性表記為 a 1,cdots,a a i,a cdots,a n 則表中 a 領先於 a i a i 領先於 a 稱 a 是 a i 的直接前驅元素,a 是 a i 的直接後繼元...

資料結構之線性表

從現在開始,我們開始討論如何實現一些常用的資料結構和其中的一些經典演算法.等把資料結構講完了.我可能會繼續討論vc 的程式設計只是以及vs平台下的c c 開發等等.呵呵.我們進入正題吧.我在這裡就只實現線性表的連表結構.當然了,這裡實際上包含了好多知識.我希望大家在引用的時候.一定要領悟裡面的一些變...

資料結構之線性表

線性表是具有相同特性的資料元素的乙個有限序列。該序列中所含元素的個數叫做線性表的長度,用n表示,n 0。當n 0時,表示線性表是乙個空表,即表中不包含任何元素。設序列中第i i表示位序 個元素為ai 1 i n 線性表的一般表示為 a1,a2,ai,ai 1,an include include d...