資料結構學習筆記 第二章 線性表

2021-08-17 14:35:51 字數 3736 閱讀 7502

目錄:

線性表的邏輯結構

線性表的順序儲存結構

線性表的鏈式儲存結構

順序表和煉表的比較

應用舉例

內容:1.線性表的邏輯結構

a:線性表的定義:

線性表是一種最見到那最常用的資料結構,也是最典型的線性結構/

線性表簡稱表,是由0個或者多個具有相同型別的資料元素構成的有限序列,元素的個數稱為線性表的長度;

長度為0的執行緒被稱為空表,對於乙個滿足上述性質的集合我們認為它屬於線性表結構。

b:線性表的運算

線性表的運算是指對線性表的基本的操作

具體的我們在 鏈式表的基本組成中學習

2.線性表的順序儲存結構

//#include "stdafx.h"

#includeusing namespace std;

const int maxsize =10000;

template class seqlist

; seqlist ( const t a, int n );

void getlength()

void insert(int i, t x);

void printlist();

t delete(int i);

t get(int i);

int locate(t x);

private:

t data[maxsize];

int length;

};template seqlist ::seqlist(const t a, int n)

length = n;

}templatevoid seqlist::printlist()

templatevoid seqlist::insert(int i,t x)

templatet seqlist::delete (int i)

templatet seqlist ::get(int i)

//"時間的複雜度是 1;

templateint seqlist::locate (const t x)

//」時間的複雜度是 n

int main()

; seqlistlist(a, 7);

list.printlist();

list.insert(1, 0);

list.printlist();

int x = list.delete(8);

cout << "刪除元素:" << x << endl;

list.printlist();

int p = list.locate(4);

cout << "元素4的位置;" << p << endl;

return 0;

}3.線性表的鏈式儲存結構

1,順序結構和鏈式結構的比較:

順序表的優點如下:

1,不需要為表示元素之間的邏輯關係而增加額外的儲存空間;

2.可以方便的隨機訪問順序表中任何·位置的元素;

順序表的缺點如下:

1.插入和刪除操作需要移動大量的元素,效率低下,在等概率的情況下,兩種方法都需要移動一半的元素;

2.順序表難以選擇合適的儲存容量,順序表要求占用連續的儲存空間,儲存分配只能預先進行,依次屬於靜態的儲存方式,如果開始的時候分配的記憶體過小那麼就無法完成任務;

所以根據順序表的缺點我們製作了鏈式儲存結構:、

單鏈表:

// 鏈式儲存結構.cpp: 定義控制台應用程式的入口點。

//單鏈表

#include "stdafx.h"

#includeusing namespace std;

templatestruct node

;template class linklist

linklist(t a, int n);

~linklist();

void printlist();

int getlength();

node*get(int i);

int locate(t x);

void insert(int i,t x);

void insert(int n;)

t delete(int i);

private :

node*front;

};template //利用頭插法建立鍊錶

linklist::linklist(t a,int n)

}//頭插法

//template //linklist ::linklist(t a.int n)

//// r->next =null;

//}//尾插法

//linklist::linklist(t a,int n)

//// front->next = null;

//}//尾插法 的改良版 改變了front

//template //linklist::linklist(t a,int n)

////};//頭插法的改良版

templatelinklist::~linklist()

}template void linklist::printlist()

else

break; }}

templateint linklist::getlength()

else

break;

} return i;

}templatenode* linklist::get(int i)

return p;

}templateint linklist::locate(t x)

return -1;

}templatevoid linklist::insert(int i, t x)//插入有前插和後插兩種插法,而前後插又可以相互轉換,並且也可以改進;

else

throw "插入的位置錯誤";

}templatet linklist::delete(int i)

int main()

迴圈鍊錶:

雙向鍊錶:

靜態鍊錶:

4.順序表和煉表的比較

4.1時間效能:如果採用的是查詢而很少採用插入和刪除操作,那麼應該採用順序表;

如果進行的是插入和刪除操作只需要修改指標,那麼用鍊錶就更合適;

如果進行的刪除和插入操作是發生在表頭和表尾之間,那麼用迴圈鍊錶更加合適;

4.2 空間效能的比較:

順序表的儲存空間是靜態分布的。因此必須提前確定其儲存大小,如線性表的長度變化較大,則儲存規模眼最大的長度來確定否則會出現溢位,但是如果大空間只是偶爾會用到,那麼勢必會造成空間的浪費;

而對於靜態鍊錶,其儲存空間也是靜態分配的,因此會具有同樣的問題。

動態鍊錶的儲存空間是動態豐沛的,因此只要記憶體空間還有空閒就不會溢位;因此,對於空間變化較大或者長度難以估計的線性表,應該採用動態鍊錶作為儲存結構;

但是動態鍊錶的儲存密度比較小,儲存空間的利用率比較低;

4.3高階語言的雞翅對於不支援指標型別的高階語言,如果要採用鍊錶結構一般一採用靜態鍊錶唯一,雖然靜態鍊錶的儲存密度不及順序表,並且還要提前分配儲存空間,但是其操作與動態鍊錶相同,可以很方便的執行插入和刪除運算;

另外如果線性表的變化長度不大,僅需要改變節點間的相對次序時,靜態鍊錶不失為一直很好的儲存方式;

5,應用舉例

5.1動態記憶體管理

5.2多項式求和

6.stl中的相關模板類

1.向量

2.列表

資料結構學習小結2 第二章 線性表

一 小結 1 認為最重要的內容小結 1.鍊錶和順序表的操作的 實現。初始化 建立 取值 查詢 刪除 插入 2.線性表的應用 線性表的合併 有序表的合併 3.一元多項式的和的 實現。新建乙個結點 前提 鍊錶l lnode p l p next new lnode p p next p next nul...

資料結構筆記 第二章 線性表

2022年3月14日 16 22 線性表的定義 線性表是由 n n 0 個型別相同的資料元素 a 1,a 2,ldots a n 組成的有限序列。資料元素之間是一對一的關係,即每個資料元素最多有乙個直接前驅和乙個直接後繼。線性表的邏輯結構圖為 線性表的特點 抽象資料型別定義 adt linearli...

資料結構 第二章 線性表

線性表 是具有相同型別的n n 0 個元素的有限序列,其中n為表長,當n 0時,該錶為空表。線性表的特點 線性表的九種基本操作 initlist l 初始化表。構造乙個空的線性表。destroylist l 銷毀操作。銷毀線性表,並釋放線性表l所占用的記憶體空間。locateelem l,e 按值查...