單鏈表建立的兩種方式

2021-09-28 19:34:51 字數 2035 閱讀 9044

建立單鏈表

單鏈表就是一種特殊的結構體組合而成的資料結構,關於單鏈表的建立方式有很多種,大同小異。在這裡我們將詳細的介紹一下頭插法建立鍊錶和尾插法建立鍊錶。

如上所示單鏈表就是由可能不連續的資料所組合而成的資料結構。 其中每個資料分為兩部分,一部分是資料儲存的位置,稱為資料域(data),另外指標所儲存的地方,稱為指標域。

typedef struct nodelnode,*linkedlist
頭插法建立鍊錶

思路:從乙個空表開始,重複讀入資料,生成新結點,將所讀入資料儲存到新結點的資料域中,然後在將新結點插入到當前鍊錶的表頭結點之後。

**:

linkedlist create_list

(linkedlist head)

return head;

}

//核心**

node->data = i;

//為新結點的資料域賦值

node->next = head->next;

head->next = node;

//將頭指標指向新建立的結點

**:假設將a->b依次插入

文解

建立第乙個結點:第一次從堆中開闢一塊記憶體空間給node,將head與第乙個結點連線起來,之前說過head指向的是null;

插入第乙個結點時,將頭指標指向的next賦給新建立結點的next,這樣插入第乙個結點的next就是null;

接著將資料域node位址賦給head->next,也就是說head->next指向的是新建立的結點,然後新建立結點node->next指向null

接下來再將頭結點的next所指向的位址賦為新建立node的位址,也就是head->next = node,此時最後乙個結點,也就是第一次建立的結點的指標域為 null

尾插法建立鍊錶

思路:將新結點插到當前單鏈表的表尾上,增加尾指標,使之指向當前單鏈表的表尾

**

linklist creat_list

(linklist head)

end->next =

null

;}

//核心**

end->next = node;

end = node;

**:假設依次a->b插入,end為尾指標

文解:

此時end 就是 head, head 就是 end。 end->next 也自然指向的是 null

建立第二個結點: 第乙個結點,end 和 head 共用一塊記憶體空間。現在從堆中心開闢出一塊記憶體給 node,將 node 的資料域賦值後,此時 end 中儲存的位址是 head 的位址;

此時,end->next 的位址是新建立的 node 的位址,而此時 end 的位址還是 head 的位址;因此 end = node ,這條作用就是將新建的結點 node 的位址賦給尾結點 end。 此時 end 的位址不再是頭結點,而是新建的結點 node。

結語:你懂了嗎?

關於單鏈表的兩種建立方式

第一種方式是將新建立的單鏈表結點加在煉表頭,這種方式要注意的是最先輸入的值是這個鍊錶尾的值 在 new linknode2 new linknode 1 第二種方式是將新建立的單鏈表結點加在鍊錶尾 include include typedef int datatype typedef struct...

資料結構 單鏈表的兩種實現方式

單鏈表的兩種實現方式 帶頭結點和不帶頭結點 需要注意的地方 1 帶頭結點和不帶頭結點在實現插入和刪除操作時的區別 2 封裝的方便之處 見insertpriornode lnode p,elemtype e 能夠使 更簡潔,更加清晰 3 帶頭結點方式中,頭結點不裝入資料,並且看作成第0個結點。不帶頭結...

iOS中建立單例的兩種方式

剛剛開始做ios開發的時候,不知道怎麼建立單例,在網上搜的也大多數都不太全,所以總結了一下建立單例的兩種方式 首先在.h檔案中宣告類方法 1 instancetype sharedutils 然後在.m檔案中實現它,實現的方法有兩種 第一種,在建立乙個物件時先判斷在程式中有沒有建立過這個物件 1 s...