GoLang学习笔记(二十六)list的声明、遍历及常用方法

list是列表,一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此之间的关系。list有多种实现方法,如单向链表、双向链表等。
Go语言中的list的实现原理是双向链表,list能高效地进行任意位置的元素插入和删除操作。
Golang的标准库提供了高级的数据结构List,具体在包container/list。
container/list包里主要有两个数据结构类型:“Element”、“List”;
Element类型代表双向链表中的一个元素,相当于C++里面的“iterator”
List代表一个双向链表。List零值为一个空的、可用的链表。
Element有Prev和Next方法用于得到前一个或者下一个element,element可以直接调用value属性;

 

声明list
格式:变量名:= list.New()
      var 变量名 list.List
list与切片、Map不一样,没有具体元素类型的限制。
在java、c++等里面,list的成员必须是同一个数据类型,但是Go语言中却允许list里插入任意类型成员。
建议使用New()实现list。

 

list的声明及添加数据

为了等下的代码能更直观的运行,先写两个print的函数

func printList(i string, l list.List) {
	fmt.Println(i)
	fmt.Printf("类型:%T, 值:%v, 长度:%d \n", l, l, l.Len())
}

func printIterateList(l list.List){
	for e:=l.Front();e!=nil; e= e.Next(){
		fmt.Printf("%T ,%v \t", e.Value, e.Value)
	}
}

用第一种方式声明及添加数据

func testListNew() {
	var list1 list.List
	printList("测试声明list", list1)
	//测试声明list
	// 类型:list.List, 值:{{<nil> <nil> <nil> <nil>} 0}, 长度:0

	//添加数据
	list1.PushFront(true)
	list1.PushFront("aaaa")
	list1.PushFront(1.23456)
	list1.PushFront(123)
	//尾部添加数据
	list1.PushBack("一二三")
	printList("添加数据以后list", list1)
	//添加数据以后list
	// 类型:list.List, 值:{{0xc000062360 0xc000062390 <nil> <nil>} 5}, 长度:5

	printIterateList(list1)
	//int ,123 	float64 ,1.23456 	string ,aaaa 	bool ,true 	string ,一二三
}

第二种方式声明及其他相关函数

func testList1(){
	list1 := list.New()
	//用list.New()声明的list,返回的是一个指针,所以必须加上一个*号
	printList("",*list1)
	list1.PushBack("bbbbb")
	list1.PushFront(1)
	element1 := list1.PushBack("ccccc")
	//在element1后面插入数据
	list1.InsertAfter("aaaaa",element1)
	//在element1前面插入数据
	list1.InsertBefore(50,element1)
	printIterateList(*list1)

	fmt.Println()
	//移除element1
	list1.Remove(element1)
	printIterateList(*list1)

	list2 := list.New()
	list2.PushFront("1234")
	list2.PushBack("5678")

	fmt.Println()
	//在list1前面添加list2列表
	list1.PushFrontList(list2)
	printIterateList(*list1)

	list3 := list.New()
	list3.PushFront("abcd")
	list3.PushBack("efgh")

	fmt.Println()
	//在lisi1后面添加list3、
	list1.PushBackList(list3)
	printIterateList(*list1)
}

 

list的遍历:

先建一个变量

var list2 list.List

然后开始遍历该list

//遍历list,顺序遍历
func iterateList1() {
	for e := list2.Front(); e != nil; e = e.Next() {
		fmt.Println(e.Value)
	}
}

//遍历list,逆序遍历
func iterateList2() {
	for e := list2.Back(); e != nil; e = e.Prev() {
		fmt.Println(e.Value)
	}
}

 

list是值类型:

用一个函数来证明list是值类型。

func testList2(l list.List){
	l.PushFront("一")
	l.PushBack("三")
	printIterateList(l)

	fmt.Println(l.Len())
}


//说明list是值类型
func main() {
	printIterateList(list2)
	fmt.Println()
	testList2(list2)
	list2.PushFront("二")
	printIterateList(list2)
	fmt.Println()
	testList2(list2)
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
GoLang学习笔记主要包括以下几个方面: 1. 语法规则:Go语言要求按照语法规则编写代码,例如变量声明、函数定义、控制结构等。如果程序中违反了语法规则,编译器会报错。 2. 注释:Go语言中的注释有两种形式,分别是行注释和块注释。行注释使用`//`开头,块注释使用`/*`开头,`*/`结尾。注释可以提高代码的可读性。 3. 规范代码的使用:包括正确的缩进和空白、注释风格、运算符两边加空格等。同时,Go语言的代码风格推荐使用行注释进行注释整个方法和语句。 4. 常用数据结构:如数组、切片、字符串、映射(map)等。可以使用for range遍历这些数据结构。 5. 循环结构:Go语言支持常见的循环结构,如for循环、while循环等。 6. 函数:Go语言中的函数使用`func`关键字定义,可以有参数和返回值。函数可以提高代码的重用性。 7. 指针:Go语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针可以实现动态内存分配和引用类型。 8. 并发编程:Go语言提供了goroutine和channel两个并发编程的基本单位,可以方便地实现多线程和高并发程序。 9. 标准库:Go语言提供了丰富的标准库,涵盖了网络编程、文件操作、加密解密等多个领域,可以帮助开发者快速实现各种功能。 10. 错误处理:Go语言中的错误处理使用`defer`和`panic`两个关键字实现,可以有效地处理程序运行过程中出现的错误。 通过以上内容的学习,可以掌握Go语言的基本语法和编程思想,为进一步学习和应用Go语言打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang学习笔记](https://blog.csdn.net/weixin_52310067/article/details/129467041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [golang学习笔记](https://blog.csdn.net/qq_44336275/article/details/111143767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值