Go中list用法

package main

import (
	"container/list"
	"fmt"
)


//列表是一种非连续的存储容器,由多个节点组成,节点通过一些变量记录彼此之间的关系,列表有多种实现方法,如单链表、双链表等。

//列表使用 container/list 包来实现,内部的实现原理是双链表,列表能够高效地进行任意位置的元素插入和删除操作。



//初始化列表

//list的初始化:New()和var关键字声明都可以,两种初始化效果一致
//列表与切片和 map 不同的是,列表并没有具体元素类型的限制,
// 因此,列表的元素可以是任意类型,这既带来了便利,也引来一些问题,
// 例如给列表中放入了一个 interface{} 类型的值,取出值后,如果要将 interface{} 转换为其他类型将会发生宕机


/*
列表插入元素的方法:
					方  法												功  能
InsertAfter(v interface {}, mark * Element) * Element	在 mark 点之后插入元素,mark 点由其他插入函数提供
InsertBefore(v interface {}, mark * Element) *Element	在 mark 点之前插入元素,mark 点由其他插入函数提供
PushBackList(other *List)                           	添加 other 列表元素到尾部
PushFrontList(other *List)								添加 other 列表元素到头部
 */
func main()  {
	ListAdd()

	ListDelete()

	ListFor()
}

func ListAdd()  {
	//1。通过container/list包的new()函数初始化list
	list1:=list.New()

	//2。通过var关键字初始化list
	//var list2  list.List

	//将first字符串插入到列表尾部,此时列表是空的,插入后只有一个元素
	list1.PushBack("first")
	//将10放入列表,此时,列表中已经存在first元素,10这个元素将放在first的前面
	list1.PushFront(10)
	//列表插入函数的返回值会提供一个 *list.Element 结构
	fmt.Println(list1)   //&{{0xc0000721e0 0xc0000721b0 <nil> <nil>} 2}

}
//从列表中删除元素:

//列表插入函数的返回值会提供一个 *list.Element 结构,这个结构记录着列表元素的值以及与其他节点之间的关系等信息,
// 从列表中删除元素时,需要用到这个结构进行快速删除。
func ListDelete()  {
	//创建列表实例
	l:=list.New()
	//尾部添加
	l.PushBack("back")
	//头部添加
	l.PushFront(20)
	//将fist插入到列表尾部,并将这个元素的内部结构保存到element变量中
	element:=l.PushBack("fist")
	//在element的之面插入high字符串
	l.InsertAfter("high",element)
	//在element位置之前添加noon
	l.InsertBefore("noon",element)

	fmt.Println(l) //&{{0xc0000662a0 0xc000066300 <nil> <nil>} 5}

	//移除element变量对应的元素
	l.Remove(element)

	fmt.Println(l) //&{{0xc0000722a0 0xc000072300 <nil> <nil>} 4}
}

//遍历列表
//遍历双链表需要配合 Front() 函数获取头元素,遍历时只要元素不为空就可以继续进行,每一次遍历都会调用元素的 Next() 函数

func ListFor()  {

	//创建列表实例
	l:=list.New()
	//尾部添加
	l.PushBack("back")
	//头部添加
	l.PushFront(20)
	//将fist插入到列表尾部,并将这个元素的内部结构保存到element变量中
	element:=l.PushBack("fist")
	//在element的之面插入high字符串
	l.InsertAfter("high",element)
	//在element位置之前添加noon
	l.InsertBefore("noon",element)
	//i:=l.Front()初始赋值:获取头元素,直到i=nil(空值或零值)时结束循环,否则继续打印下一个元素
	for i:=l.Front();i!=nil ;i=i.Next()  {
		fmt.Println(i.Value)
		/*
		20
		back
		noon
		fist
		high
		*/
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值