文章目录

  • 前言
  • 一、数据结构基础
  • 二、数据结构分解
    • 1.数组
    • 2.链表
    • 3.栈
    • 4.队列
    • 5.树
    • 6.图
  • 总结

前言

好久没更,因为笔者前段时间处理了一些其他的问题,今天我们继续,走进《算法之美》第三章,数据结构。

同样,感兴趣的小伙伴不妨点点关注,等算法之没结束后,笔者将带大家开始机器学习的基础内容,敬请期待哦。


一、数据结构基础

何为数据结构?我们为什么要了解数据结构?数据结构如何使用呢?

为了解决问题,许多技术人员都潜心钻研更优秀的算法高效地解决问题,但是,高效的算法往往需要精巧的数据结构与之配合,合适的数据结构才能将算法的优势发挥的淋漓尽致。

将数据进行合理的规划分配,偏于处理众多的数据,这就是数据结构的用处所在。

接下来,我们就走进数据结构,了解多种多样的数据结构各自的优势所在。

二、数据结构分解

1.数组

当我们需要将一些彼此相关的数据存储在空间中,为了方便管理,我们习惯性地偏向于将这些数据存储在一起,即连续的内存地址中,这样可以极大方便我们调用与修改,这就是数组的初衷。

在内存中,每当我们需要使用数组时,便会在内存中开辟出一块连续的内存空间,用于存放一系列数据。

代码如下:

# Alkaid#3529def array_demo():grade = array([[89, 70, 93], [70, 25, 80], [20, 40, 10]])for i in grade:print(i)

2.链表

将相关的数据存储在连续的内存地址当中,固然方便访问,但是,如果我们想要添加或删除一些数据,就会导致大量的数据移动,并且,连续存放不利于内存空间的充分使用,因此,在此基础上,我们创造了一种新的数据结构,链表。

链表,顾名思义,将许多节点相连,形成一条链。

每个节点分别存储当前结点的值,以及下一个节点在内存中的地址,这样子,我们只需记录第一个节点,依次寻找,即可找到全部数据。

这样的数据结构可以极大方便我们对数据的存储,充分利用内存空间。

代码如下:

# Alkaid#3529class Node(object):def __init__(self, data=0, next=None):self._data = dataself._next = nextdef set_data(self, data):self._data = datadef get_data(self):return self._datadef set_next(self, next):self._next = nextdef get_next(self):return self._next

3.栈

栈是一种特殊的数据结构,它只能在一段进行操作,因此也就导致了所谓“先进后出”的特点,这种数据结构通常可以用来做代码中括号配对、表达式求值等运算。

代码如下:

# Alkaid#3529def stack_demo():"""栈利用列表的函数来实现类似于栈的功能,append(),:return:"""stack = []for i in 'Alkaid#3529':stack.append(i)while stack:print(stack.pop())return None

4.队列

队列与栈类似,但是队列是一种可以两端操作的数据结构,一端只能进入,另一端只能输出,遵循先进先出的原则,我们可以利用Pycharm自带模块实现。

# Alkaid#3529def queue_demo():"""队列:return:"""s1 = "Alkaid#3529"name = Queue()for i in s1:name.put(i)while not name.empty():print(name.get())return None

5.树

树是一种较为高级的数据结构之一,它通过模拟树的形状来实现各个数据间的层级问题,可以更加直观方便的体现数据间的层次结构,方便查找、排序等操作。

典型的是二叉树结构,遍历方法分为先序、中序、后序、分层遍历。

此处就不对数进行更为深入的探讨了,后续会在相应的算法题目中进行实例使用。

6.图

图可以用于模拟大量数据间较为错综复杂的关系,分为有序、戊戌两种,可以用邻接表实现。

图的两种搜索方式与遍历方式也会在后续实例中为大家详细介绍(深度、广度搜索)。


总结

数据结构与算法相辅相成,只需掌握常见的数据结构并熟练使用即可解决大多数算法问题。

《算法之美》 第三章:数据结构相关推荐

  1. 大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 21

    大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 211 第 ...

  2. 《算法笔记》第三章3.2节、3.3节、3.4节学习笔记

    <算法笔记> 第三章学习笔记 编译环境:codeblocks20.03 备注:本文留作作者自用,如有错误敬请指出 3.2节 [PAT B1041] #include<cstdio&g ...

  3. 数据结构与算法之美(三)

    一,红黑树 平衡二叉树的严格定义是这样的:二叉树中任意一个节点的左右子树的高度相差不能大于 1.最先被发明的平衡二叉查找树是AVL 树,它严格符合我刚讲到的平衡二叉查找树的定义,即任何节点的左右子树高 ...

  4. 模式识别感知器算法matlab,模式识别第三章-感知器算法.doc

    模式识别第三章-感知器算法 模式识别第三章 感知器算法 一.用感知器算法求下列模式分类的解向量w: 将属于的训练样本乘以(-1),并写成增广向量的形式: ,,, ,,, 第一轮迭代:取, 因不大于0, ...

  5. 数据结构与算法之美笔记(三)排序

    排序 如何分析一个"排序算法"? 排序算法的执行效率 1.1 最好情况.最坏情况.平均情况时间复杂度 1.2 时间复杂度的系数.常数 .低阶 1.3 比较次数和交换(或移动)次数 ...

  6. 数据库系统工程师——第三章 数据结构与算法

    文章目录

  7. 《算法导论》第三章 函数的增长 个人心得——记号与常用函数

    由第二章中我们得知,算法的时间复杂度只与算法的高阶项有关.当输入规模n足够大时,高阶项的花费远超过低阶项.因此在计算算法的运行时间时,尽管可以求出精确的运行时间,但是并不值得我们这么做. 在n很大的情 ...

  8. 算法小论——第三章 又把新桃换旧符

    2019独角兽企业重金招聘Python工程师标准>>> 笔记 这一章主要是渐进记号和高中数学的回忆. 几个标记: Θ -- 上界和下界,绑定值,相当于f(n) ∈ [c1 * g(n ...

  9. 分治习题--九章算法培训课第三章笔记

    1.Maximum Depth of Binary Tree 这是道简单的分治习题了 分: 左子树最大深度 右子树最大深度 治: 最大深度等于max(左子树,右子树)+1 public class S ...

  10. 软件设计师考试 | 第三章 数据结构 | 图

    文章目录 (一)图的定义与存储 1.图的定义 2.图的存储结构 (1)邻接矩阵表示法 (2)邻接链表表示法 (二)图的遍历 1.深度优先搜索(DFS) 2.广度优先搜索(BFS) (三)生成树及最小生 ...

最新文章

  1. 生产环境:Nginx高可用方案
  2. 广东深圳计算机学校排名2015年,2015年深圳小学综合排名 各区小学最新排名
  3. jquery获得option的值和对option进行操作
  4. 用java编写汉诺塔问题_数据结构与算法之汉诺塔问题(Java递归)
  5. java web问题
  6. POJ1177 Picture 线段树+离散化+扫描线
  7. BugkuCTF-Crypto题affine
  8. g++ linux 编译开栈_使用g++编译器扩大程序可用栈空间
  9. datatables中的Options总结(2)
  10. 5G从小就梦想着自己要迎娶:高速率、低时延、大容量三个老婆。
  11. android elf 加固_APK一键自动化加固脚本
  12. L1-074 两小时学完C语言 (5 分)-PAT 团体程序设计天梯赛 GPLT
  13. 增加游戏受众:在英特尔核显上运行MR游戏
  14. win32com下载地址
  15. HC05蓝牙模块配对步骤及AT模式设置方法(转载并进行部分修改)
  16. 前端开发优秀简历_这就是如今成为优秀的前端开发人员所需要的
  17. vue以post的方式发请求,传参在url中
  18. vue2实现传送门效果
  19. JS几行代码实现数字炸弹游戏
  20. CDR VBA X6中Exportbitmap函数的用法(导出图片)

热门文章

  1. 语音识别方案 - 联想语音团队多场景实时语音文字转换方案
  2. 试用artipub一文多发平台
  3. 降低网络运维管理成本技巧分析
  4. 机器学习40讲-12正则化处理:收缩方法与边际化
  5. MFC 绘制半透明图片
  6. 马保国一年能挣多少钱?
  7. [Python随笔]暴力解解决“崩铁”的引航罗盘解密
  8. 众创空间和共享办公室有什么不同吗
  9. 怎么知道本台计算机的用户名和密码,访问其它电脑时“开始-运行-\输入要连接的电脑的IP,用户名和密码输入什么?...
  10. 最适合0基础入门的5种编程语言