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...