zoukankan      html  css  js  c++  java
  • 从零开始学Go之容器(四):列表

    链表内部的实现原理是双链表,可以高效地进行任意位置的元素插入和删除操作

    类似的还有堆heap和环列表ring,声明和初始化的方式是相同的,只是原理以及操作的函数不同,当理解了原理操作也是很简单的。

    声明与初始化:

    list 的初始化有两种方法:New 和声明。两种方法的初始化效果都是一致的。

    变量名 := list.New()

    var 变量名 list.List

    //通过 container/list 包的 New 方法初始化 list
    a := list.New()
    //通过声明初始化list
    var v list.List

     

    插入元素:

    头部插入:PushFront(值)

    尾部插入:PushBack(值)

    标记点前插入:InsertBefore(值, 标记点)

    标记点后插入:InsertAfter(值, 标记点)

    标记点是一个指针,通过其他函数(例如Front(),Back(),插入时的返回值等)获取

     l := list.New()
     // 尾部添加
     l.PushBack("fist")
     // 尾部添加
     l.PushBack("canon")
     // 头部添加
     l.PushFront(67)
     // 尾部添加后保存元素句柄
     element := l.PushBack("fist")
     // 修改元素句柄为67
     element = l.Front()
     // 在fist之前添加noon
     l.InsertBefore("noon", element)
     // 在fist之后添加high
     l.InsertAfter("high", element)

     

    删除元素:

    Remove(标记点)

    func main() {
     l := list.New()
     // 尾部添加
     l.PushBack("fist")
     // 尾部添加
     l.PushBack("canon")
     // 头部添加
     l.PushFront(67)
     // 尾部添加后保存元素句柄
     element := l.PushBack("fist")
     // 修改元素句柄为67
     element = l.Front()
     // 在fist之前添加noon
     l.InsertBefore("noon", element)
     // 在fist之后添加high
     l.InsertAfter("high", element)
     // 删除67
     l.Remove(element)
    }

     

    列表遍历:

    通过Front()和Back()可以获取列表的头和尾的指针

    func main() {
     l := list.New()
     l.PushBack("canon")
     l.PushFront(67)
     for i := l.Front(); i != nil; i = i.Next() {
      fmt.Println(i.Value)
     }
    }

    运行结果

    67

    canon

  • 相关阅读:
    【掉下巴】枪的制造现场
    不引入第三个变量交换两个变量的方法
    [转]科学计算经典算法
    [小练eVC]常用控件之微调按钮
    【收购】LSI 40亿美元并购Agere
    VB6.0不支持鼠标滚轮的解决办法
    一个简单的BP网络C语言程序
    [转]想成为嵌入式程序员应知道的0x10个基本问题
    [zt]关于左值"lvalue"和右值"rvalue"的一点理解
    [掉下巴]细数非洲大山的肘下亡魂
  • 原文地址:https://www.cnblogs.com/VingB2by/p/11087327.html
Copyright © 2011-2022 走看看