图解算法之常见的数据结构

常见的数据结构(数据结构+算法=可执行程序)

  1. 认识数据结构

(1)目的:是加快程序的执行速度与减少内存占用的空间。

(2)定义:一种程序设计优化的方法论。

(3)计算机特点:处理速度快与存储容量大俩大特点。

(4)数据:指的是一种未经过处理的原始文字,数字,符号或者图形等,一般可以分成俩大类:一类为数值数据,另一类是字符数据。

(5)信息:利用大量数据,经过由系统的整理,分析,筛选处理而提炼处理的,且具有参考价格以及提供决策依据的文字,数字,符号或图表。

(6)数据结构的三大类型:第一是基本数据类型(int ,float,double,char, void),第二是结构化数据类型(字符串,数组,指针,列表,文件),第三是抽象数据类型(堆栈):比结构数据类型更高级,是指一个数学模型以及定义在此数学模型上的一组数学运算或操作

  1. 数据结构的种类:

(1).链表:

定义:是由许多相同数据类型的数据项按特定顺序排列而成的线性表。

特性:是各个数据项在计算机内存中的位置是不连续且随机存放的

优点:数据插入或者删除都相当方便,有新数据加入就向系统申请一块内存空间,而数据被删除后,就可以把这块内存空间还给系统,加入和删除都不需要移动大量的数据。

Eg:(可以把单向链表想象成火车,有多少人就挂多少节对应的车厢,当假日人多时,需要较多车厢时就可多挂些车厢,人少时就把车厢数量减少,十分具有弹性)

缺点:就是设计数据结构时较为麻烦,并且在查找数据时也无法像静态数据那样可随机读取数据,必须按序查找到该数据为止。

单向链表的组成:基本上是由数据字段和指针俩个元素所组成的,指针将会指向下一个元素在内存中的地址。

单向链表指针的注意:由于单向链表中所有节点都知道节点本身的下一个节点在哪里,但是对于前一个节点却没有办法知道,所以在单向链表的各种操作中,“链表头指针”就显得相当重要,只要存在链表头指针就可以遍历整个链表,进行加入和删除节点等操作。(注意:除非必要,否则不可以移动链表头指针)

(2).堆栈:(在系统内具体实现递归调用所出现的数据结构类型)

定义:是一群相同数据形态的组合。

特性:第一个:具有“后进先出”的特性(就像自助餐里的餐盘,先放到下面的盘中都是最晚拿起来用,后面放的盘中都是先拿起来用的)

第二个:只能从堆栈的顶端存取数据

堆栈的基本运算:

(3)队列:

定义:队列和堆栈都是有序列表,也属于抽象数据类型,所有加入与删除的动作都发生在不同的俩端。

特性:第一个:具有“先进先出”的特性(就好比乘坐火车时买票的队伍,先到的人自然可以优先买票买完票后就从前端离去准备乘坐火车,而队伍的后端有陆续有新的乘客加入,)

第二个:拥有俩种基本操作,即加入与删除,而且使用front与rear俩个指针分别指向队列的前端与末尾。

区别:堆栈只需一个顶端top,指针指向堆栈顶端;而队列则必须使用front和rear俩个市镇分别别指向队列前端和队列尾端。堆栈是“后进先出”,队列是“先进先出”。

队列的基本运算:

(4).树结构:是一种日常生活中应用相当广泛的非线性结构。(二叉空间分割树,四叉树,八叉树等)

树的基本概念:

定义:树是由一个或一个以上的节点组成的,树中存在一个特殊的节点,称为树根。除了树根,其余节点可分为n>=0个互斥的集合,即A为跟节点,BCDE为A的子节点。

树的基本要求:节点间虽然可以互相连接,但不能形成无出口的回路。

森林:是由n个互斥树的集合(n>=0)移去树根形成的。

树结构专有名词的简介:

(5)二叉树:是由有限节点所组成的集合,此集合可以为空集合,或者由一个树根及其左右俩个子树所组成,简单地说就是二叉树最多只能由俩个子节点,就是度数小于或者等于2.

(为什么由那么多叉树但是就是选择了二叉树呢,因为二叉树的衔接浪费率最低,所以为了改进村粗空间浪费的缺点,我们经常使用二叉树结构来取代其他树结构)

二叉树和一般树的区别:(1).树不可为空集合,但二叉树可以。

(2).树的度数为d>=0,但二叉树的节点度数为0<=d<=2.

(3).树的子树间没有次序关系,二叉树则有

(6).图论:

欧拉环:每个顶点的度数都是奇数。

欧拉链:只允许其中俩个顶点的度数是奇数,其余必须为偶数。

图的定义:

定义:图是由“顶点”和‘边“所组成的集合。

种类:一种是无向图,另一种是有向图。

无向图:是一种边没有方向的图,即具有相同边的俩个顶点没有次序关系。

有向图:是一种每一条边都可使用有序方向标进行指向。

(6)哈希表:

定义:哈希表是一种存储记录的连续内存,通过哈希函数的应用,可以快速存取和查找数据。

关于哈希函数的相关名词:

设计哈希函数时应该遵循以下原则:

  1. 避免碰撞和溢出的发生。
  2. 哈希函数不宜过于复杂,越容易计算越好。
  3. 尽量把文字的键值转换成数字的键值,以利于哈希函数的运算。
  4. 所设计的哈希函数计算得到的值尽量能均匀地分布在每一桶中,不要过于集中在某些桶中,这样既可以降低碰撞又能减少溢出。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值