算法模版:模拟数据结构之绪论

简介: 算法模版:模拟数据结构之绪论

前言


唤我沈七就好。

算下来应该是有两周没更新了。

是因为最近一直在研究数据结构这部分内容。

因为还是个大一菜狗之前还没有接触过数据结构这方面的知识,

所以一直在不断试错里寻找这方面的入门途径。

最后在《大话数据结构》和算法基础课双料辅助下,才勉强知道了点东西。

下面来分享一下最近我的学习成果。

(说到这儿安利一下《大话数据结构》这本书,对初学者超级友好。电子书有需要的同学找不到资源的话可以私信我。)


还是那句话。

蒟蒻因为实在是太弱了,肯定免不了错误百出。

欢迎批评指正,期待共同成长!


什么是数据结构?


这个问题在《大话数据结构》中笔者讲的非常清楚。


我们将 “数据结构” 分开来看。


先看数据


数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。


数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。

比如我们现在常用的搜索引擎,一般会有网页、MP3、图片、视频等分类。

我们这里说的数据,其实就是符号,而且这些符号必须具备两个前提:

① 可以输入到计算机中。

② 能被计算机程序处理。

对于整型、实型等数值类型,可以进行数值计算。

对于字符数据类型,就需要进行非数值的处理。

而声音、图像、视频等其实是可以通过编码的手段变成字符数据来处理的。


再看结构


结构:简单的理解就是关系,

比如分子结构,就是说组成分子的原子之间的排列方式。严格点说,结构是指各个组成部分相互搭配和排列的方式。


在现实世界中,不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系称为结构。


这时候我们就得到了数据结构的基本定义。


数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。


在计算机中,数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。数据元素之间存在的一种或多种特定关系。


具体是什么样的关系,这正是我们下面要讨论的问题。


一些术语


阅读之后的文章你需要了解以下术语。


1 .数据项:数据项是构成数据元素不可分割的最小单位。


2 .数据元素:数据的基本单位,一个数据元素可由若干数据项组成。


2c49023d5e4e45ebb850dae8790e2761.png


3 .数据对象:数据对象是具有相同性质数据元素的集合,是数据的子集

c36d74c84d1247f5b1995efa94a017a3.png


按照视点的不同,我们把数据结构分为逻辑结构和物理结构。


逻辑结构


逻辑结构:是指数据对象中数据元素之间的相互关系。

其实这也是我们今后最需要关注的问题。逻辑结构分为以下四种:


1 .集合结构:结构中的数据元素除了同属于一种类型外,别无其它关系。类似于数学里面的集合。

a4d5cf4b75dc4ec48a652a10ba950be8.png


2 .线性结构 :结构中的数据元素之间存在一对一的关系。

ba879122dc2f4c998eb6349ddfb71e97.png


3 .树形结构 :结构中的数据元素之间存在一对多的层次关系。

3.png


4 .图形结构:结构中的数据元素之间存在多对多的关系。

4.png


从之前的例子也可以看出,逻辑结构是针对具体问题的,是为了解决某个问题。在对问题理解的基础上,选择一个合适的数据结构表示数据元素之间的逻辑关系。"


储存结构


储存结构:是指数据的逻辑结构在计算机中的存储形式。

数据是数据元素的集合,那么根据物理结构的定义,实际上就是如何把数据元素存储到计算机的存储器中。

数据元素的存储结构形式有两种:顺序存储和链式存储。


1 . 顺序存储


顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。(如图1-5-5)

58f016312ce4452c883f0d23a48ea5a1.png

我们熟悉的数组其实就是顺序储存结构的代表。

当你告诉计算机,你要建立一个有9个整型数据的数组时,计算机就在内存中找了片空地,

按照一个整型所占位置的大小乘以9,开辟一段连续的空间。

于是第一个数组数据就放在第一个位置,第二个数据放在第二个,这样依次摆放。


2 .链式存储


如果就是这么简单和有规律,一切就好办了。可实际上,我们免不了要对这个数组内部的元素进行增删改查,使得整个结构时刻都处于变化中。

显然,面对这样时常要变化的结构,顺序存储是不科学的。那怎么办呢?链式存储的出现很好的解决了这一问题。


链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

数据元素的存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置。(这里未必一定要指针来记录存放数据元素的地址,也可以通过数组记录下一个元素所在的下标,这点我会在下一章模拟链表时详细讲解)。


1.png


显然,链式存储就灵活多了,数据存在哪里不重要,只要有一个指针存放了相应的地址就能找到它了。


完结散花


ok以上就是对数据结构绪论部分的讲解,接下来我会持续更新用数组来模拟常用的八大数据结构的算法模板。


2.png

                          (常用的八大数据结构)


如果博客中有遗漏、错误或者更加通俗易懂的讲解,欢迎小伙伴私信我,我会在后期再补充完善。


参考文献


[1]程杰.大话数据结构[M].北京:清华大学出版社 ,2011:5-14 .(程杰老师以后就是我偶像!!)


https://blog.csdn.net/weixin_46733442/article/details/


相关文章
|
6月前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
125 0
|
6天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
10 3
|
18天前
|
存储 缓存 算法
如何通过优化算法和代码结构来提升易语言程序的执行效率?
如何通过优化算法和代码结构来提升易语言程序的执行效率?
|
5月前
|
存储 算法
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
38 0
|
5月前
|
存储 算法 Linux
【数据结构和算法】---二叉树(1)--树概念及结构
【数据结构和算法】---二叉树(1)--树概念及结构
49 0
|
5月前
|
存储 算法
【数据结构和算法】--队列的特殊结构-循环队列
【数据结构和算法】--队列的特殊结构-循环队列
32 0
|
6月前
|
存储 监控 NoSQL
Redis处理大量数据主要依赖于其内存存储结构、高效的数据结构和算法,以及一系列的优化策略
【5月更文挑战第15天】Redis处理大量数据依赖内存存储、高效数据结构和优化策略。选择合适的数据结构、利用批量操作减少网络开销、控制批量大小、使用Redis Cluster进行分布式存储、优化内存使用及监控调优是关键。通过这些方法,Redis能有效处理大量数据并保持高性能。
95 1
|
3月前
|
机器学习/深度学习 算法 文件存储
【博士每天一篇文献-算法】 PNN网络启发的神经网络结构搜索算法Progressive neural architecture search
本文提出了一种名为渐进式神经架构搜索(Progressive Neural Architecture Search, PNAS)的方法,它使用顺序模型优化策略和替代模型来逐步搜索并优化卷积神经网络结构,从而提高了搜索效率并减少了训练成本。
52 9
|
3月前
|
存储 缓存 算法
深入解析B树:数据结构、存储结构与算法优势
深入解析B树:数据结构、存储结构与算法优势
|
4月前
|
存储 算法 Java
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
46 0