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

  • 相关阅读:
    天网管理系统
    NSCTF web200
    程序逻辑问题
    Once More
    Guess Next Session
    上传绕过
    加了料的报错注入
    C++ GET UTF-8网页编码转换
    Android学习笔记函数
    C++ 模拟虚拟键盘按键表
  • 原文地址:https://www.cnblogs.com/VingB2by/p/11087327.html
Copyright © 2011-2022 走看看