目錄:
線性表的邏輯結構
線性表的順序儲存結構
線性表的鏈式儲存結構
順序表和煉表的比較
應用舉例
內容: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 按值查...