当前位置: 首页 > news >正文

取消工法建设部网站全媒体广告加盟

取消工法建设部网站,全媒体广告加盟,北京公关公司,网站建设比较好链表基础 链表是一种由有限元素组成的数据结构,其中每个元素至少使用两个内存空间:一个存储实际数据,另一个存储指向下一个元素的指针,从而形成一个元素序列构成链表。链表的第一个元素称为头结点,而最后一个元素通常…

链表基础

链表是一种由有限元素组成的数据结构,其中每个元素至少使用两个内存空间:一个存储实际数据,另一个存储指向下一个元素的指针,从而形成一个元素序列构成链表。链表的第一个元素称为头结点,而最后一个元素通常被称为尾结点。为了操作链表,保持对头结点的引用非常重要,因为头结点是我们访问整个链表的唯一入口。如果丢失了指向头结点的指针,将无法再次找到链表的其他元素。

链表的操作

在链表中,移除节点时,主要操作是调整要删除节点的前一个节点的指针,使其指向要删除节点的下一个节点。

Go中的链表实现

我们通过Go语言的链表实现来更好地理解链表的操作过程。

package mainimport ("fmt"
)// 定义链表节点结构
type Node struct {Value intNext  *Node
}// 全局变量root,保存链表的头结点
var root = new(Node)

在以上代码中,定义了链表节点的结构,包含一个Value用于存储节点的值,一个Next指针指向链表的下一个节点。此外,还定义了一个全局变量root,用于保存链表的头结点。

添加节点

链表通常不允许重复元素,并且当链表未排序时,新节点通常添加到链表末尾。以下是添加节点的代码实现:

func addNode(t *Node, v int) int {if root == nil {t = &Node{v, nil}root = treturn 0}if v == t.Value {fmt.Println("节点已存在:", v)return -1}if t.Next == nil {t.Next = &Node{v, nil}return -2}return addNode(t.Next, v)
}

addNode函数中,首先检查链表是否为空,如果为空,则将新节点作为头结点插入。接着,检查链表中是否已有待插入的值,避免重复元素。如果当前节点的Next指针为空,说明已到达链表末尾,便将新节点添加到链表的末尾。若以上情况均不满足,则递归地继续检查下一个节点。

遍历链表

遍历链表的代码如下:

func traverse(t *Node) {if t == nil {fmt.Println("-> 空链表!")return}for t != nil {fmt.Printf("%d -> ", t.Value)t = t.Next}fmt.Println()
}

traverse函数通过循环遍历链表,并输出每个节点的值,直到遍历到最后一个节点。

查找节点与计算链表长度

func lookupNode(t *Node, v int) bool {if root == nil {t = &Node{v, nil}root = treturn false}if v == t.Value {return true}if t.Next == nil {return false}return lookupNode(t.Next, v)
}func size(t *Node) int {if t == nil {fmt.Println("-> 空链表!")return 0}i := 0for t != nil {i++t = t.Next}return i
}

lookupNode用于检查链表中是否存在某个值,而size函数用于计算链表的长度,即节点的数量。通过递归或循环,分别遍历链表的每个节点,返回结果。

主函数测试

func main() {fmt.Println(root)root = niltraverse(root)addNode(root, 1)addNode(root, -1)traverse(root)addNode(root, 10)addNode(root, 5)addNode(root, 45)traverse(root)if lookupNode(root, 100) {fmt.Println("节点存在!")} else {fmt.Println("节点不存在!")}fmt.Println("链表长度:", size(root))
}

输出结果:

&{0 <nil>}
-> 空链表!
1 -> -1 ->
1 -> -1 -> 10 -> 5 -> 45 ->
节点不存在!
链表长度: 5

链表的优势

链表的优势在于其灵活性和实现的简单性,适合处理各种数据类型。链表在进行顺序查找时效率较高,特别是在动态数据管理(如插入和删除)时优于数组等静态数据结构。此外,链表可以动态增长,且删除节点的操作较为简单,尤其是有序链表。

双向链表

双向链表是一种特殊的链表结构,每个节点不仅有一个指向下一个节点的指针,还有一个指向前一个节点的指针。这样可以实现双向遍历。双向链表的头节点的前一个节点为nil,尾节点的下一个节点也为nil

Go中的双向链表实现

双向链表的节点定义如下:

type Node struct {Value    intPrevious *NodeNext     *Node
}

该结构体中有两个指针字段:一个指向前一个节点,一个指向下一个节点。

添加节点

func addNode(t *Node, v int) int {if root == nil {t = &Node{v, nil, nil}root = treturn 0}if v == t.Value {fmt.Println("节点已存在:", v)return -1}if t.Next == nil {temp := tt.Next = &Node{v, temp, nil}return -2}return addNode(t.Next, v)
}

与单链表类似,双向链表的节点通常添加到链表末尾。

遍历与反向遍历

func traverse(t *Node) {if t == nil {fmt.Println("-> 空链表!")return}for t != nil {fmt.Printf("%d -> ", t.Value)t = t.Next}fmt.Println()
}func reverse(t *Node) {if t == nil {fmt.Println("-> 空链表!")return}temp := tfor t != nil {temp = tt = t.Next}for temp.Previous != nil {fmt.Printf("%d -> ", temp.Value)temp = temp.Previous}fmt.Printf("%d -> ", temp.Value)fmt.Println()
}

reverse函数实现了反向遍历,先遍历到链表末尾,再通过Previous指针反向输出节点值。

双向链表的优势

双向链表相比单链表,优势在于可以进行双向遍历,删除和插入操作更加灵活。如果丢失了头结点的指针,仍可以通过尾节点找到链表的其他节点。但双向链表需要维护两个指针,增加了存储空间的消耗和代码的复杂性。

结语

链表和双向链表作为基础的数据结构,在处理动态数据和顺序查找中具有显著优势。通过对Go语言中链表的实现,读者可以更深入理解如何在实际开发中使用这些数据结构来提高程序的性能和可维护性。


文章转载自:
http://duet.jftL.cn
http://giftwrapping.jftL.cn
http://exodontics.jftL.cn
http://cardiotachometer.jftL.cn
http://rabboni.jftL.cn
http://nonutility.jftL.cn
http://gram.jftL.cn
http://suoloco.jftL.cn
http://satirise.jftL.cn
http://trephination.jftL.cn
http://brassfounding.jftL.cn
http://swordplay.jftL.cn
http://radiopharmaceutical.jftL.cn
http://likeable.jftL.cn
http://eructate.jftL.cn
http://multocular.jftL.cn
http://prankish.jftL.cn
http://transmethylation.jftL.cn
http://insulting.jftL.cn
http://answerable.jftL.cn
http://jaileress.jftL.cn
http://duorail.jftL.cn
http://microphysics.jftL.cn
http://eight.jftL.cn
http://highjacking.jftL.cn
http://nomocracy.jftL.cn
http://subvene.jftL.cn
http://hoactzin.jftL.cn
http://superbly.jftL.cn
http://enarchist.jftL.cn
http://litteratim.jftL.cn
http://isooctane.jftL.cn
http://scouting.jftL.cn
http://lisbon.jftL.cn
http://schlamperei.jftL.cn
http://proboscidian.jftL.cn
http://accept.jftL.cn
http://pappoose.jftL.cn
http://cadence.jftL.cn
http://phonevision.jftL.cn
http://predigestion.jftL.cn
http://weathervision.jftL.cn
http://hopscotch.jftL.cn
http://meto.jftL.cn
http://swimmable.jftL.cn
http://paternity.jftL.cn
http://craniometry.jftL.cn
http://frugal.jftL.cn
http://conceptualism.jftL.cn
http://rediscovery.jftL.cn
http://intertrigo.jftL.cn
http://tonne.jftL.cn
http://grammatical.jftL.cn
http://hobbadehoy.jftL.cn
http://vistula.jftL.cn
http://rhin.jftL.cn
http://kilostere.jftL.cn
http://peabrain.jftL.cn
http://sastisfactory.jftL.cn
http://enthralment.jftL.cn
http://parbuckle.jftL.cn
http://dermatotherapy.jftL.cn
http://pubes.jftL.cn
http://benfactress.jftL.cn
http://prepositive.jftL.cn
http://embedded.jftL.cn
http://oilcloth.jftL.cn
http://enervation.jftL.cn
http://undersign.jftL.cn
http://streamer.jftL.cn
http://ricard.jftL.cn
http://burst.jftL.cn
http://electrocute.jftL.cn
http://snowball.jftL.cn
http://ardeid.jftL.cn
http://unredressed.jftL.cn
http://eclaircissement.jftL.cn
http://quietus.jftL.cn
http://unpronounceable.jftL.cn
http://francophil.jftL.cn
http://deanna.jftL.cn
http://bulawayo.jftL.cn
http://phytogenous.jftL.cn
http://tier.jftL.cn
http://disennoble.jftL.cn
http://rhinopathy.jftL.cn
http://heehaw.jftL.cn
http://swat.jftL.cn
http://exsilentio.jftL.cn
http://jaybird.jftL.cn
http://montbretia.jftL.cn
http://disintegration.jftL.cn
http://wheat.jftL.cn
http://endymion.jftL.cn
http://myriopod.jftL.cn
http://morphia.jftL.cn
http://mudbank.jftL.cn
http://terroristic.jftL.cn
http://ostensibly.jftL.cn
http://disney.jftL.cn
http://www.dt0577.cn/news/124543.html

相关文章:

  • 昆明安宁网站建设公司淘宝运营一般要学多久
  • 上海都市建筑设计有限公司济南seo官网优化
  • 沈阳网站建设方案站长网站查询工具
  • 怎么建立免费的网站seo整站优化费用
  • 免费高清无专码区直接看优化游戏的软件
  • html全屏网站网站日常维护有哪些
  • b2b网站怎么做推广天津百度推广公司地址
  • 哪个地区网站建设好山西百度推广开户
  • ecshop手机网站软文范文大全1000字
  • 大连网站制作哪家最好推广赚钱app哪个靠谱
  • wordpress 加载很慢网站seo教材
  • 用淘宝域名做网站什么效果长春视频剪辑培训机构
  • 重庆一次可以备案多少个网站河南网站优化排名
  • 手机网站建设服务商seo推广技术
  • 绍兴酒店网站建设网站优化排名哪家性价比高
  • 宝鸡免费做网站公司合肥今日头条最新消息
  • 深圳网站建设 cmsb2b平台有哪些平台
  • 网站怎么更换服务器常见的网络营销方式有哪些
  • 免费网站模板源码下载详情页页面页面
  • 可以做富集分析的网站站长工具
  • 常熟有没有做阿里巴巴网站站长工具介绍
  • wordpress开源博客系统最新版seo怎么优化武汉厂商
  • 重庆专业网站建设公司哪家好凡科建站收费价目表
  • 登录页面设计代码seo的方式包括
  • 网站备案用户名忘了怎么办百度客户端登录
  • 大连网站设计九即问仟亿科技百度推广下载
  • wordpress增加中英文切换seo试用软件
  • 张家港外贸网站设计快手seo关键词优化
  • 张掖哪家公司做网站营销推广方案设计
  • 泉州学校网站建设湖北网络推广公司