双向链表的一种Go语言实现

package mainimport "fmt"//定义节点信息
type dNode struct {id intname stringpre *dNodenext *dNode
}//尾部插入节点
func dInsertTail(head, newNode *dNode) {//定义一个临时游走变量temp := headfor {if temp.next == nil{break //游走到链表尾部后跳出循环进行插入数据}temp = temp.next}//尾部添加相对简单temp.next = newNodenewNode.pre = temp
}//头部插入节点
func dInsertHead(head, newNode *dNode) {temp := head//先连接新节点的两条链到链表newNode.next = temp.nextnewNode.pre = temp//再拆旧连接到新连接上temp.next = newNodetemp.next.pre = newNode
}//顺序插入节点
func dInsertSort(head, newNode *dNode){temp := headfor {if temp.next == nil{newNode.next = temp.nextnewNode.pre = temptemp.next = newNode//temp.next.pre = newNodebreak} else if temp.next.id >= newNode.id {newNode.next = temp.nextnewNode.pre = temptemp.next = newNodetemp.next.pre = newNodebreak}temp = temp.next}
}//头部删除节点
func dDeleteHead(head *dNode){if head.next == nil{return}else {head.next = head.next.next}
}//尾部删除节点
func dDeleteTail(head *dNode){temp := headfor {if temp.next == nil {return} else if temp.next.next == nil{//删除节点temp.next = nilbreak}temp = temp.next}
}//删除指定节点
func dDeleteNode(head, node * dNode){temp := headfor {if temp.next == nil {return}else if temp.next.id == node.id {temp.next = temp.next.nexttemp.next.pre = tempbreak}temp = temp.next}
}//显示链表元素
func dList(head *dNode){temp := headif temp.next == nil {fmt.Println("链表为空")return}for {//注意这里,我所有的思路都是在链表的当前节点操作下一个节点fmt.Printf("%d  %s --> ", temp.next.id, temp.next.name)temp = temp.nextif temp.next == nil{break}}
}func main(){head := &dNode{}node1 := &dNode{id:   0,name: "number1",pre:  nil,next: nil,}node2 := &dNode{id:   1,name: "number2",pre:  nil,next: nil,}node3 := &dNode{id:   2,name: "number3",pre:  nil,next: nil,}node4 := &dNode{id:   3,name: "number4",pre:  nil,next: nil,}dInsertHead(head, node1)dInsertTail(head, node3)dInsertSort(head, node2)dInsertSort(head, node4)dDeleteHead(head)dDeleteTail(head)dDeleteNode(head, node2)dList(head)
}

数据结构--双向链表相关推荐

  1. 数据结构 — 双向链表

    目录 文章目录 目录 双向链表 双向链表结点的数据结构 双向链表的操作集合 应用示例 创建双向链表 清理双向链表 查询链表结点 更新链表结点的数据 插入链表结点 删除结点 打印链表数据 双向链表 双向 ...

  2. 数据结构 —— 双向链表(超详细图解 接口函数实现)

    系列文章目录 数据结构 -- 顺序表 数据结构 -- 单链表 数据结构 -- 双向链表 数据结构 -- 队列 数据结构 -- 栈 数据结构 -- 堆 数据结构 -- 二叉树 数据结构 -- 八大排序 ...

  3. python 双向链表_数据结构-双向链表(Python实现)

    数据结构在编程世界中一直是非常重要的一环,不管是开发还是算法,哪怕是单纯为了面试,数据结构都是必修课,今天我们介绍链表中的一种--双向链表的代码实现. 好了,话不多说直接上代码. 双向链表 首先,我们 ...

  4. python程序实现双向链表_数据结构-双向链表(Python实现)

    数据结构在编程世界中一直是非常重要的一环,不管是开发还是算法,哪怕是单纯为了面试,数据结构都是必修课,今天我们介绍链表中的一种--双向链表的代码实现. 好了,话不多说直接上代码. 双向链表 首先,我们 ...

  5. Linux c 算法与数据结构--双向链表

    链表是linux c中非常重要的数据结构,双向链表与单向链表的区别,是它每个节点有两个指针域,分别指向该节点的前一个节点与后一个节点: 而链表的操作主要是查询.插入.删除.遍历等,下面来看一个双向链表 ...

  6. C语言数据结构双向链表之温故而知新

    单向链表:http://blog.csdn.net/morixinguan/article/details/77756216 单向链表理解了,那双向就非常简单了,没什么好说的,看图: 双链表的引入是为 ...

  7. 数据结构 | 双向链表

    一.数据结构定义 /* 链表结点 */ typedef int ListType; typedef struct node {ListType data; // 存放整型数据struct node* ...

  8. Linux内核分析--内核中的数据结构双向链表续【转】

    在解释完内核中的链表基本知识以后,下面解释链表的重要接口操作: 1. 声明和初始化 实际上Linux只定义了链表节点,并没有专门定义链表头,那么一个链表结构是如何建立起来的呢?让我们来看看LIST_H ...

  9. 数据结构-双向链表的实现

    题目: 1 双向升序链表结构定义如下: 2 class Node { 3 4 private int value;// 保存节点的数据 5 6 private Node pre, next;// 保存 ...

最新文章

  1. JQuery变量数字相加的研究
  2. 7、mysql中的表结构操作
  3. oracle-11g-R2监听文件配置
  4. ★LeetCode(559)——N叉树的最大深度(JavaScript)
  5. cookie and session
  6. 常用的pcb设计软件有哪些
  7. 《深入浅出WPF》笔记——资源篇
  8. Win10最美SSH工具
  9. mysql创建视图步骤_MySQL创建视图的详细步骤
  10. Java 他们每人单独过桥的时间是_java实现 n人过桥问题
  11. layui在IE浏览器刷table刷新数据未更新
  12. 在线python编程网页-手把手教你用Python写一个在线网站,这真的很装逼!
  13. Google Analytics
  14. 如何减少城市拥堵?——虹科利用激光雷达技术实现智能交通
  15. 小米9 MIUI12.5 红米 K40s MIUI13.0.10 安装谷歌框架
  16. Autograd:你没有使用过的最佳的机器学习库?
  17. 沪江日语小D落户博客园~
  18. iOS开发-单元测试
  19. 桌面多出一个IE图标无法删除的解决办法
  20. 牧牛商学院,区块链技术在会计领域的应用

热门文章

  1. java try catch_Java中关于try、catch、finally中的细节分析
  2. 一流大学计算机专业都用什么教材,高校IT教材严重落后_网易科技报道
  3. 用PB从ORACLE导出DBF文件,PB导出规定格式DBF文件
  4. 案例 | 铅酸蓄电池精细维护
  5. 指针变量和引用变量的区别_指针Ⅰ--变量的定义
  6. 成功解决TypeError: __init__() got an unexpected keyword argument 'n_iterations'
  7. ML之Medicine:利用机器学习研发药物—《Machine Learning for Pharmaceutical Discovery and Synthesis Consortium》
  8. NLP之WE之CBOWSkip-Gram:CBOWSkip-Gram算法概念相关论文、原理配图、关键步骤之详细攻略
  9. TF之TF flags:TF flags(命令行解析)的简介、安装、使用方法之详细攻略
  10. 98%的人没解出的德国面试逻辑题(离散数学篇)!?