欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

golang 列表

程序员文章站 2022-05-29 21:02:12
...

1.介绍

  • 非连续的存储容器,由多个节点组成,节点通过一些变量记录彼此之间的关系

  • 实现方式 :链表

  • 注意

    这个最好先别看,因为暂时用不到,最好补充一下数据结构的链表再来看,就通了
    

2.实现

  • container / list 包来实现

  • 原理是双向链表

  • 结构体

    • element

      type Element struct {
      
          // The value stored with this element.
          Value interface{}
          // contains filtered or unexported fields
      }
      
    • list

      type List struct {
          // contains filtered or unexported fields
      }
      

3.节点操作

查询

  • 前一个

    // Next returns the next list element or nil. 
    func (e *Element) Next() *Element
    
    
  • 前一个

    // Prev returns the previous list element or nil. 
    func (e *Element) Prev() *Element
    

    4.链表操作

初始化

// var
	 var 变量名 list.List
// new()
	// func New() *List 
    变量名 := list.New()
	
  • 注意

    • 列表并没有具体元素类型的限制,因此,列表的元素可以是任意类型
    • 问题:给列表中放入了一个 interface{} 类型的值,取出值后,如果要将 interface{} 转换为其他类型将会发生宕机。

增加

  • 添加元素

    • 数据前插

      //  在 mark 点之后插入元素,mark 点由其他插入函数提供 
      func (l *List) InsertBefore(v interface{}, mark *Element) *Element
      
      // 插入失败
      	 mark  不是列表的元素
      
    • 数据后插

      //  在 mark 点之后插入元素,mark 点由其他插入函数提供 
      func (l *List) InsertAfter(v interface{}, mark *Element) *Element
      
      // 插入失败
      	 mark  不是列表的元素
      
    • 表尾添加

      func (l *List) PushFront(v interface{}) *Element
      
    • 表尾添加元素

      func (l *List) PushBack(v interface{}) *Element
      
  • 添加列表

    • 表尾添加

      func (l *List) PushBackList(other *List)
      
    • 表头添加

      func (l *List) PushFrontList(other *List)
      

删除

func (l *List) Remove(e *Element) interface{}

移动

  • 后移

    • 将 e 移动到 mark 后面
    func (l *List) MoveAfter(e, mark *Element)
    
    
    //以下情况不移动
        如果 e 或者 mark 不存在
        如果 e == mark
    
  • 后移

    • 将 e 移动到 mark 前面
    func (l *List) MoveBefore(e, mark *Element)
    
    //以下情况不移动
        如果 e 或者 mark 不存在
        如果 e == mark
    
  • 移动至列表最后面

    • 将 e 移动到 列表 最后面
    func (l *List) MoveToBack(e *Element)
    //以下情况不移动
        如果 e 不存在
    
  • 移动至列表最前面

    • 将 e 移动到 列表 最前面
    func (l *List) MoveToFront(e *Element)
    
    //以下情况不移动
        如果 e 不存在
    

查询

  • 查第一个节点

    func (l *List) Front() *Element
    	// 查询 最后一个元素 
    	// 没有元素返回 nil
    
  • 最后一个节点

    func (l *List) Back() *Element
    	// 查询 第一个元素 
    	// 没有元素返回 nil
    
  • 查询长度

    func (l *List) Len() int
    

清空

  • 回收链表、清空链表
func (l *List) Init() *List

遍历

for e := l.Front(); e != nil; e = e.Next() {
	// do something with e.Value
}

参看

1. http://docscn.studygolang.com/pkg/container/list/
相关标签: golang