最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

單鏈表(Single Linked List)是鏈表數(shù)據(jù)結(jié)構(gòu)的一種實(shí)現(xiàn)方式,它包含一系列節(jié)點(diǎn)(Node),每個(gè)節(jié)點(diǎn)都包含一個(gè)數(shù)據(jù)域和一個(gè)指向下一個(gè)節(jié)點(diǎn)的指針。與數(shù)組相比,鏈表的一個(gè)主要優(yōu)點(diǎn)是它們可以動(dòng)態(tài)地進(jìn)行擴(kuò)展和收縮,因?yàn)樗鼈兊脑卦趦?nèi)存中不是連續(xù)存儲(chǔ)的。

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

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

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

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

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

func InputNode2(head *HeroNode, hero *HeroNode) {
	text := head
	flag := true
	//讓插入的節(jié)點(diǎn)的no,和text的下一個(gè)節(jié)點(diǎn)的no進(jìn)行比較
	for {
		if text.next == nil {
			break
		} else if text.next.no > hero.no {
			//說(shuō)明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é)點(diǎn)。通過(guò)定義輔助節(jié)點(diǎn)和flag進(jìn)行對(duì)要?jiǎng)h除節(jié)點(diǎn)的查詢(xún),查詢(xún)后將text的下一個(gè)節(jié)點(diǎn)指向text下一個(gè)節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)即可完成節(jié)點(diǎn)的刪除。

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

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

func ShowNode(head *HeroNode) {
	//	創(chuàng)建一個(gè)輔助節(jié)點(diǎn)
	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ù)。定義了一個(gè)根節(jié)點(diǎn)head,定義了5個(gè)要添加的節(jié)點(diǎn),并將他們按照順序添加,之后打印顯示出整個(gè)鏈表,然后刪除掉節(jié)點(diǎn)id為"1"的數(shù)據(jù),并再次打印顯示鏈表。

func main() {
	//	創(chuàng)建根節(jié)點(diǎn)
	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)
}

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

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

相關(guān)文章

  • 詳解Golang中select的使用與源碼分析

    詳解Golang中select的使用與源碼分析

    select?是?Go?提供的?IO?多路復(fù)用機(jī)制,可以用多個(gè)?case?同時(shí)監(jiān)聽(tīng)多個(gè)?channl?的讀寫(xiě)狀態(tài)。本文將從源碼角度帶大家了解一下select的使用,需要的可以參考一下
    2022-12-12
  • Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解

    Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解

    這篇文章主要為大家介紹了Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • golang中單機(jī)鎖的具體實(shí)現(xiàn)詳解

    golang中單機(jī)鎖的具體實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了golang中單機(jī)鎖的具體實(shí)現(xiàn)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Go Module依賴(lài)管理的實(shí)現(xiàn)

    Go Module依賴(lài)管理的實(shí)現(xiàn)

    Go Module是Go語(yǔ)言的官方依賴(lài)管理解決方案,其提供了一種簡(jiǎn)單、可靠的方式來(lái)管理項(xiàng)目的依賴(lài)關(guān)系,本文主要介紹了Go Module依賴(lài)管理的實(shí)現(xiàn),感興趣的可以了解一下
    2024-06-06
  • 詳解Golang如何優(yōu)雅接入多個(gè)遠(yuǎn)程配置中心

    詳解Golang如何優(yōu)雅接入多個(gè)遠(yuǎn)程配置中心

    這篇文章主要為大家為大家介紹了Golang如何優(yōu)雅接入多個(gè)遠(yuǎn)程配置中心詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • go時(shí)間/時(shí)間戳操作大全(小結(jié))

    go時(shí)間/時(shí)間戳操作大全(小結(jié))

    這篇文章主要介紹了go時(shí)間/時(shí)間戳操作大全,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Golang中四種gRPC模式舉例詳解

    Golang中四種gRPC模式舉例詳解

    gRPC是一種進(jìn)程間通信技術(shù),在微服務(wù)和云原生領(lǐng)域都有著廣泛的應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于Golang中四種gRPC模式的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Golang操作MySql數(shù)據(jù)庫(kù)的完整步驟記錄

    Golang操作MySql數(shù)據(jù)庫(kù)的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于Golang操作MySql數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Go?函數(shù)選項(xiàng)模式

    Go?函數(shù)選項(xiàng)模式

    在?Go?語(yǔ)言中,函數(shù)選項(xiàng)模式(Functional?Options?Pattern)?是一種優(yōu)雅的設(shè)計(jì)模式,用于處理可選配置參數(shù),特別是當(dāng)配置項(xiàng)較多或可能變化時(shí),它避免了冗長(zhǎng)的構(gòu)造函數(shù)參數(shù)列表,提高了代碼的可讀性和可擴(kuò)展性,本文介紹Go函數(shù)選項(xiàng)模式,感興趣的朋友一起看看吧
    2025-08-08
  • 關(guān)于go-zero服務(wù)自動(dòng)收集問(wèn)題分析

    關(guān)于go-zero服務(wù)自動(dòng)收集問(wèn)題分析

    這篇文章主要介紹了關(guān)于go-zero服務(wù)自動(dòng)收集問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12

最新評(píng)論

兴业县| 澄江县| 五寨县| 友谊县| 阜新市| 宝鸡市| 长春市| 衡阳市| 正蓝旗| 潮安县| 平安县| 莱芜市| 德安县| 邵阳县| 手游| 太仆寺旗| 辽中县| 和林格尔县| 印江| 囊谦县| 双城市| 凤凰县| 夏邑县| 宜都市| 乌兰察布市| 南康市| 瓦房店市| 万年县| 清河县| 定安县| 延寿县| 康定县| 资阳市| 崇文区| 莱州市| 平安县| 灯塔市| 永修县| 洪湖市| 来宾市| 东至县|