C語言靜態鍊錶和動態鍊錶

2022-10-04 01:54:07 字數 1660 閱讀 5475

1. 靜態鍊錶

結構體中的成員可以是各種型別的指標變數,當乙個結構體中有乙個或多個成員的基型別是本結構體型別時,則稱這種結構體為「引用自身的結構體」。如:

struct link

a;p是乙個可以指向 struct link 型別變數的指標成員。因此,a.p = &a 是合法的表示式,由此構成的儲存結構如圖1所示。

圖1 引用自身的結構體

例1 一程式設計客棧個nckxdrkf簡單的鍊錶

#include

struct node

;typedef struct node nodetype;

int main()

printf("\n");

return 0;

}struct_list

struct_list

以上程式中所定義的結構體型別 nodetype 共有兩個成員:成員 data 是整型;成員 next 是指標型別,其基型別是 nodetype 型別。

a、b、c 是 nodetype 結構體型別變數,h 和 p 是指向 nodetype 結構體型別的指標變數。執行程式後,形成如圖2所示的儲存結構體:指標 h 中存放變數 a 的位址,變數 a 的成員 a.next 中存放變數 b 的位址……,最後乙個變數 c 的成員 c.next 置為 '\0'(null)。這樣就把同一型別的結構體變數 a、b、c 「鏈結」到一起,形成所謂的「鍊錶」,變數 a、b、c 稱為鍊錶的節點。

在此例中,鏈結到一起的每個節點(結構體變數 a、b、c)都是通過定義,由系統在記憶體中開闢了固定的、不一定連續的儲存單元。在程式執行過程中,不可能人為的再產生新的儲存單元,也不能認為的使已開闢的儲存單元消失。這種鍊錶成為「靜態鍊錶」。

圖2 鍊錶儲存結構示意圖

2.動態鍊錶的概念

到目前為止,凡是遇到處理「批量」資料時,我們都是利用陣列來儲存。定義陣列必須(顯式的或隱含的)指明元素的個數,程式設計客棧從而也就限定了乙個陣列中存放的資料量。在實際應用中,乙個程式在每次執行時要處理的資料的數目通常並不確定。如果陣列定義的小了,就沒有足夠的空間存放資料,定義大了又浪費儲存空間。

對於這種情況,如果能在程式執行過程中,根據需要隨時開闢儲存空間,不需要時再隨時釋放,就能比較合理的使用儲存空間。c 語言的動態儲存分配提供了這種可能性。每次動態分配的儲存單元,其位址不一定是連續的,而所需處理的批量資料往往是乙個整體,各資料之間存在著接序關係。鍊錶的每個節點中,除了要有存放資料本身的資料域外,至少還需要有乙個指標域,用它來存放下乙個節點元素的位址,以便通過這些指標把各節點連線起來(如圖3)。由於鍊錶每個儲存單元都由動態儲存分配獲得,故稱這樣的鍊錶為「動態鍊錶」。

需要強調的是:動態鍊錶中,每個節點沒有自己的名字,只能靠指標維繫節點之間的接序關係。一旦某個節點的指標「斷開」,後續節點就再也無法找尋。

圖3 帶有頭結點的單向鍊錶

每個鍊錶都用乙個「頭指標」變數來指向鍊錶的開始,如圖3中的 head。也就是說,在 head 中存放了鍊錶的第乙個節點的位址。在這個鍊錶中,我們設定了乙個「頭結點」,這個節點的資料域中不存放資料(根據需要也可以不設頭結點)。鍊錶最後乙個節點的指標域不存放位址,置為 '\0'(null) 值,標誌著鍊錶的結束。上述鍊錶的每個節點都只有乙個指標域,每個指標域存放著下乙個節點的位址。因此,這種鍊錶只能從當前節點找到後繼節點,故稱為「單向鍊錶」。

本文標題: c語言靜態鍊錶和動態鍊錶

本文位址: /ruanjian/c/149562.html

靜態鍊錶和動態鍊錶

鍊錶分為兩種 動態和靜態 動態的結合相關函式能動態開闢記憶體,特點就是不會浪費記憶體單元 靜態鍊錶則沒有這個優點。靜態鍊錶和動態鍊錶是線性表鏈式儲存結構的兩種不同的表示方式。靜態鍊錶的初始長度一般是固定的,在做插入和刪除操作時不需要移動元素,僅需修改指標。動態鍊錶是相對於靜態鍊錶而言的,一般地,在描...

使用C語言描述靜態鍊錶和動態鍊錶

靜態鍊錶和動態鍊錶是線性表鏈式儲存結構的兩種不同的表示方式。靜態鍊錶的初始長度一般是固定的,在做插入和刪除操作時不需要移動元素,僅需修改指標,故仍具有鏈式儲存結構的主要優點。動態鍊錶是相對於靜態鍊錶而言的,一般地,在描述線性表的鏈式儲存結構時如果沒有特別說明即預設描述的是動態鍊錶。下面給出它們的簡單...

資料結構 靜態鍊錶和動態鍊錶

通過指標將資料連線起來 整個資料結構中,很重要的一點是,初始化和銷毀對應,插入和刪除對應,有malloc new 有free delete 一定要對應。鍊錶的各項操作,最關鍵的,其實就是找到被操作元素的上乙個元素,插入位置的上乙個元素,或者要刪除元素的上乙個元素,這都是非常關鍵的,同時也要注意,鍊錶...