前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言——双向链表

Go语言——双向链表

作者头像
传说之下的花儿
发布2023-04-16 14:50:16
3030
发布2023-04-16 14:50:16
举报

双向链表

代码语言:javascript
复制
import (
    "container/list"
    "fmt"
)

双向链表的结构:

[ nil | cur | next ]—><—[ prev | cur | next ]—><—[ prev | cur | nil ]

双向链表结构中元素在内存中不是紧邻空间, 而是每个元素中存放上一个元素和后一个元素的【地址】。

代码语言:javascript
复制
1.  第一个元素称为头(head)元素前连接(前置指针域)为nil。
2.  最后一个元素称为尾(foot)元素,后连接(后置指针域)为nil。

双向链表的优点:

代码语言:javascript
复制
1. 在执行新增元素或删除元素时效率高,获取任意一个元素,可以方便的在这个元素前后插入元素。
2. 充分利用内存空间,实现内存灵活管理
3. 可实现正序和逆序遍历
4. 头元素和尾元素 新增 或 删除 时效率较高

双向链表的缺点:

代码语言:javascript
复制
1. 链表增加了元素的指针域,空间开销比较大
2. 遍历时跳跃性查找内容大量数据遍历性能低

双向链表容器List: 在Go语言标准库的container/list包提供了双向链表List List的使用: 直接使用container/list包下的New()新建一个空的List

代码语言:javascript
复制
linkList := list.New()
linkList.PushBack("z")                        // 添加到最后面 z
linkList.PushFront("a")                       // 添加到最前面 a	z
linkList.InsertBefore("a-", linkList.Front()) // 向第一个元素后添加元素 a- a	z
linkList.InsertAfter("z+", linkList.Back())   // 向最后一个元后添加元素 a-	a	z	z+
fmt.Println(linkList.Back().Value)            // 取出最后一个元素的值
fmt.Println(linkList.Front().Value)           // 取出第一个元素的值
        linkList.MoveAfter(linkList.Front(),linkList.Back()) // 将某个元素移动指定元素后面 a	z	z+	a-
        linkList.MoveBefore(linkList.Back(),linkList.Front()) // 将某个元素移动指定元素前面 a-	a	z	z+
        linkList.MoveToBack(linkList.Front()) 	// 将某个元素移动到最后
        linkList.MoveToFront(linkList.Back()) 	// 将某个元素移动到最前面
        linkList.Remove(linkList.Front()) //删除某个元素
// 遍历所有值 a- a z z+
for head := linkList.Front(); head != nil; head = head.Next() {
    fmt.Println(head.Value)
}
// 遍历指定值 a
n := 2
var cur *list.Element
if n > 0 && n < linkList.Len() {
    if n == 1 {
        cur = linkList.Front()
    } else if n == linkList.Len() {
        cur = linkList.Back()
    } else {
        cur = linkList.Front()
        for i := 1; i < n; i++ {
            cur= cur.Next()
        }
    }
    fmt.Println(cur.Value)
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 双向链表
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档