数据结构复习1

数据结构三要素

逻辑结构

人话:算法讨论中,所说的树,图,栈和队列等,这种不讨论底层实现的,就是逻辑结构。

线性结构

人话:元素与元素之间,只存在一对一的关系,不会分叉,就是线性结构,如线性表。线性表又可以分为一般线性表,受限线性表(栈和队列)和线性表推广(数组)。从我的角度来看,我常用的就是数组Array,栈Stack和队列Queue。

非线性结构

人话:元素与元素之间,存在一对多的关系,简单理解为有人同时与多个小姐姐聊天,也可能有多个人跟多个异性聊天。非线性结构比如常见集合,树,图等。从我的角度来看,我常用的是集合Set,树Tree和图Graph。

小提问

map呢,list(c++中叫vector)呢,堆呢?你是不是在瞎哔哔?

以上所说,都是基于上述的结构实现的,比如堆,就我而言,手写堆就用的数组实现,当然也可以通过二叉树去实现。其余同理。

物理结构

人话:咋存储的,也称为存储结构。就是它不关系你到底能干啥了,它现在关系你到底咋实现的了。比如经典的用栈实现队列和用数组实现队列。从调用的角度来看,全是队列,我用就完事了;从物理结构来看,一个是用栈实现的,一个是用数组实现的。

顺序结构:逻辑上相邻,物理上也相邻。

链式结构:逻辑上相邻,物理上随意。

索引结构:存储基本信息时,同时存储索引,相当于一个快捷入口。

散列结构:根据元素值和散列函数计算存储的地址,检索很快,但是散列函数设计差的话,需要疯狂解决冲突。

数据的运算

人话:分为咋用的(逻辑结构层面),咋实现的(物理结构层面)。比如经典的算法讨论,你会在跟室友讨论算法的时候说这个咋解决这个问题吗,不都是再说用什么结构,有了大致思路后再去编码。这不就是先搂住逻辑结构,抓住顶层了,再去实现底层的物理结构。

算法

人话:有限的指令序列,解决特定问题的一种描述。算法五个基本特性分别是有穷性(有限指令),确定性(这一步干啥得确定),可行性(可以实现),输入和输出。

想要一个算法尽可能优秀,需要做到:

正确性(你得正确解决问题),健壮性(对于非法输入你得处理),可读性(不要疯狂加goto等),高效率与低存储(也就是我们常说的相同时间复杂度下,空间消耗尽可能少)。

至于什么叫时间复杂度,空间复杂度,这些不会自己真别考了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值