![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
阴天了
哈哈哈哈哈
展开
-
数据结构与算法(树和二叉树及python代码实现)
树的概念树是一种抽象数据类型(ADT)或是视作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合,他是由n(n>1)个有限节点组成一个具有层次结构的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点没有父节点的节点称为根节点每一个非根节点有且只有一个父节点除了根节点外,每个子节点可以分为多个不相交...原创 2020-02-12 00:24:28 · 1863 阅读 · 0 评论 -
数据结构与算法(二分查找)
二分法查找二分查找又称折半查找,优点是次数比较少,查找速度快,平均性能好,其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等即查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则查找后一子表。重...原创 2020-02-09 21:45:12 · 648 阅读 · 0 评论 -
数据结构与算法(归并排序)
归并排序归并排序是采用分治法的一个典型的应用,归并排序的思想就是先递归分解数组,在合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的前面的数,谁小就先取谁,取了后相应的指针就往后移一位,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。def merge_sort(alist): """归并排序""" n = len(alist) ...原创 2020-02-09 21:02:46 · 136 阅读 · 0 评论 -
数据结构与算法(快速排序)
快速排序快速排序,又称划分交换排序,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按照此方法将这两部分数据分别进行快速排序,整个排序过程可以递归进行,依次达到整个数据变成有序序列。步骤为:从数列中挑出一个元素,称为“基准”。重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准元素大的放在基准元素后面(相同的数可以放...原创 2020-02-09 19:51:12 · 188 阅读 · 0 评论 -
数据结构与算法(希尔排序)
希尔排序希尔排序是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该算法因Dl.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序过程希尔排序的基本思想是:将数组列在一个表中并对列分别...原创 2020-02-08 22:40:50 · 265 阅读 · 0 评论 -
数据结构与算法(插入排序算法)
插入排序插入排序是一种简单直观的排序算法,他的工作原理是通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置插入。插入排序实现上,再从后向前扫描过程中,需要反复把已经排序的元素逐步向后挪位,为新元素提供插入空间。插入排序分析以序列alist=[2,1,5,1,4,66,3,42,5,67,4]为例,插入排序原理如下:首先将序列的第一个元素记为有序序列,其余剩下元素...原创 2020-02-08 19:33:09 · 388 阅读 · 0 评论 -
数据结构与算法(选择排序算法)
选择排序选择排序(Selection sort)是一种简单直观的排序算法,他的工作原理如下,首先将未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中急需寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动相关。如果某个元素位于了正确的最终位置上,那它不会移动,选择排序每次交换一对元素,它们当中至少有一个...原创 2020-02-08 16:34:25 · 328 阅读 · 0 评论 -
数据结构与算法(冒泡排序)
冒泡排序冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把它们交换过来。遍历数列的工作是重复的进行直到没有在需要的交换,也就是说该数列已经排序完成,这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡算法的运作如下:比较相邻的元素,如果第一个元素大于第二个元素(升序),就交换它们两个。对每一对相邻元素做同样的工作,从开...原创 2020-02-07 21:01:00 · 482 阅读 · 0 评论 -
数据结构与算法(排序算法稳定性)
排序与搜索排序算法(英语:sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。排序算法的稳定性**稳定性:**稳定排序算法会让原本有相等键值的记录维持相对次序,也就是如果一个排序算法是稳定的,当有两个相等键值的记录R和S,且在原本的列表种R出现在S之前,在排序过的列表中R也会在S之前。当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假...原创 2020-02-07 19:37:10 · 298 阅读 · 0 评论 -
数据结构与算法(栈与队列)
栈的概念栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,他的特点在于只能允许在容器的一端(称为栈顶端指标,英语top)进行加入数据(英语push)和输出数据(英语pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO,Last in...原创 2020-02-07 19:11:37 · 125 阅读 · 0 评论 -
数据结构与算法(单向循环链表)
单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。#节点类class Node(object): "节点" def __init__(self,elem): #构造函数 self.elem = elem self.next = None #对于一个节点的初始状态指向为空,因为不知道指向谁...原创 2020-02-07 15:41:43 · 321 阅读 · 0 评论 -
数据结构与算法(双向链表)
一种更复杂的链表叫“双向链表”或者“双面链表”,每个节点有两个链接,一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。操作实现class Node(object): """节点类""" def __init__(self, item): self.elem = item self....原创 2020-02-06 20:32:28 · 265 阅读 · 0 评论 -
数据结构与算法(单链表原理+python代码实现)
为什么需要链表?对于上部分顺序表的学习,我们了解到在构建顺序表时需要预先知道数据大小来申请连续的存储空间,而在进行扩充的时候又需要进行数据的搬迁,所以使用起来并不是很灵活。那我们就想,能不能存在一种数据结构是的在数据扩充的时候,在原有的数据完全不变化,扩充一个数据就增加一个,我们需要这样的一个数据结构,那么这样的数据结构怎么存储呢?比如构造了一组数据Li=[200],然后申请了一个存储空...原创 2020-02-06 18:43:30 · 862 阅读 · 0 评论 -
数据结构和算法(顺序表)
现在看一下,对于整型数据int = 1,2,3,4,5(基本数据类型),对于这部分数据该怎么保存呢?抛弃掉高级数据类型(列表,字典等这些python这些封装好的数据结构),只记得整型、浮点型、字符型等基本数据类型。那么对于int=1,2,3,4,5这部分数据该怎么保存呢?首要的一点是要知道数据存贮的本质是什么?内存计算机的内存是存储数据并直接与CPU打交道的。既然是内存,那就是存储单元了,即组...原创 2020-02-01 15:49:59 · 782 阅读 · 0 评论 -
数据结构和算法(数据结构引入)
数据结构我们如何用python中的类型来保存一个班的学生信息?如果想要快速的通过学生姓名获取信息呢?实际上当我们在思考这个问题时,我们已经用到了数据结构。列表和字典都可以存储一个班的学生信息,单数想要在列表中获取一名同学的信息时,就要遍历整个列表,其时间复杂度为O(n),而使用字典存储时,可将学生姓名作为字典的键,学生信息作为值,进而查询时不需要遍历,使得快速获取学生信息,其时间复杂度为O...原创 2020-01-31 16:02:04 · 155 阅读 · 0 评论 -
数据结构和算法(代码执行时间测量模块timeit)
考察python的执行效率,python在调用函数的时候,要考察其函数内部算法的效率,本文将利用python中timeit模块来测试一小段python代码的执行速度。class timeit.Timer(stmt=‘pass’, setup=‘pass’, timer=timer function)Timer是测量小段代码执行速度的类stmt参数是要测试的代码语句(statment)se...原创 2020-01-30 20:32:09 · 316 阅读 · 0 评论 -
数据结构与算法(时间复杂度和大O表示法)
对于上一部分中的问题算法介绍。运行时间花费了120s,当然配置稍微低点的会花费更久的时间。并且如果将1000改为10000,甚至更高,那么花费的时间将会更加高。这里有没有一种方法对该算法进行优化呢?对于该问题,我们不难发现,对于已经确定的a,b,那么c是唯一确定的,因为c=1000−a−bc=1000-a-bc=1000−a−b,有了这样的一个思想,我们对上述代码进行改进import tim...原创 2020-01-30 18:46:46 · 625 阅读 · 0 评论 -
数据结构学习(算法的概念引入)
算法的概念首先要知道我们为什么要学习数据结构月算法???这里举一个简单的例子:如果将最终完成的程序比做战场,我们码农就是指挥作战的将军,而我们写的代码就是士兵和武器那么数据结构和算法是什么呢?答曰:兵法!!!我们不看兵法在战场上的运用,仅仅是肉搏,那么战争可能会失败,可能会胜利,并且即使胜利也会付出惨痛的代价。我们写程序也是这个道理,没有看过数据结构与算法,有时面对问题会无从下手,大...原创 2020-01-29 17:01:44 · 247 阅读 · 0 评论