鍊錶是struct嗎?

時間 2021-05-30 04:49:18

1樓:悽臨雨

你題目裡那個東西,看上去是個陣列啊。

結構體struct是實現鍊錶的手段,但不是鍊錶

各種語言本身並不提供鍊錶,那是庫提供的鍊錶

2樓:

struct和鍊錶一點關係都沒,你完全可以用陣列來寫,用下標代替位址。他那個指標的意思就是有向圖,這個懂吧。你不指向就沒有意義,指標指標說的就是往他爹的位址指過去的針,具體怎麼寫無所謂的,struct用不用也就那樣。

3樓:Janyee

鍊錶的本質是將若干記憶體塊串聯在一起。在C語言裡面用struct表示乙個記憶體塊(圖中的小方塊),乙個記憶體塊分兩部分:資料區(item)和指標(next),資料區就是用來存資料的,比如int啊double啊什麼的,指標負責將乙個記憶體塊與另乙個記憶體塊鏈結,通過這種方式在記憶體的世界裡表達一張表:

鍊錶分兩種:單向鍊錶和雙向鍊錶;

下面用struct表示乙個雙向鍊錶:

struct

Node

;/* 往鍊錶的尾部新增新元素 */

void

push

(struct

Node

**head_ref

,int

new_data

)/* 在給定的節點前面插入新節點 */

void

insertBefore

(struct

Node

**head_ref

,struct

Node

*next_node

,int

new_data

)// 第二步:為新節點分配記憶體空間

struct

Node

*new_node=(

struct

Node*)

malloc

(sizeof

(struct

Node

));// 第三步:把接收的資料存進新分配的節點new_node

->data

=new_data

;// 第四步:變更節點結構

new_node

->prev

=next_node

->prev

;next_node

->prev

=new_node

;new_node

->next

=next_node;if

(new_node

->prev

!=NULL

)new_node

->prev

->next

=new_node

;else(*

head_ref)=

new_node;}

// 該函式用來列印鍊錶的每個節點

void

printList

(struct

Node

*node

)while

(last

!=NULL)}

void

main

()用 struct 構造節點是C語言的必要手段,它是記憶體塊在C語言語法的直接對映。

O 1 刪除鍊錶節點?

劉小核 如果鍊錶已經在那裡了,變不了。這樣的解法可行的。如果鍊錶可以設計,那使用乙個dummy head會幫你省不少邊緣情況。雙向鍊錶可以用乙個dummy node成環狀邏輯更加簡潔通暢。參考了intro to algo關於sentinel的部分 趙劼 重新發明了乙個奇怪版的HashedLinked...

鍊錶中的哨兵是怎麼乙個作用?

宇佐見蓮子 萌新正在自學演算法導論正好看見這個問題 1.A sentinel is a dummy object that allows us to simplify boundary conditions.哨兵是用來簡化邊界問題的虛設物件 2.As shown in Figure 10.4,thi...

C 中的鍊錶怎樣逆序輸出?

田航語 如果面試官只要求列印,一般不改動鍊錶結構為好,如果要求改變鍊錶的方向,則需要改變結構,再順序列印。方法 只逆序列印,不改變結構。利用棧的後進先出來實現逆序。struct ListNodeint valstruct ListNode nextListNode int xval x next N...