資料結構與演算法之 線性表

2022-09-03 05:15:07 字數 1533 閱讀 3686

01線性表

1.線性表的判斷方式就是元素有且只有乙個直接前驅和直接後繼,元素可以為空,此時叫做空表

2.抽象資料型別標準格式

adt 抽象資料型別名

data

operation

endadt

3.操作偽**

operation

endadt

4.實際問題

提問:實現兩個線性表a,b的並集操作

思路:迴圈遍歷集合b中的每個元素,判斷當前元素是否存在於a中,如果不存在插入到a中即可 

1.寫乙個for迴圈,根據迴圈條件我需要知道迴圈的範圍,即就是b集合的長度

for (int i = 0; i <= listlength(b); i++)

2.拿到的每乙個b集合中的元素,判斷在a集合中是否存在(前提是a集合或者b集合不是空表)

int j = locateelem(a,i);

if (j == 0) nslog(@「a集合中並沒有該元素」);

else nslog(@「a集合中存在該元素」);

3.將已經確定不存在的元素插入到a集合中

int la = listlength(a);

listinsert(*a,la-1,j);

for (int i = 0; i <= listlength(b); i++) {

官方答案:

la_len = listlength(la);

lb_len = listlength(lb);

for (int i = 0 ; i <= lb_len ; i++)

5.順序儲存結構

6.實際問題

獲得元素

1 < i < listlength(l);

e = l.data[i-1];

插入操作

思路:如果插入位置不合理,丟擲異常;如果線性表長度大於等於陣列長度,則丟擲異常或動態增加陣列容量;從最後乙個元素開始向前遍歷到第i個位置,分別將它們都向後移動乙個位置

7.線性表順序儲存結構優缺點

在儲存,讀取資料時,不管是哪個位置時間複雜度都是o(1).而在插入或者刪除時,時間複雜度都是o(n).

無需為表示表中元素之間的邏輯關係而增加額外的儲存空間

可以快速訪問表中任意位置的元素

插入和刪除操作需要移動大量元素

當線性表長度變化較大時,難以確定儲存空間的容量

容易造成儲存空間的碎片(申請空間時是整塊兒的)

8.鏈式儲存結構

10實際問題

假設p是指向線性表第i個元素的指標,則該結點ai的資料域我們可以用p->data表示,它的值是乙個資料元素,結點ai的指標域我們可以用p->next表示,它的值是乙個指標.那麼p->next指向的是第i+1個元素,也就是說它是指向第ai+1的指標

提問:如果p->data = ai,那麼p->next->data = ?

思路:題中說p->data代表ai元素的資料域,那麼p->next代表的是ai元素的指標域,代表指向ai+1元素的指標,所以p->next->data代表的是ai+1元素的資料域,也就是資料元素,即ai+1.

資料結構與演算法之線性表

1.線性表的基本概念 線性表是零個或多個資料元素的有序佇列.特性 資料元素之間是有順序的 資料元素個數是有限的 資料元素的型別必須相同.2.線性表的數學定義及性質 線性表是具有相同型別的n n 0 個資料元素的有限序列 a0,a1,a2.an ai是表項,n是表長度.性質 a0是線性表中的第乙個元素...

資料結構與演算法之線性表

線性表屬於資料結構中邏輯結構中的線性結構。回憶一下,資料結構分為物理結構和邏輯結構,邏輯結構分為線性結構 幾何結構 樹形結構和圖形結構四大結構。其中,線性表就屬於線性結構。剩餘的三大邏輯結構今後會一一介紹。線性表 list 由零個或多個資料元素組成的有限序列。注意 1.線性表是乙個序列。2.0個元素...

資料結構與演算法分析之線性表

最近面試了不少公司,發現多數公司要提問資料結構與演算法分析,所以這段期間又簡單回顧了下資料結構與演算法。列表內容 簡單來說呢程式 資料結構 演算法只不過是實現的語言不同而已,有人說,學習資料結構沒一點用,工作中一點用也沒有,這點仁者見仁智者見智,現在的大部分公司是業務為王,業務理解透了,能幹就幹,幹...