鏈表的存儲單元地址
1. 連續存儲數據時,存儲單元的地址()A.一定連續 B一定不連續 C不一定連續 D部分連續
A。
鏈式存儲,存儲空間可以不連續,但存儲地址必連續。
鏈式存儲設計時,各個不同結點的存儲空間可以不連續,但是結點內的存儲單元地址則必須連續。
typedef struct LNode {
int value; // value中存放結點值域,默認是int型
struct Lnode *next;//指向後繼結點的指針
}LNode; // 定義單鏈表結點類型
上述定義了一個結構體,包括兩部分,一是值域,二是指針域;每當定義一個結點都會產生這兩個區域。
這個value與next域必須是挨著的,稱這個結點為內部。
(1)鏈表的存儲單元地址擴展閱讀:
由於不必須按順序存儲,鏈表在插入的時候可以達到O(1)的復雜度,比另一種線性表順序錶快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而順序表相應的時間復雜度分別是O(logn)和O(1)。
使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由於增加了結點的指針域,空間開銷比較大。
2. 鏈式存儲設計結點內的存儲單元地址為什麼要連續
鏈式存儲設計時,各個不同結點的存儲空間可以不連續,但是結點內的存儲單元地址則必須連續。
typedef struct LNode {
int value; // value中存放結點值域,默認是int型
struct Lnode *next;//指向後繼結點的指針
}LNode; // 定義單鏈表結點類型
上述定義了一個結構體,包括兩部分,一是值域,二是指針域;每當定義一個結點都會產生這兩個區域。
這個value與next域必須是挨著的,稱這個結點為內部。
假如我們定義若干個不同的結點,把它們連接起來成為一個單鏈表。
value區域,箭頭區域則是指針域指向邏輯上相鏈接的下一個結點,但是它們在空間上不一定連續。
而對於它們的結點內部一定是連續的。若第一個結點佔用兩個地址,那麼value域的起始地址是1,則指針域的地址就是2。同理若第二個結點的value地址是10,則next域就是11。
因此,在進行鏈式存儲設計時,各個不同結點完全可以存儲在不連續的空間上,而對於同一個結點內部,不論劃分多少個區域,兩個也好,三個也罷,總之內部的單元存儲地址是連續的。
3. 單鏈表存儲結構LNode, *LinkList;的含義
LNode* = LinkList, LNode,*LinkListl,都是匿名結構體別名,Lnode是實體,而LiskList是這種ElemType類型的指針,就是經常在參數表中表示一個鏈表都用LinkList定義一個指向頭結點的指針了。
單鏈表是一種鏈式存取的數據結構,用一組地址任意的存儲單元存放線性表中的數據元素。
鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) + 指針(指示後繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。
以「結點的序列」表示線性表稱作線性鏈表(單鏈表)
單鏈表是鏈式存取的結構,為找第 i 個數據元素,必須先找到第 i-1 個數據元素。
因此,查找第 i 個數據元素的基本操作為:移動指針,比較 j 和 i
單鏈表
1、鏈接存儲方法
鏈接方式存儲的線性表簡稱為鏈表(Linked List)。
鏈表的具體存儲表示為:
① 用一組任意的存儲單元來存放線性表的結點(這組存儲單元既可以是連續的,也可以是不連續的)
② 鏈表中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關系,在存儲每個結點值的同時,還必須存儲指示其後繼結點的地址(或位置)信息(稱為指針(pointer)或鏈(link))