数据结构与算法-表
我们将处理一般的型为: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" 可以提炼出以下知识点: 1. **时间复杂度和空间复杂度分析**: - 最好、最坏、平均和均摊时间复杂度的概念,例如O(1)代表常数时间复杂度,适合散列列表的...
这份“数据结构与算法-PPT课件”提供了丰富的学习材料,涵盖了多个关键主题。 首先,我们要了解数据结构。数据结构是存储和组织数据的方式,它能影响到数据的访问效率和操作复杂度。常见的数据结构有数组、链表、栈...
链表
以下是基于标题“数据结构与算法-java”及描述中提到的“数据结构与算法分析_Java语言描述高清版(第2版)1.pdf”所涵盖的一些关键知识点: 1. **数据结构**: - **数组**:最基础的数据结构,存储固定大小的同类型...
"数据结构与算法学习指南" 本书《Hello 算法》是为了帮助读者学习数据结构与算法而编写的,作者靳宇栋(Krahets)认为刷题虽然是学习算法的一种方法,但对于基础不足的同学来说,可能会感到困扰和挫折。因此,本书...
"西安电子科技大学-数据结构与算法-期末知识点总结" 本资源总结了数据结构与算法的知识点,涵盖了基本概念、线性表、栈与队列、树与二叉树、图、查找算法、排序算法等方面的内容。 一、基本概念 * 数据元素是数据...
PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 ...
Educoder题目:数据结构与算法 - 线性表答案解析.md
本书标题为《数据结构与算法——面向对象的C++设计》,其内容主要围绕数据结构和算法在C++中的面向对象设计模式展开。本书不仅介绍了数据结构与算法的基本概念,还着重强调了面向对象编程范式(Object-Oriented ...
数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。C语言因其高效、底层特性,常被用于实现数据结构和算法,使得程序更接近硬件,性能更优。本资源"数据结构与算法分析--C语言描述"是针对数据...
《数据结构与算法---C++版》是由Adam Drozdek编著的一本经典教材,它深入浅出地讲解了数据结构和算法的核心概念,并通过C++语言进行了实现。这本书不仅适合初学者,也对有一定经验的程序员有很高的参考价值。在...
本资料包“数据结构与算法-C语言版本”聚焦于通过源码实例和答案解析,帮助学习者深入理解数据结构的原理和算法的应用。 1. **数据结构**: - **线性结构**:如数组和链表,是数据元素间存在一对一关系的结构。...
数据结构与算法-哈工大 (13).pdf
数据结构+算法=程序!数据结构作为程序的灵魂,其重要性不言而喻!本文档以C语言为基础描述了数据结构。其中不乏一些经典的算法!不仅可以学习数据结构和算法,还可以巩固你的语言基础!
Educoder题目:数据结构与算法 - 栈答案解析.md
数据结构与算法-面向对象的C++设计模式.pdf你设计大型软件必备的基础。
java数据结构和算法--第二版
国外经典教材 数据结构与算法----面向对象的C++模式 全书分16章,1概论,2算法分析 3渐进表示法 4基本数据结构,5数据类型与抽象 6栈与队列 7有序线性表与排序表 8 散列,哈希表与分散表 9树 10查找树, 11堆和优先...
数据结构与算法分析--java语言描述.pdf