数据结构和算法-单链表的添加和显示|学习笔记

简介: 快速学习数据结构和算法-单链表的添加和显示

开发者学堂课程【Go 语言核心编程 - 数据结构和算法:数据结构和算法-单链表的添加和显示】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/627/detail/9837


数据结构和算法-单链表的添加和显示


 内容简介:

一、单链表的应用实例

二、代码实现

三、代码说明

四、代码运行及修改


一、单链表的应用实例

使用带 head 的单向链表实现-水浒英雄排行榜管理,即完成对英雄人物的增删改查(注意:删除和修改查找可以考虑学员独立完成)。

第一种方式说明:

在添加英雄时,直接添加到链表的尾部。

示意图如下:

image.png

 

二、代码实现

对第一种方式代码实现:

首先打开 VSCode ,在 chapter20 中新建一个文件夹为 singlelink ,再在其内新建一个文件称为 main.go ,在其内输入以下代码:

package main

import (

fmt

)

//定义一个 HeroNode

type HeroNode struct {

no       int

Name     string

nickname string

Next     *HeroNode  //这个表示指向下一个结点

}

//给链表插入一个结点

//编写第一种插入方式,在单链表的最后加入

func InsertHeroNode(head *HeroNode, newHeroNode *HeroNode) {

//思路

//1.先控制该链表的最后这个结点

//2.创建一个辅助结点[跑龙套,帮忙]

temp := head

for {

if temp.next == nil {

break

}

temp = temp.next //让 temp 不断的指向下一个结点

}

//3.将 newHeroNode 加入到链表的最后

temp.next = newHeroNode

}

//显示链表的所有结点信息

func ListHeroNode(head *HeroNode) {

//1.创建一个辅助结点[跑龙套,帮忙]

temp := head

//先判断该链表是不是一个空的链表

if temp.next == nil {

fmt.Println(空空如也。。。。)

}

//2.遍历这个链表

for {

fmt.Printf([%d, %s, %s]==>, temp.next.no,

temp.next.name, temp.next.nickname)

//判断是否链表后

temp = temp.next

if temp.next == nil {

break

}

}

}

func main() {

/1.先创建一个头结点,

head := &HeroNode{}

//2.创建一个新的HeroNode

hero1 := &HeroNode{

no : 1,

name : 宋江,

nickname : “及时雨”,

} 

//3.加入

InsertHeroNode(head,hero1)

//4.显示

ListHeroNode(head)

}

 

三、代码说明

说明①:在往队列里加数组时,是后面加的,刚才那个数组来实现队列还是挺麻烦的,但是如果用链表来实现,会觉得非常轻松。

说明②:头结点是一个至关重要的点,一旦丢失整条链表都没有用,头结点不能乱动,只要乱动就麻烦。

那既然给了头结点,还得给一个新结点,参考下图:

image.png

现在又创建了一个新的,这个叫 HeroNode ,他的名字叫宋江,为了方便区分把框底色设置成为了蓝色,现在要想办法让它们关联起来

说明③:今天如果自己去写这些代码,会出现很多空指针的错误,这句话就等价于 temp 的 next 指向 HeroNode (参考下图),这时候可以看到,头结点还是头结点,但是它已经指向宋江,假设又加了一个叫卢俊义的人,试试此逻辑是不是能走动,问一个问题,宋江刚刚加进去的时候,它这个结点是不是也是 nil ?

因为没有动过它,所以就是 nil ,卢俊刚刚出来的时候,他的下一个结点其实也是 nil ,根据刚才逻辑,让 temp 指向 head ,然后开始定位 temp ,下一个是不是空的呢?下一个不是空的,于是 temp 移动到宋江,它一看宋江也是空的,因为宋江是最后一个,所以就退出来,然后让 temp 的 next 指向卢俊义,让宋江的这条直线向卢俊义指完了之后,卢俊义也加入到这个大家庭,但是卢俊义的 next 还是空的,所以下一个再加的时候就在卢俊义后面加,以此类推就好,这个逻辑要非常清晰,不然会出现问题。

具体参考下图:

image.png

四、代码运行及修改

(1)运行初代码

将以上代码保存并运行,运行结果如下:

D:\goproject\src\go_code\chapter20\circelqueue>cd ..

D:\goproject\src\go_code\chapter20>cd singlelink

D:\goproject\src\go_code\chapter20\singlelink>go run main.go

[1 , 宋江 , 及时雨1==>

(2)对代码进行添加修改处理

从运行结果来看,只有一个人,再添加一个人试试是否运行正确,在以上代码的两处相应位置进行添加,

如下: 

//2.创建一个新的 HeroNode

hero1 := &HeroNode{

no : 1,

name : 宋江,

nickname : “及时雨”,

}

Hero2 := &HeroNode{

no : 2,

name : 卢俊义,

nickname : “玉麒麟”,

}

还有一处是在最后的位置添加,如下:

//3.加入

InsertHeroNode(head,hero1)

InsertHeroNode(head,hero2)

//4.显示

ListHeroNode(head)

(3)运行修改后的代码

添加完成之后,保存并运行代码,运行结果如下:

D:\goproject\src\go_code\chapter20\singlelink>go run main.go

[1 , 宋江 , 及时雨1= =>[2 , 卢俊义, 玉麒麟]= =>

相关文章
|
13天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
24 1
|
16天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
58 4
|
22天前
|
存储 算法 Perl
数据结构实验之链表
本实验旨在掌握线性表中元素的前驱、后续概念及链表的建立、插入、删除等算法,并分析时间复杂度,理解链表特点。实验内容包括循环链表应用(约瑟夫回环问题)、删除单链表中重复节点及双向循环链表的设计与实现。通过编程实践,加深对链表数据结构的理解和应用能力。
51 4
|
14天前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
14天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
14天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
36 5
|
13天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
37 1
|
22天前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
40 0
|
8天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
14天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。