鍊錶是一種採用什麼儲存結構儲存的線性表
鍊錶是一種採用「鍊式」儲存結構儲存的線性表。鍊錶的資料元素所佔的儲存單元位址可以是連續的,也可以是不連續的,可依需求暫時、動態地申請分配對應的儲存空間,資料元素之間的邏輯關係可以用「鏈」來表達。
本教學操作環境:windows7系統、Dell G3電腦。
為了克服順序表儲存結構的缺點,充分利用儲存空間和提高運作效率,線性表可以採用另一種儲存結構-鍊式儲存結構。 線性表的鍊式儲存結構簡稱「鍊錶(link list)」
一、鍊錶概述
鍊錶的資料元素所佔的儲存單元位址可以是連續的,也可以是不連續的,可根據需要暫時、動態地申請分配相應的儲存空間,資料元素之間的邏輯關係可以用「鏈」來表達。
鍊錶的插入和刪除不需要移動資料元素,只需要修改鏈即可實現。
鍊錶分類:
1.以鍊錶記憶體分配實作的方式分類
①動態鍊錶
②靜態鍊錶
#2 .依連結方式分類
①單鍊錶
②循環鍊錶
③雙鍊錶
(它們皆為動態鍊錶)
二、單鍊錶的定義
1.定義
為了表示每個資料元素ai與其直接後繼資料元素ai 1之間的邏輯關係,對於每個資料元素ai,除了儲存本身的資訊外,還需要儲存一個指示其直接後繼的資訊(後繼的儲存位置-位址)。
儲存資料元素資訊的域稱為資料域,儲存直接後繼位置的域稱為指標域 #,指標域中儲存的資訊稱為指標或鏈。
這兩部分資訊組成資料元素ai的儲存映像,稱為結點。
n個結點鏈成一個鍊錶,即線性表(a1,a2,a3,...,an)的鍊式儲存結構,因為鍊錶的每個結點只包含一個指標域,所以稱為單鍊錶。
對於線性表來說,總有個頭有個尾,鍊錶也不例外。 鍊錶中指向單鍊錶第一個結點的指標叫做頭指標,整個鍊錶的存取必須從頭指標開始進行,之後的每個結點都是上個結點的後繼指標指向的位置。 鍊錶的最後一個結點的指標為「空(通常用NULL表示)」-空指標。
為了方便實現鍊錶的各種運算,在單鍊錶的第一個資料結點之前設一個相同類型的結點,該結點稱為頭結點。
頭結點的資料域可以儲存一個特殊的標誌資訊如鍊錶的長度,也可以不儲存任何資料。
鍊錶的第一個資料結點和最後一個結點又稱為首結點和尾結點。
2.頭指標與頭結點的異同點
頭指標:
- 頭指標是指標中指向第一個結點的指針,若鍊錶有頭結點,則是指向頭結點的指針。
- 頭指標具有標識作用,常用頭指標冠以鍊錶的名字。
- 無論鍊錶是否為空,頭指標皆不為空。 頭指標是鍊錶的必要元素。
頭結點:
- 頭結點是為了操作的統一和方便而設立的,放在第一個元素的結點之前,其資料域一般無意。
- 有了頭結點,對在第一元素結點前插入結點和刪除第一個結點,其操作與其他結點的操作就統一了。
- 頭結點不一定是鍊錶必須要素。
3.程式碼示範
/*线性表的单链表存储结构*/ /*结点定义*/ typedef struct Node { ElemType data; struct Node *next; }Node; /*单链表定义*/ typedef struct Node *LinkList;
三、单链表的操作
1.插入操作
1)插入模拟
假设存储元素e的结点为s,将s插入到ai结点后面,如何操作?
思考:两句插入代码能否交换?
不能,如果调换过来,会导致ai 1等后面的元素无法找到,因为s的指针域没有指向ai 1的地址。
2)单链表第i个数据插入结点的算法思路
- 声明一个结点p指向链表的第一个结点,初始化j=1;
- 当j
- 若到链表末尾p为空,则说明第i个元素不存在;若查找成功,生成一个空节点s(使用malloc函数)
- 将数据元素e赋值給s->data,即为s->data=e;
- 插入标准语句:s->next=p->next;p->next=s;
- 返回成功。
2.删除操作
1)删除模拟
假设存储元素ai的结点为q,要实现将结点q删除单链表的操作。
2)单链表删除第i个数据结点的算法思路
- 声明一个结点p指向链表的第一个结点,初始化j=1;
- 当j
- 若到链表末尾p为空,则说明第i个元素不存在;若查找成功,将删除结点p->next赋值給q
- 插入标准语句:p->next=q->next;
- 将q结点赋值給e,即为e=q->data;
- 释放q结点
- 返回成功。
四、单链表结构和顺序表结构对比
存储方式:
- 顺序表用一段连续的存储单元依次存储线性表中的数据元素
- 单链表采用链式存储结构,用一组任意的存储单元存放线性表元素
时间性能:
①查找
- 顺序表O(1)
- 单链表O(n)
②插入和删除
- 顺序表O(n)
- 单链表O(1)
空间性能:
- 顺序表需要预分配存储空间,分大了,浪费,分小了易发生上溢
- 单链表不需要预分配存储空间,需要多少都可以分配,元素个数不受限制
更多相关知识,请访问常见问题栏目!
以上是鍊錶是一種採用什麼儲存結構儲存的線性表的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Linuxext2檔案系統是一種在大部分Linux作業系統上使用的檔案系統,它採用了一種高效的磁碟儲存結構來管理檔案和目錄的儲存。在深入探討Linuxext2檔案系統的實體儲存結構之前,我們首先需要先了解一些基本概念。在ext2檔案系統中,資料儲存在資料塊(block)中,資料塊是檔案系統中最小的可分配單位。每個資料塊有固定的大小,通常為1KB、2KB或4

給定一個單鍊錶和正整數N作為輸入。目標是使用遞歸找到給定列表中從末尾算起的第N個節點。如果輸入清單有節點a→b→c→d→e→f且N為4,那麼倒數第4個節點將會是c。我們將首先遍歷直到列表中的最後一個節點以及從遞歸(回溯)增量計數返回。當count等於N時,則傳回指向目前節點的指標作為結果。讓我們來看看此的各種輸入輸出場景-輸入-List:-1→5→7→12→2→96→33N=3輸出−倒數第N個節點為:2解釋−第三個節點是2 。輸入−列表:-12→53→8→19→20→96→33N=8輸出-節點不存

PHPSPL資料結構庫概述PHPSPL(標準php庫)資料結構庫包含一組類別和接口,用於儲存和操作各種資料結構。這些資料結構包括數組、鍊錶、堆疊、佇列和集合,每個資料結構都提供了一組特定的方法和屬性,用於操縱資料。數組在PHP中,數組是儲存一系列元素的有序集合。 SPL數組類別提供了對原生的PHP數組進行加強的功能,包括排序、過濾和映射。以下是使用SPL陣列類別的範例:useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array

數字的鍊錶表示是這樣提供的:鍊錶的所有節點都被視為數字的一位數字。節點儲存數字,使得鍊錶的第一個元素保存數字的最高有效位,鍊錶的最後一個元素保存數字的最低有效位。例如,數字202345在鍊錶中表示為(2->0->2->3->4->5)。要為這個表示數字的鍊錶加1,我們必須檢查清單中最低有效位的值。如果小於9就可以了,否則程式碼將更改下一個數字,依此類推。現在讓我們看一個範例來了解如何做到這一點,1999表示為(1->9->9->9)並添加1應該將其

陣列與鍊錶的演算法時間複雜度比較:存取陣列O(1),鍊錶O(n);插入陣列O(1),鍊錶O(1)/O(n);刪除陣列O(1),鍊錶O (n);搜尋數組O(n),鍊錶O(n)。

鍊錶是一種資料結構,採用一系列帶有資料和指標的節點組織元素,特別適合處理大型資料集和頻繁的插入/刪除操作。它的基本組成部分包括節點(資料和指向下一個節點的指標)和頭節點(指向鍊錶中第一個節點)。常見鍊錶操作包括:新增(尾部插入)、刪除(特定值)和遍歷。

在Python中,鍊錶是一種線性資料結構,它由一系列節點組成,每個節點包含一個值和對鍊錶中下一個節點的引用。在本文中,我們將討論如何在Python中將元素新增至鍊錶的第一個和最後一個位置。 LinkedListinPython鍊錶是一種引用資料結構,用於儲存一組元素。它在某種程度上類似於數組,但是在數組中,資料儲存在連續的記憶體位置中,而在鍊錶中,資料不受此條件限制。這意味著資料不是按順序存儲,而是以隨機的方式儲存在記憶體中。 Thisraisesonequestionthatis,howwecanac

鍊錶(LinkedList)是一種常見的資料結構,它由一系列結點(Node)組成,每一個結點包含兩個關鍵屬性:資料域(Data)和指標域(Next)。其中,數據域用於儲存實際數據,而指標域則指向下一個結點。透過這種方式,鍊錶以一種靈活的方式儲存數據,適用於許多不同的應用場景。在Go語言中,鍊錶結構也得到了良好的支援。 Go的內建標準庫中提供了cont