2 陣列和鍊錶的一般介紹

2021-08-08 21:27:32 字數 1984 閱讀 7911

1 . 陣列是什麼?

陣列是具有某種相同特徵的物件的集合。比如:int a[10]是乙個存放10個整型數字的集合,double a[10]是乙個存放10個雙精度數字的集合等。陣列其實是乙個資料結構,因為當我們在宣告並定義乙個陣列的時候,程式就會在記憶體中為我們申請乙個連續的n*(sizeof ( type ))大小的空間。

1 . 1 存放的位置

棧:我們在函式(方法)中定義乙個變數的時候,程式就會在棧上開闢一段空間,生命週期結束後,程式會自動釋放掉開闢的空間。

堆:我們使用new / gcnew中定義乙個變數的時候,程式就會在堆上開闢一段空間,生命週期結束時,需手動釋放記憶體空間。

1 . 2 使用的方法

固定大小的一維陣列:元素資料型別 陣列名稱[陣列大小]  例:int a[20]

固定大小的二維陣列:元素資料型別 陣列名稱[陣列大小]  例:int a[20][20]

動態大小的一維陣列:c++ : int *a = new a[size]    c : int *a = (int*)malloc(sizeof(int)*number)  ||||| 當使用結束後,delete a;

動態大小的二維陣列:

#include using namespace std;

int main()

{ // b,c分別是行、列

int b,c;

cin>>b>>c;

int **a = new int*[b];

for(int i = 0;i1 . 3 使用的場景假設我們現在有乙個需求,要在一維陣列的中間位置插入乙個值,那麼你首先需要找到這個位置,並將這個位置開始至結束的所有值都向後移動乙個資料型別大小的單元,刪除的情況同樣如此麻煩。由此可以得出:當我們需要對資料集合集合進行頻繁的插入、刪除等操作的時候,我們盡量避免使用陣列來進行操作。當我們在頻繁的取值、賦值計算的時候,由於陣列是連續的,因此通過索引查詢到某乙個值、或將資料寫回都是是非常迅速。

1 . 4 注意的地方

1)對於非動態陣列,讀寫資料時注意。如:int a[10]是固定大小為10的整型陣列,索引值最大為9(從0開始,pascal除外),索引超過9編譯器會報錯。

2)對於動態陣列,陣列的使命週期結束後,需要手動將記憶體釋放。

3)對於陣列的大小,有兩種情況,乙個是sizeof(a),表示陣列a設定的元素個數,乙個是strlen(a),表示陣列中儲存的資料的元素個數。

2 . 鍊錶是什麼?

鍊錶也是一種資料結構,是一種鏈式儲存資料的資料結構,鍊錶並不要求儲存的資料的記憶體位址都是連續的,可以連續,也可以不連續。

2 . 1 鍊錶的組成

一般的單鏈表結構由以下幾個要素組成,其中主要包括:頭指標、結點、null

2 . 2 到底有什麼優勢?

在上邊的陣列中已經介紹了,陣列其實是乙個偏科生,比較擅長取值賦值。而鍊錶其實也是乙個偏科生,比較擅長插值、刪值等。一般情況下,我們在專案中,遇到需要定義的資料結構時,可以根據實際專案的需求,自行選擇究竟是使用鍊錶,還是陣列。對於c++,我們可能並不需要自己去從0開始構造乙個單鏈表的資料結構,而去使用有一些具有鍊錶性質的容器。比如:vector等。但是基於對技術的深入探索,我們還是需要在底層去了解鍊錶結構的具體實現,甚至去重寫自己的鍊錶結構。

2 . 3 都有哪些型別?

鍊錶:單鏈表、雙鏈表、迴圈鍊錶等。

雙鏈表:每個結點有兩個指標,乙個指標指向上乙個結點的位址,乙個指標指向下乙個結點的位址。(迅速的查詢當前結點的上乙個結點和下乙個結點的資料)

迴圈鍊錶:鍊錶的最後乙個結點的指標域指向頭結點,形成乙個環狀的資料結構。

Task33(一般)鍊錶 61旋轉鍊錶

61旋轉鍊錶 給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1 2 3 4 5 null,k 2 輸出 4 5 1 2 3 null 解釋 向右旋轉 1 步 5 1 2 3 4 null 向右旋轉 2 步 4 5 1 2 3 null示例 2 輸入 ...

一般線性鍊錶類的C 實現

以下的c 類linklist實現了線性鍊錶的一般操作。可以直接在其他的程式中直接建立它的物件,其中線性表中的資料在此為整型,具體應用的時候可以適當的修改,並可以在此基礎上繼續封裝特定的功能。標頭檔案 linklist.h typedef struct lnode lnode,plinklist cl...

一般線性鍊錶類的C 實現

以下的c 類linklist實現了線性鍊錶的一般操作。可以直接在其他的程式中直接建立它的物件,其中線性表中的資料在此為整型,具體應用的時候可以適當的修改,並可以在此基礎上繼續封裝特定的功能。標頭檔案 linklist.h typedef struct lnode lnode,plinklist cl...