数据结构与算法-表
我们将处理一般的型为:A1、A2、A3....AN的表,这个表的大小为N,不包含有任何一个元素大小为0的我们称为空表。 我们称为An+1为An的后继、 An-1为An的前驱。表的实现为简单的数组和链表两种。
一、简单数组
简单的数组我们需要给定的最大大小并且各个元素相间内存空间是连续的。数组在操作中:查找需要消耗O(1),但是在插入和删除的时候非常麻烦会将指定位置之前的数据移动操作最坏的情况为O(N)。
二、链表
为了避免删除和插入打开销。我们允许表可以不连续的存储。否则将会整个表或者部分整体移动。这就是我们所说的链表。链表是当前节点存在内容以及指向下一个节点的指针。结束节点的指向下一个节点的指针为nil,表明此节点是最后一个节点。我们约定表头在0位置我们称为header 节点。我们会根据此header节点进行链表的操作。
下面是链表操作实现代码
package link import ( "fmt" ) type Node struct { Element interface{} Next *Node } // 初始化链表 func MakeEmpty(header *Node) *Node { header = new(Node) return header } // 判断节点是否为空 func IsEmpty(header *Node) bool { return header.Next == nil } // 查找节点 func Find(element interface{}, header *Node) *Node { if !IsEmpty(header) { var p = header for p.Next != nil { if p.Element == element { return p } p = p.Next } return nil } else { return nil } } // 删除节点 func Delete(element interface{}, header *Node) { if IsEmpty(header) { fmt.Println("节点为空....") return } preNode := FindPrevious(element, header) if preNode != nil { p := header.Next for p != nil { if p.Element == element { preNode.Next = p.Next p = nil return } } } else { fmt.Println("node is nil") } } // 查找前一个节点 func FindPrevious(element interface{}, header *Node) *Node { if IsEmpty(header) { return nil } p := header.Next s := header fmt.Println(s) for p != nil { if p.Element == element { return s } s = p p = p.Next } return nil } // 插入一个节点 func Insert(element interface{}, header *Node, n *Node) { ntemp := new(Node) ntemp.Element = element ntemp.Next = nil n.Next = ntemp } // 获取大小 func Size(header *Node) int { if IsEmpty(header) { return 0 } else { p := header.Next var size int = 0 for p != nil { size++ p = p.Next } return size } } // 打印 func Print(header *Node) { if IsEmpty(header) { return } p := header.Next for p != nil { fmt.Println(p.Element) p = p.Next } }
package main import ( "fmt" "web/link" ) func main() { var n *link.Node node := link.MakeEmpty(n) fmt.Println(node) link.Insert(12, node, node) fmt.Println(link.IsEmpty(node)) fmt.Println(node.Next.Element) fmt.Println(link.FindPrevious(12, node)) link.Delete(12, node) fmt.Println(node) }
相关推荐
【数据结构与算法 - 链表】 C语言实现 实现模块化
数据结构与算法-链表(线性表的链表表示和实现) 定义线性表节点的结构.pdf
数据结构与算法--面向对象的C++设计 数据结构与算法--面向对象的C++设计 数据结构与算法--面向对象的C++设计 数据结构与算法--面向对象的C++设计 数据结构与算法--面向对象的C++设计 数据结构与算法--面向对象的C++...
Educoder题目:数据结构与算法 - 栈答案解析.md
头歌C++数据结构与算法 - 线性表
数据结构与算法 -电子教案啊。学生哥们,不要错过啊!
数据结构与算法的学习对于进行软件开发的专业程序员而言是非常关键的。虽然有许许多多关于数据结构与算法的书籍,但是这些书籍通常都是大学教材,而且是用在大学里经典讲授的Java语言或C++语言编写的。C#语言正在...
数据结构与算法--链表 很好的哦 欢迎下载
数据结构和算法思维导图
数据结构与算法-面向对象的C++设计模式 数据结构与算法-面向对象的C++设计模式
数据结构与算法-王桂林-2nd .pdf
数据结构与算法---很好 编程应该看下 数据结构与算法-----PPT版本
西安电子科技大学-数据结构与算法-期末知识点总结
数据结构与算法---C++版(Adam Drozdek)书中的源代码
数据结构与算法--Java语言描述,打好基础必备,提高自己的代码水平
数据结构与算法-python完整描述,数据结构与算法-python完整描述
数据结构与算法-JavaScript描述!!
原书曾被评为20世纪顶尖的30部计算机著作之一,作者Mark Allen Weiss在数据结构和算法分析方面卓有建树,他的数据结构和算法分析的著作尤其畅销,并受到广泛好评.已被世界500余所大学用作教材。 在本书中,作者更加...
中南大学数据结构与算法-课后习题参考答案(全部章节).pdf