單鏈表 Go語言實現

2022-09-19 03:00:11 字數 3439 閱讀 3040

單鏈表;雙鏈表;環形鍊錶;

head -> a1 -> a2 -> a3

有了頭結點後,對在第乙個元素結點前插入結點和刪除第乙個結點,其操作與對其它結點的操作統一了。

優點:

缺點:

使用場景:

不清楚總體大小,且需要頻繁的插入或刪除操作;

type linknode struct

//data使用介面,可以為任意型別,範性;

next *linknode

}type llist linknode

實現介面

這裡使用介面,寫**的時候忘了用了,直接用結構體的方法了;

type llister inte***ce

, i int

)//插入v到第ige

delete

(index int

)inte***ce

//刪除第i+1(i從0開始)個,返回value

getlength()

int//統計節點個數(不包括頭節點)

search

(v inte***ce

)int

//查詢值為v的元素,返回所在位置

display()

}

func

(head *llist)

creat_head()

s.next = head.next

head.next = s

}}

尾插法:「正常排隊」

func

(head *llist)

creat_tail()

p.next = s

p = s

}}

這是有頭節點的情況下,也就是頭指標->頭節點->第乙個元素;

插入要明確插入規則,否則會亂掉;

在自己做練習時,沒有特別要求時,確定好插入標準時必要的;

插入位置index,就相當於那個間隙,所以index可以是0~5(5個元素);

當index==length時,相當於尾抽;length==0時相當於頭插;

func

(head *llist)

insert

(v inte***ce

, index int

) p := head

for i :=

0; i < index; i++

newnode :=

&linknode

newnode.next = p.next

p.next = newnode

}

刪除和插入類似,邊界判斷時稍有區別;

index=幾就產出間隔後面的元素,比如index=0就刪除a1,那麼index不能為5,也就是邊界條件:index < 0 || index >= length;

func

(head *llist)

delete

(index int

)inte***ce

p := head

for i :=

0; i < index; i++

deletenode := p.next

p.next = p.next.next

return deletenode.data

}

package main

import

("fmt"

)type linknode struct

next *linknode

}type llist = linknode

type llister inte***ce

, i int

)//插入v到第ige

delete

(index int

)inte***ce

//刪除第i+1(i從0開始)個,返回value

getlength()

int//統計節點個數(不包括頭節點)

search

(v inte***ce

)int

//查詢值為v的元素,返回所在位置

display()

}func

newllist()

*llist

}func

(head *llist)

creat_head()

s.next = head.next

head.next = s }}

func

(head *llist)

creat_tail()

p.next = s

p = s }}

func

(head *llist)

insert

(v inte***ce

, index int

) p := head

for i :=

0; i < index; i++

newnode :=

&linknode

newnode.next = p.next

p.next = newnode

}func

(head *llist)

delete

(index int

)inte***ce

p := head

for i :=

0; i < index; i++

deletenode := p.next

p.next = p.next.next

return deletenode.data

}func

(head *llist)

getlength()

intreturn length

}func

(head *llist)

search

(value int

)inte***ce

index++

p = p.next

}return fmt.

sprintf

("the value %v is not in the llist;"

, value)

}func

(head *llist)

display()

fmt.

println()

}func

main()

go語言實現單鏈表

package main import fmt 節點結構體 type node struct 鍊錶類 type list struct 建立節點 func createnode data int node 建立鍊錶 func newlist list,0,列印鍊錶 func l list displ...

c語言實現單鏈表

一 使用簡介 使用c語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...

C語言實現單鏈表

單鏈表可以說是基礎,有利於對指標的使用 結點 typedef int datatype typedef struct slistnode slistnode 實現的函式的宣告如下 slistnode buynode datatype x void printslist slistnode phead...