欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang使用切片實現(xiàn)單鏈表的示例代碼

 更新時間:2024年05月21日 09:44:45   作者:不會前端的小李  
單鏈表(Single?Linked?List)是鏈表數(shù)據(jù)結(jié)構(gòu)的一種實現(xiàn)方式,它包含一系列節(jié)點(Node),每個節(jié)點都包含一個數(shù)據(jù)域和一個指向下一個節(jié)點的指針,本文給大家介紹了Golang使用切片實現(xiàn)單鏈表的操作,需要的朋友可以參考下

單鏈表(Single Linked List)是鏈表數(shù)據(jù)結(jié)構(gòu)的一種實現(xiàn)方式,它包含一系列節(jié)點(Node),每個節(jié)點都包含一個數(shù)據(jù)域和一個指向下一個節(jié)點的指針。與數(shù)組相比,鏈表的一個主要優(yōu)點是它們可以動態(tài)地進(jìn)行擴展和收縮,因為它們的元素在內(nèi)存中不是連續(xù)存儲的。

通過定義結(jié)構(gòu)體實現(xiàn)單鏈表的操作,no為鏈表中節(jié)點的id,name為節(jié)點id對應(yīng)的內(nèi)容,next為下一個節(jié)點的信息

type HeroNode struct {
	no   int
	name string
	next *HeroNode 
}

InputNode方法,為鏈表添加節(jié)點。通過定義輔助節(jié)點,找到鏈表的最后一個節(jié)點,并將要添加的節(jié)點添加到找到的節(jié)點的下一個節(jié)點。

func InputNode(head *HeroNode, hero *HeroNode) {
	text := head
	for {
		if text.next == nil {
			break
		}
		text = text.next
	}
	text.next = hero
}

InputNode2方法,為鏈表順序添加節(jié)點。首先還是定義一個輔助節(jié)點,這次還另外定義一個flag為了判斷要插入的節(jié)點是否已經(jīng)存在。通過輔助節(jié)點進(jìn)行判斷插入的節(jié)點的id,并進(jìn)行插入對應(yīng)位置。這里要注意的是需要先將要插入的節(jié)點的下一個節(jié)點改為輔助節(jié)點的下一個節(jié)點,然后再將輔助節(jié)點的下一個節(jié)點換為要插入的節(jié)點。一旦先將text.next=hero,原本text后面的節(jié)點將會失去前置節(jié)點,那么hero節(jié)點將添加失敗

func InputNode2(head *HeroNode, hero *HeroNode) {
	text := head
	flag := true
	//讓插入的節(jié)點的no,和text的下一個節(jié)點的no進(jìn)行比較
	for {
		if text.next == nil {
			break
		} else if text.next.no > hero.no {
			//說明hero應(yīng)該插入到text后面
			break
		} else if text.next.no == hero.no {
			flag = false
			break
		}
		text = text.next
	}
	if !flag {
		fmt.Println("已經(jīng)存在", hero.no)
		return
	} else {
		hero.next = text.next
		text.next = hero
	}
}

DelectNode方法,刪除鏈表中的節(jié)點。通過定義輔助節(jié)點和flag進(jìn)行對要刪除節(jié)點的查詢,查詢后將text的下一個節(jié)點指向text下一個節(jié)點的下一個節(jié)點即可完成節(jié)點的刪除。

func DelectNode(hero *HeroNode, id int) {
	text := hero
	flag := false
	for {
		if text.next == nil {
			break
		} else if text.next.no == id {
			//說明找到了
			flag = true
			break
		}
		text = text.next
	}
	if flag {
		text.next = text.next.next
	} else {
		fmt.Println("刪除id不存在", id)
	}
}

ShowNode方法,實現(xiàn)顯示鏈表中的節(jié)點。先判斷鏈表是否為空鏈表然后進(jìn)行鏈表的打印輸出,直到鏈表為空。

func ShowNode(head *HeroNode) {
	//	創(chuàng)建一個輔助節(jié)點
	text := head
	//	判斷是否為空鏈表
	if text.next == nil {
		fmt.Println("空鏈表")
		return
	}
	for {
		fmt.Printf("[%d ,%s ]==>", text.next.no, text.next.name)
		text = text.next
		if text.next == nil {
			break
		}
	}
}

主函數(shù)。定義了一個根節(jié)點head,定義了5個要添加的節(jié)點,并將他們按照順序添加,之后打印顯示出整個鏈表,然后刪除掉節(jié)點id為"1"的數(shù)據(jù),并再次打印顯示鏈表。

func main() {
	//	創(chuàng)建根節(jié)點
	head := &HeroNode{}
	hero1 := &HeroNode{
		no:   1,
		name: "張明",
	}
	hero2 := &HeroNode{
		no:   2,
		name: "李華",
	}
	hero3 := &HeroNode{
		no:   3,
		name: "王五",
	}
	hero4 := &HeroNode{
		no:   4,
		name: "張三",
	}
	hero5 := &HeroNode{
		no:   5,
		name: "花花",
	}
	InputNode2(head, hero1)
	InputNode2(head, hero2)
	InputNode2(head, hero3)
	InputNode2(head, hero4)
	InputNode2(head, hero5)
	ShowNode(head)
	fmt.Println()
	DelectNode(head, 1)
	ShowNode(head)
}

整體代碼的實現(xiàn)

以上就是Golang使用切片實現(xiàn)單鏈表的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Golang切片單鏈表的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang切片連接成字符串的實現(xiàn)示例

    Golang切片連接成字符串的實現(xiàn)示例

    本文主要介紹了Golang切片連接成字符串的實現(xiàn)示例,可以使用Go語言中的內(nèi)置函數(shù)"String()"可以將字節(jié)切片轉(zhuǎn)換為字符串,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Go語言拼接URL路徑的三種方法

    Go語言拼接URL路徑的三種方法

    本文主要介紹了Go語言拼接URL路徑的三種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Golang處理parquet文件實戰(zhàn)指南

    Golang處理parquet文件實戰(zhàn)指南

    這篇文章主要給大家介紹了關(guān)于Golang處理parquet文件的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-03-03
  • go語言區(qū)塊鏈學(xué)習(xí)調(diào)用以太坊

    go語言區(qū)塊鏈學(xué)習(xí)調(diào)用以太坊

    這篇文章主要為大家介紹了go語言區(qū)塊鏈學(xué)習(xí)如何調(diào)用以太坊的示例實現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • 使用pprof分析golang內(nèi)存泄露問題及解決

    使用pprof分析golang內(nèi)存泄露問題及解決

    這篇文章主要介紹了使用pprof分析golang內(nèi)存泄露問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • golang的os包用法詳解

    golang的os包用法詳解

    Go語言的 os 包中提供了操作系統(tǒng)函數(shù)的接口,是一個比較重要的包。顧名思義,os 包的作用主要是在服務(wù)器上進(jìn)行系統(tǒng)的基本操作,本文將詳細(xì)介紹了golang的os包用法,需要的朋友可以參考下
    2023-05-05
  • 詳解Go語言中rand(隨機數(shù))包的使用

    詳解Go語言中rand(隨機數(shù))包的使用

    在Golang中,有兩個包提供了rand,分別為math/rand和crypto/rand對應(yīng)兩種應(yīng)用場景。math/rand包實現(xiàn)了偽隨機數(shù)生成器。也就是生成 整形和浮點型;crypto/rand包實現(xiàn)了用于加解密的更安全的隨機數(shù)生成器。本文就來和大家詳細(xì)講講math/rand的使用
    2022-08-08
  • GO實現(xiàn)基于命令行的簡單IPS程序代碼

    GO實現(xiàn)基于命令行的簡單IPS程序代碼

    本文介紹了入侵防御系統(tǒng)IPS的工作原理和實現(xiàn),IPS通過網(wǎng)絡(luò)流量監(jiān)控和實時響應(yīng),防止網(wǎng)絡(luò)攻擊,通過使用Go語言實現(xiàn)一個簡單的IPS示例程序,展示了如何獲取本地IP地址和探測網(wǎng)絡(luò)中其他設(shè)備的IP地址,包括如何定義和加載規(guī)則文件,以及如何檢測IP對相應(yīng)端口的訪問是否達(dá)到規(guī)定閾值
    2024-12-12
  • golang解析網(wǎng)頁利器goquery的使用方法

    golang解析網(wǎng)頁利器goquery的使用方法

    這篇文章主要給大家介紹了關(guān)于golang解析網(wǎng)頁利器goquery的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Go語言中sync.Cond使用詳解

    Go語言中sync.Cond使用詳解

    本文主要介紹了Go語言中sync.Cond使用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論