『壹』 C語言如何用動態鏈表儲存數據
單鏈表,雙鏈表,堆
都可以,不過看您要存儲什麼數據
以單鏈表為例:
定義一個節點結構
typedef
struct
LNode{
ElementType
date;
struct
Lnode
*next;
}Lnode;
然後用malloc開辟需要的節點空間,把數據存進去就可以了
p
=
(Lnode)
malloc
(sizeof(Lnode));
//開辟一個節點,p為所開辟空間的指針
至於查找,從頭節點開始q
=
p->next
;一個個查就行了。
『貳』 簡述順序表和鏈表存儲方式的特點。
順序表存儲數據實行的是 一次開辟,永久使用,即存儲數據之前先開辟好足夠的存儲空間,空間一旦開辟後期無法改變大小(使用動態數組的情況除外)。而鏈表則不同,鏈表存儲數據時一次只開辟存儲一個節點的物理空間,如果後期需要還可以再申請。
因此若只從開辟空間方式的角度去考慮,當存儲數據的個數無法提前確定,又或是物理空間使用緊張以致無法一次性申請到足夠大小的空間時,使用鏈表更有助於問題的解決。
(2)存儲數據用鏈表擴展閱讀:
注意事項:
頭指針不可丟失,注意保持更新。
free指針必須確認,否則可能難以查錯,避免鏈表成環狀,通過列印限制以及單雙步法檢查鏈表環。
頭結點使用前要用為之動態分配存儲空間,而頭指針可以直接使用。
帶頭結點的鏈表,空表的判定條件是head->next=NULL,而之帶頭製作的空表的判定條件是head=NULL。
『叄』 數據結構(三)順序表和鏈表的優缺點(區別、特點)
順序表和鏈表由於存儲結構上的差異,導致它們具有不同的特點,適用於不同的場景。通過系統地學習順序表和鏈表我們知道,雖然它們同屬於線性表,但數據的存儲結構有本質的不同:
因此,若只從開辟空間方式的角度去考慮,當存儲數據的個數無法提前確定,又或是物理空間使用緊張以致無法一次性申請到足夠大小的空間時,使用鏈表更有助於問題的解決。
從空間利用率的角度上看,順序表的空間利用率顯然要比鏈表高。
這是因為,鏈表在存儲數據時,每次只申請一個節點的空間,且空間的位置是隨機的,如圖 2 所示:
這種申請存儲空間的方式會產生很多空間碎片,一定程序上造成了空間浪費。不僅如此,由於鏈表中每個數據元素都必須攜帶至少一個指針,因此,鏈表對所申請空間的利用率也沒有順序表高
根據順序表和鏈表在存儲結構上的差異,問題類型主要分為以下 2 類:
第 1 類問題適合使用順序表。這是因為,順序表中存儲的元素可以使用數組下標直接訪問,無需遍歷整個表,因此使用順序表訪問元素的時間復雜度為 O(1);而在鏈表中訪問數據元素,需要從表頭依次遍歷,直到找到指定節點,花費的時間復雜度為 O(n);
第 2 類問題則適合使用鏈表。鏈表中數據元素之間的邏輯關系靠的是節點之間的指針,當需要在鏈表中某處插入或刪除節點時,只需改變相應節點的指針指向即可,無需大量移動元素,因此鏈表中插入、刪除或移動數據所耗費的時間復雜度為 O(1);而順序表中,插入、刪除和移動數據可能會牽涉到大量元素的整體移動,因此時間復雜度至少為 O(n);
綜上所述,不同類型的場景,選擇合適的存儲結構會使解決問題效率成倍數地提高
『肆』 什麼是單鏈表,儲存上有哪些特點
單鏈表是一種鏈式存取的數據結構,用一組地址任意的存儲單元存放線性表中的數據元素。
祝好運,望採納
『伍』 C語言中怎樣用鏈表保存結構體數據(動態數據結構)
鏈表有多種形式,如:單向鏈表,雙向鏈表,單向循環鏈表,雙向循環鏈表。將鏈表結構定義為list_t,則該類型中一定(至少)存在一個指向下一節點的指針list_t
*next;除了這個指針,list_t
中可以包含其它類型的數據,包括結構體變數。比如:typedef
struct
{
struct
usr_struct
data;
list_t
*next;
}
list_t;
『陸』 鏈表—什麼是鏈表
書本概念
鏈表是一種將數據存儲到「結點」中的數據結構,需要存儲多少個數據,就生成多少個「結點」,把這些「結點」用指針掛接起來。
為了表示每個數據元素ai與其直接後繼元素ai+1之間的邏輯關系,對數據元素ai來說,除了存儲其本身的信息之外,還需存儲一個指示其直接後繼的信息(即直接後繼的存儲位置),這兩部分信息組成數據元素ai的存儲映像,稱為結點。
結點中包括兩個域,其中存儲數據元素信息的域稱為數據域;存儲直接後繼存儲位置的域稱為指針域。指針域中存儲的信息稱為指針。
慕課筆記
前面說過,對於鏈表數據是存儲在結點中的。結點包括兩部分,數據e和指針next,
說了這么多,舉個例子吧。下圖可以看做是一個鏈表,鏈表中共有三個結點,其中的1、2、3是數據e本身,而且箭頭是next指針。鏈表不可能是無窮無盡的,對於最後一個結點,其next指針指向null,即指向了空結點。
可以看出,鏈表不像靜態數組那樣,一下子new出來一片空間,而是需要多少,就生成多少個空間(結點),只需要把他們掛接起來。也不需要考慮空間是否大了或者小了。
同時,這也是鏈表的缺點:失去了隨機訪問的能力。這是因為:
在底層機制上,數組開辟的空間在內存里是連續分布的,直接去找這個索引對應的偏移,直接計算出相應元素的內存地址,用O(1)的復雜度把這個元素取出;而鏈表是靠next一層一層連接的,在計算機的底層,每一個結點所在的內存位置是不同的(每new一個結點,計算機就會隨機分配一個地址),只能靠next一點一點的去找到我們想要的元素
鏈表和數組對比:
數組最好用於索引有寓意的情況。例如,score[2],代表學號為2的,學生的成績;數組支持快速查詢。
鏈表不適合用於索引有語意的情況;鏈表是動態的。
何時使用二者,就要看我們的需求是適合動態的數據結構,還是適合靜態的數據結構。
簡單的編寫下鏈表這個數據結構
『柒』 使用雙鏈表存儲數據的優點是什麼
可以在當前結點前後隨意插入刪除,插入刪除結點時間短,不必預估存儲空間,沒有空間溢出,很方便進行向後繼和向前驅的雙向遍歷