数据结构的开端

写在前面

  学习每个新知识的时候我们不妨可以先勾勒出大体的框架,再去填充每个部分。这是我在课堂或者生活中所学习到的,绘画,建筑,开发项目,写书。这都是先勾勒框架,接着逐步填充。这段话是写给自己的,我希望我自己能够对无论什么一定要有知识脉络,再去逐步开展学习,切忌一头扎进书堆。以下是我初步的一个框架。
  还有一点就是,我们要有抽象能力,听过知乎大佬说过,我们学习计算机没有抽象能力,很容易走进“歧途”。抽象的绘画会使我们难以理解,学习日常生活中学会抽象是很重要的。我们人与生俱来就有抽象能力,你可能不相信ba。举个栗子!我们按下R键我们不会在乎这个举措又怎么的信号转换,有哪些函数调用,我们只会在乎他是否释放了大招并且精准命中。计算机的世界深似海洋,若无必要切忌事事求甚解,达到目前的需求即可,因为有可能钻进去就出不来了。

一.开篇,数据结构与算法

  什么事情都有开头,开头都挺难的,哎~~坚持住!我们学习的是数据结构与算法,一般都是这么叫的。通常我们的疑问就是什么是数据结构?什么是算法?我第一次学的时候也是这么想的。下面我就斗胆说一下。

  什么是数据结构?数据结构通俗来讲就是我们怎么来描述和存储数据元素,通常分为逻辑结构和存储结构。什么是逻辑结构?我自认为就是人们为了方便理解日常生活中数据元素的关系,就创造了这么个东西,一堆凌乱的东西在一块我们可以称之为集合。一些人排成一队我们就可以称之为线性表。一个班级里面班主任管各个班委,班委管各个小组长,小组长再到个人,这个关系就可以称之为树。什么是存储结构?它又叫物理结构(我觉着存储结构好理解吧)它就是我们怎么将这种关系存储到计算机中,我们不可能直接甩给计算机,这些学生是线性关系的,你给我存起来。这不可能,它也听不懂。计算机中只有顺序存储(分配一块连续的内存存储)和链式存储(用指针来连接它们)。

  那么什么是算法?官方解释就是解决特定问题的有限序列。通俗的来讲就是我们怎么解决问题。举个栗子,高斯的故事,解决1 + 2 +… + 100。高斯使用等差数列的通项公式来解决问题,而其他同学使用累加法。这两种解决问题都是算法。只不过效率不同。

  谈到效率就得提一嘴,时间复杂度了大O表示法,这个需要掌握一些数列的基本知识就可以很容易求解了。(常见时间复杂度比较)
此处有图片,不知道咋一直上传不了,等我网好了再传

  数据结构与算法的关系借用程杰老师的一句话就是这两者的关系就像舞台剧罗密欧与朱丽叶,如果这场表演只来了一个人就没法看了。它们的关系就是密不可分的。还是提一次那句话:程序 = 数据结构 + 算法

数据结构篇(偏向数据结构)

  • ①线性表

  这是一种线性关系。官方解释就是除了第一个节点只有后继和最后一个节点只有前趋以外,其他的都只有一个前趋和一个后继。举个栗子通常来说我们吃饭排队就是一种线性表。

  那么我们把它怎么存到计算机里面,这个根据实际问题的需要。用顺序存储的我一般把它称为顺序表。使用链式存储的我称为链表。而且由于实际问题的需要链表通常由单链表,循环链表,双循环链表。

  • ②栈和队列

  同样也是由于实际问题的需求,我们又引入了栈与队列,它们都是操作受限的线性表,栈也就是只能在栈顶进去只能在栈顶出(俗称先进后出)。队列就像我们的排队一样先排队的人,就先办理业务,并且只能在队头出在队尾进(俗称先进先出)。两种数据结构都非常重要。

  • ③字符串( ①②都是线性表,因为比较特殊所以一般单列出来)

  这个就是数据元素是字符的线性表。因为在日常生活中太常见了。所以单独罗列出来。例如我们说的这段话就是一个字符串。关于字符串还有它最常见的一个算法——字符串匹配算法。这个日常生活中就很常见,举个栗子,我们登录QQ,输入账号和密码,后台会提取数据库中存储的账号和密码与你输入的比对,验证成功登录才才能成功。(我没有接触过项目,但是我感觉过应该是这样的hah)

  • ④树

  因为日常生活中不可能所有的都是线性结构我们的世界是多元的,比如班级里面的管理关系,这个就不是线性关系,你把这个关系画出来就像一颗倒置的树,所以这个数据结构叫树。要注意树只有一个根节点就像在公司里管理层的最顶端往往只有一个人。每个节点只有一个双亲,可以有多个孩子。大体看起来来它是分层的,一层一层往下面开枝散叶。

  • ⑤图

  当然仅仅用树还是不能描述生活中问题数据元素的关系。举个栗子,我喜欢小花,小花喜欢我,小明也很喜欢小花,但小花不喜欢他。我们三个人的关系就得用一个有向图来描述。

算法篇(偏向于算法)

①.查找

  • 顺序查找
  • 二分查找
  • 线性索引查找
  • 二叉排序树
  • 等等我慢慢学…

②.排序

  • 插入排序(就像打扑克一样我们把牌整理好,一般就是一张一张进行插入排序)
  • 希尔排序(对上面的优化)
  • 选择排序(选择其中最小的
  • 冒泡排序(就像冒泡一样)
  • 归并排序(这个和下面这个笔者确实不太熟)
  • 堆排序
  • 快速排序(最厉害的名副其实)

谢谢看完!这个写起来实在费劲~~哭了哭了,不过还是要坚持,爬坡才会提高嘛!我先把这个发布了,慢慢填充再可以回来补充。因为不发布感觉这件事没做完,很难受。谢谢大家我先吃饭了。。。

因笔者水平有限,只能尽力提及我所知道的,一定不能顾及所有方面。并且以上是笔者个人理解,不一定正确,如有错误还希望指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值