数据结构--双向链表
双向链表的一种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)
}
数据结构--双向链表相关推荐
- 数据结构 — 双向链表
目录 文章目录 目录 双向链表 双向链表结点的数据结构 双向链表的操作集合 应用示例 创建双向链表 清理双向链表 查询链表结点 更新链表结点的数据 插入链表结点 删除结点 打印链表数据 双向链表 双向 ...
- 数据结构 —— 双向链表(超详细图解 接口函数实现)
系列文章目录 数据结构 -- 顺序表 数据结构 -- 单链表 数据结构 -- 双向链表 数据结构 -- 队列 数据结构 -- 栈 数据结构 -- 堆 数据结构 -- 二叉树 数据结构 -- 八大排序 ...
- python 双向链表_数据结构-双向链表(Python实现)
数据结构在编程世界中一直是非常重要的一环,不管是开发还是算法,哪怕是单纯为了面试,数据结构都是必修课,今天我们介绍链表中的一种--双向链表的代码实现. 好了,话不多说直接上代码. 双向链表 首先,我们 ...
- python程序实现双向链表_数据结构-双向链表(Python实现)
数据结构在编程世界中一直是非常重要的一环,不管是开发还是算法,哪怕是单纯为了面试,数据结构都是必修课,今天我们介绍链表中的一种--双向链表的代码实现. 好了,话不多说直接上代码. 双向链表 首先,我们 ...
- Linux c 算法与数据结构--双向链表
链表是linux c中非常重要的数据结构,双向链表与单向链表的区别,是它每个节点有两个指针域,分别指向该节点的前一个节点与后一个节点: 而链表的操作主要是查询.插入.删除.遍历等,下面来看一个双向链表 ...
- C语言数据结构双向链表之温故而知新
单向链表:http://blog.csdn.net/morixinguan/article/details/77756216 单向链表理解了,那双向就非常简单了,没什么好说的,看图: 双链表的引入是为 ...
- 数据结构 | 双向链表
一.数据结构定义 /* 链表结点 */ typedef int ListType; typedef struct node {ListType data; // 存放整型数据struct node* ...
- Linux内核分析--内核中的数据结构双向链表续【转】
在解释完内核中的链表基本知识以后,下面解释链表的重要接口操作: 1. 声明和初始化 实际上Linux只定义了链表节点,并没有专门定义链表头,那么一个链表结构是如何建立起来的呢?让我们来看看LIST_H ...
- 数据结构-双向链表的实现
题目: 1 双向升序链表结构定义如下: 2 class Node { 3 4 private int value;// 保存节点的数据 5 6 private Node pre, next;// 保存 ...
最新文章
- JQuery变量数字相加的研究
- 7、mysql中的表结构操作
- oracle-11g-R2监听文件配置
- ★LeetCode(559)——N叉树的最大深度(JavaScript)
- cookie and session
- 常用的pcb设计软件有哪些
- 《深入浅出WPF》笔记——资源篇
- Win10最美SSH工具
- mysql创建视图步骤_MySQL创建视图的详细步骤
- Java 他们每人单独过桥的时间是_java实现 n人过桥问题
- layui在IE浏览器刷table刷新数据未更新
- 在线python编程网页-手把手教你用Python写一个在线网站,这真的很装逼!
- Google Analytics
- 如何减少城市拥堵?——虹科利用激光雷达技术实现智能交通
- 小米9 MIUI12.5 红米 K40s MIUI13.0.10 安装谷歌框架
- Autograd:你没有使用过的最佳的机器学习库?
- 沪江日语小D落户博客园~
- iOS开发-单元测试
- 桌面多出一个IE图标无法删除的解决办法
- 牧牛商学院,区块链技术在会计领域的应用
热门文章
- java try catch_Java中关于try、catch、finally中的细节分析
- 一流大学计算机专业都用什么教材,高校IT教材严重落后_网易科技报道
- 用PB从ORACLE导出DBF文件,PB导出规定格式DBF文件
- 案例 | 铅酸蓄电池精细维护
- 指针变量和引用变量的区别_指针Ⅰ--变量的定义
- 成功解决TypeError: __init__() got an unexpected keyword argument 'n_iterations'
- ML之Medicine:利用机器学习研发药物—《Machine Learning for Pharmaceutical Discovery and Synthesis Consortium》
- NLP之WE之CBOWSkip-Gram:CBOWSkip-Gram算法概念相关论文、原理配图、关键步骤之详细攻略
- TF之TF flags:TF flags(命令行解析)的简介、安装、使用方法之详细攻略
- 98%的人没解出的德国面试逻辑题(离散数学篇)!?