![](https://img-blog.csdnimg.cn/20200731094421668.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构和算法-学习笔记
学习笔记
数据结构—栈、队列、链表和二叉树
算法—查找算法和排序算法
燥栋
这个作者很懒,什么都没留下…
展开
-
<学习笔记>递归(2021.08.19)
递归两个特点1. 调用自身2. 结束条件举例:def func1(x): if x > 0: print(x) func1(x - 1)def func2(x): if x > 0: func2(x - 1) print(x)func1(3)func2(3)看一下上面的func1和func2输出的是什么func1输出3,2,1func2输出1,2,3画图说明:func1:先print原创 2021-08-19 13:42:48 · 156 阅读 · 0 评论 -
<学习笔记>数据+算法初识+python数据结构结构性能分析(2020.7.22)
1.什么是计算机科学?计算机科学实际上是对问题以及解决问题过程中产生的解决方案得研究。例如给定一个问题,计算机科学家目标是开发出一个算法来处理该问题,最终得到该问题的解决方法,最共得到该问题得解或是最优解。2.评判程序优劣得方法消耗计算机得资源和执行效率(无法直观)算法得执行耗时(不推荐,受到机器和执行环境的影响时间复杂度(推荐)3.时间复杂度评价标准:量化算法执行操作/执行步骤得数量最重要的项:时间复杂度表达式中最有意义的项使用大O记法,来表示时间复杂度——O(最重要的项)常原创 2020-07-28 11:28:40 · 263 阅读 · 0 评论 -
<学习笔记>栈、队列和双端队列(2020.7.23)
1.栈栈得特性:先进后出得数据结构栈顶、栈尾应用:每个web浏览器都有一个返回按钮,当你浏览网页时,这些网页被放置在一个栈种(实际是网页得网址)。你现在看得网页是在顶部,你第一个查看得网页在底部,如果按下返回按钮,及那个相反的顺序浏览刚才得网页。Stack()创建一个空的新栈,不需要参数,返回一个空栈push(item)将一个新项添加到顶部,需要item作为参数,不返回任何内容pop()从栈中删除顶部项,不需要参数,返回item,栈被修改peek()从栈返回顶部,但不会删除它,不需要参数,不原创 2020-07-28 11:28:35 · 264 阅读 · 2 评论 -
<学习笔记>链表(一)内存的概述+单链表概述+向头部插入节点(2020.7.24)
1.内存计算机的作用用来存储和运算二进制的数据问题:计算机如何计算1+2?将1和2的二进制劣行的数据加载到计算机的内存中(当有额外的内存时才能加载成功),然后使用寄存器进行数值运算。变量变量是内存空间的地址。(不严谨的说法变量就是某一块内存空间)内存空间有两个默认的属性:(1)内存空间的大小:-bit(位),一个bit大小的内存空间只能存放一位二进制的数;-byte(字节),8bit;-kb,1024byte。(2)内存空间的地址:-使用一个16进制的数值表示,-作用:原创 2020-07-28 11:28:27 · 410 阅读 · 1 评论 -
<学习笔记>链表(二)遍历+空+长度+尾部添加节点+节点查询+删除+定向插入(2020.7.25)
3.2 链表的遍历思路如下图:3.3 链表空思路:根据head是否为空,就可以知道链表是否为空3.4 链表长度思路:循环写入计数器做累加即可3.4 链表尾部插入节点思路:走到最后节点,让最后一个节点的next等于新加入的node即可特殊情况:链表为空则前面直接为0报错,需要进行判断...原创 2020-07-28 11:28:11 · 214 阅读 · 0 评论 -
<学习笔记>总结两道常考的面视题:两个队列实现一个栈和链表反转(2020.7.26)
两个队列实现一个栈class Queue(): def __init__(self): self.items = [] def enqueue(self, item): self.items.insert(0,item) def dequeue(self): return self.items.pop() def size(self): return len(self.items)q1 = Queue原创 2020-07-26 11:26:06 · 184 阅读 · 0 评论 -
<学习笔记>二叉树的基本实现(2020.7.26)
1.二叉树根节点:叶子节点:左叶子节点:右叶子节点:树的层级 / 树的高度:下图是一个不完整的二叉树,根据根节点1的左右叶子节点可以找到2,6,然后在根据2的左右叶子节点找到4,5。根据3叶子节点找到6。二叉树的结构有节点,我们要构造节点。但是它与链表的节点不同在于,他又左右两个next。并且要像链表的头部一样,设置一个根节点,self.root=None单独的一个节点是没有指向的,只有创建一个新的节点并将它放到树中,才会有之后的指向,与链表相似。addNode(原创 2020-07-28 11:27:59 · 102 阅读 · 0 评论 -
<学习笔记>排序二叉树(2020.7.27)
排序二叉树排序二叉树乱序数据的插入的时候,需要遵从一个准则:插入的第一个元素作为树的根节点后序插入的元素,如果比根节点小,插入到根节点的左侧;如果比根节点大,插入到根节点的右侧,即左小右大由结果可以看出,排序二叉树中利用中序遍历可以获得有序数列例:对3,8,5,7,6,2,9,4,1乱序数字进行排列。# 排序二叉树# 创建节点class Node(): def __init__(self, item): self.item = item se原创 2020-07-28 11:27:51 · 123 阅读 · 0 评论 -
<学习笔记>顺序查找和二分法查找算法(2020.7.27)
顺序查找和二分法查找算法1. 顺序查找当数据存储在诸如列表的集和中时,我们说这些数据具有线性或者顺序关系。每个数据元素都存储在相对于其他数据元素的位置。由于这些索引值都是有序的我们可以按照顺序查找访问他们。这个过程称实现的搜索即为顺序查找。顺序查找原理刨析:从列表中的第一个元素开始,我们按照基本的顺序排序,简单地从一个元素移动到另一个元素,直到找到我们正在寻找的元素或遍历完整个列表。如果我们遍历完整个列表,则说明正在搜索的元素不存在。代码实现:该函数需要一个列表和我们证在寻找的元素作为参数,并返原创 2020-07-28 11:27:40 · 912 阅读 · 0 评论 -
<学习笔记>排序算法1-3:冒泡排序+选择排序+插入排序(2020.7.29)
1. 冒泡排序冒泡排序: 相邻元素两两比较,大的往后放,第一次完毕后最大值就出现在最大索引处,同理,继续,即可得到一个排好序得数组规律(1)两两比较,大的向后放(2)每一次比较完成后,下一次比较就会减少一个元素得比较(3)第一次比较,有0个元素不比第二次比较,有1个元素不比第三次比较,有两个元素不比…(4)总共需要比较数组长度-1次# 冒泡算法# 列表元素两两比较大的值向后移动def bubbleSort(alist): # 外层循环第一次,内层循环4次;外层循原创 2020-07-29 15:19:07 · 216 阅读 · 0 评论 -
<学习笔记>排序算法4-5:希尔排序+快速排序(2020.7.29)
4. 希尔排序希尔排序(shell sort)是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排序列分割成若干个子序列(由相隔某个"增量(gap)"的元素组成)分别进行直接插入排序,然后一次所见增量在进行排序,待整个序列中的元素基本有序(增量足够小)时,在对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接排序有较大提高。gap:增量值,拆分出来的组数在缩小增量原创 2020-07-29 18:55:16 · 250 阅读 · 1 评论