数据结构与算法-表
我们将处理一般的型为: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语言或C++语言编写的。C#语言正在...
链表
以下是基于标题“数据结构与算法-java”及描述中提到的“数据结构与算法分析_Java语言描述高清版(第2版)1.pdf”所涵盖的一些关键知识点: 1. **数据结构**: - **数组**:最基础的数据结构,存储固定大小的同类型...
"数据结构与算法学习指南" 本书《Hello 算法》是为了帮助读者学习数据结构与算法而编写的,作者靳宇栋(Krahets)认为刷题虽然是学习算法的一种方法,但对于基础不足的同学来说,可能会感到困扰和挫折。因此,本书...
PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 PTA-数据结构与算法题目集 ...
数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。C语言因其高效、底层特性,常被用于实现数据结构和算法,使得程序更接近硬件,性能更优。本资源"数据结构与算法分析--C语言描述"是针对数据...
Educoder题目:数据结构与算法 - 线性表答案解析.md
《数据结构与算法---C++版》是由Adam Drozdek编著的一本经典教材,它深入浅出地讲解了数据结构和算法的核心概念,并通过C++语言进行了实现。这本书不仅适合初学者,也对有一定经验的程序员有很高的参考价值。在...
本资料包“数据结构与算法-C语言版本”聚焦于通过源码实例和答案解析,帮助学习者深入理解数据结构的原理和算法的应用。 1. **数据结构**: - **线性结构**:如数组和链表,是数据元素间存在一对一关系的结构。...
这个“数据结构与算法-----PPT版本”很可能包含了徐旭松教授或专家精心制作的一系列教学材料,旨在帮助学习者深入理解这些核心概念。 数据结构是关于如何在计算机中组织和存储数据的方式,它直接影响到程序的效率和...
数据结构与算法-哈工大 (13).pdf
数据结构+算法=程序!数据结构作为程序的灵魂,其重要性不言而喻!本文档以C语言为基础描述了数据结构。其中不乏一些经典的算法!不仅可以学习数据结构和算法,还可以巩固你的语言基础!
Educoder题目:数据结构与算法 - 栈答案解析.md
数据结构与算法》以基本数据结构和算法设计策略为知识单元,系统地介绍了数据结构的知识与应用、计算机算法的设计与分析方法,主要内容包括线性表、树、图和广义表、算法设计策略以及查找与排序算法等。《数据结构与...
C 数据结构与算法c语言 数据结构与算法c语言 数据结构与算法c语言 数据结构与算法c语言 数据结构与算法c语言
国外经典教材 数据结构与算法----面向对象的C++模式 全书分16章,1概论,2算法分析 3渐进表示法 4基本数据结构,5数据类型与抽象 6栈与队列 7有序线性表与排序表 8 散列,哈希表与分散表 9树 10查找树, 11堆和优先...
这是C#版的数据结构与算法的代码实现,包括:顺序表,单链表,双链表;顺序栈,链栈;顺序队列,链队列;顺序串;用数组进行特殊矩阵的存储,稀疏矩阵的存储;顺序存储二叉树,链式存储二叉树,哈夫曼树;多重链表...