数据结构
An宁
未来很近,时间很短,珍惜每一个呼吸的瞬间
展开
-
数据结构--知识点17--堆排序
文章目录1、堆排序2、堆排序的基本思想和步骤3、python实现1、堆排序堆是具有以下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;或者每个节点的值都小于其左右孩子的值,称为小顶堆。堆排序是利用堆这种数据结构而设计的一种排序算法,它的最坏、最好、平均时间复杂度的都是O(nlogn),也是不稳定排序。2、堆排序的基本思想和步骤无序序列—>大顶堆---->从小到大排序的序列构造初始堆,将给定无序序列构造成一个大顶堆按照完全二叉树,从左到右,从下到上的顺序原创 2020-09-15 19:36:10 · 264 阅读 · 0 评论 -
数据结构--知识点16--搜索算法(二叉树)
文章目录一、树的概念1、特点2、树的术语3、树的种类4、树的存储与表示5、常见的树的应用场景二、二叉树1、概念2、性质一、树的概念树是一种抽象数据类型(ADT)或是视作这种抽象数据类型的数据结构1、特点每个节点有零个或多个子节点没有父节点的节点称为根节点每一个非根节点有且只有一个父节点除了根节点外,每个子节点可以分为**多个不相交(因为都只有一个父节点)**的子树2、树的术语节点的度:一个节点含有的子树的个数称为该节点的度树的度:一棵树中,最大的节点的度称为树的度叶节点或终端节点原创 2020-09-06 22:37:57 · 3116 阅读 · 2 评论 -
数据结构--知识点15--搜索算法(二分查找)
文章目录1、搜索2、二分法查找1)条件2)算法3)python实现4)时间复杂度1、搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的。搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找2、二分法查找1)条件排好序的序列上进行有索引的序列上进行即顺序表–在python中为列表2)算法假设查找[1,3,4,6,7,8,10,13,14]列表中是否有元素4首先由于是有顺序的序列,因此先找中间值是多少,即序列长度除以2–索引为4的为中间值原创 2020-09-06 17:15:36 · 229 阅读 · 0 评论 -
数据结构--知识点14--常见排序算法效率比较
文章目录1、效率比较2、必须掌握1、效率比较排序方法平均情况最好情况最坏情况辅助空间稳定性冒泡排序O(n2)O(n)O(n2)O(1)稳定选择排序O(n2)O(n2)O(n2)O(1)不稳定插入排序O(n2)O(n)O(n2)O(1)稳定希尔排序O(nlogn)~O(n2)O(n1.3)O(n2)O(1)不稳定堆排序O(nlogn)O(nlogn)O(nlogn)O(1)不稳定归并排序O(nlo原创 2020-09-06 16:00:25 · 193 阅读 · 0 评论 -
数据结构--知识点13--归并排序
文章目录1、 定义1、 定义先拆分再合并拆分时按照先对半,再将分出的子序列对半,以此类推,直到分为单个的元素合并时,先两两合并,合并的同时,将这两个元素排序再将合并后的序列们两两合并,合并时有两个游标,left、right,left指向左边序列的第一个元素,right指向右边序列的第一个元素,首先比较这两个元素的大小,如果左边小于右边,则将左边的元素放到合并的序列中的第一位,向右移动left一位,如果右边的更小,则将右边的元素放在合并的序列中的第一位,right游标向右移一位,继续比较两个游原创 2020-09-05 23:47:14 · 199 阅读 · 0 评论 -
数据结构--知识点12--快速排序
文章目录1、定义2、python实现3、时间复杂度1、定义理解:首先将第一个元素找出来,然后设置low、high两个游标,分别从两边开始向第一个元素靠近;假设首先移动low游标,如果游标指向的元素比当前元素小,继续向右移动,如果游标指向的元素比当前元素大,则停止,交换low游标所指的元素和high游标所指的元素;开始移动high游标,比较游标指向的元素和当前元素的大小,如果比当前元素大,则继续向左移动游标,如果比当前元素小,则停止,交换low游标所指的元素和high游标所指的元素;再移动low原创 2020-09-05 18:09:05 · 225 阅读 · 0 评论 -
数据结构--知识点11--希尔排序
文章目录1、定义2、python实现3、时间复杂度1、定义是插入排序的改进版首先选取一个间隔,假设为4,则从原序列中,从0索引开始,下一个选4索引,再选8索引组成一个新的序列;1索引、5索引、9索引。。。组成一个新序列,以此类推,将所有元素组成新的序列。然后每个序列使用插入算法,进行排序,排序后,将排过的序列按照索引放回原来的大序列中;再按照间隔为2的方式取元素,组成新序列;在新序列中再按照插入法进行排序,排好后再将这个序列中的元素按照索引放入原来的大序列中;这时将间隔调整为1,这时就只分为原创 2020-09-05 14:27:48 · 294 阅读 · 0 评论 -
数据结构--知识点10--插入算法
文章目录1、定义1、定义对一个序列进行从小到大排序,将这个序列分为有序序列和无序序列,首先将第一个元素放入有序序列,剩下的都属于无序序列;然后选择无序序列中第一个与有序序列中的比较,如果小则放前面,大则放后面;然后这两个排好序的为有序序列,剩下的为无序序列,再在无序序列中选择第一个,插入有序序列中的合适位置;以此类推,一个个将剩下的元素插入有序序列中,最后得到一个有序序列。其中插入时,先从有序序列的最后一个进行比较,一个个向前比较。...原创 2020-09-04 23:51:14 · 1027 阅读 · 0 评论 -
数据结构--知识点9--选择排序
文章目录1、定义1)理解2)工作原理2、python实现时间复杂度1、定义1)理解从整个序列中选择最小的放在最前面,再在选剩下的元素序列中选择最小的放在第二个位置,按照这个方法排序那么如何选择最小的元素?首先设0索引的为最小的,然后与之后的元素一个个比较,当遇到比当前元素小的元素时,将当前元素替换为更小的那个,直到将所有元素遍历完,这是0索引位置的为最小的元素;将这个元素放在已排序好的元素区然后在未排序的元素区中设1索引的元素为最小的,相同的方法寻找最小值;直到将所有元素都排好2)工作原理原创 2020-09-04 22:27:30 · 213 阅读 · 0 评论 -
数据结构--知识点8--冒泡排序
文章目录一、排序算法的稳定性二、排序算法--冒泡排序1、定义2、python实现一、排序算法的稳定性稳定性:如果一个排序算法是稳定的,当有两个相等键值的记录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前比如:假设以下的数对将要以他们的第一个数字来排序(4,1) (3,1) (3,7) (5,6)在这个状况下,有可能产生两种不同的结果,一个是让相等键值的记录维持相对的次序,另一个则没有维持次序:(3,1)(3,7)(4,1)(5,6)次序被改变:(3,7)(3原创 2020-09-04 11:30:42 · 293 阅读 · 0 评论 -
数据结构--知识点7--栈和队列
文章目录一、栈1、定义2、特点3、栈结构实现1)栈的操作2)python实现二、队列1、定义2、特点对于栈和队列:不用关心物理存放是什么样的,只需要关心这两种数据结构支持什么样的操作,操作有什么特点一、栈1、定义栈,可以利用任意一种线性表来实现,是一种数据结构,用来保存线性数据,可以存入数据、访问数据、删除数据。2、特点栈数据结构只允许在容器的一端进行加入数据和输出数据,因此对数据的访问顺序为后进先出(LIFO,Last In First Out)[可以链表,也可以顺序表]3、栈结构实现栈原创 2020-09-03 21:32:52 · 222 阅读 · 0 评论 -
数据结构--知识点6--单向循环链表
文章目录1、概念2、操作3、python实现操作1、概念单向循环链表是单链表的一个变型,链表最后的一个节点的next域不再为None,而是指向链表的头节点2、操作is_empty() 判断链表是否为空length() 返回链表的长度tracel() 遍历add(item) 在头部添加一个节点append(item) 在尾部添加一个节点insert(pos,item) 在指定位置pos添加节点remove(item) 删除一个节点search(item) 查找结点是否存在3、py原创 2020-09-02 23:29:14 · 313 阅读 · 0 评论 -
数据结构--知识点5--链表与顺序表的对比
文章目录1、优缺点对比2、操作复杂度对比1、优缺点对比链表对于存储空间的使用相对灵活;且由于增加了节点的指针域,空间开销比较大优点:对分散的存储空间可以利用起来,缺点:但是由于添加了节点的next域,空间开销会大一些在进行存取数据时,由于需要遍历整个链表,时间复杂度达不到O(1)顺序表具有随机读取的优点,空间开销小优点:即在存取元素的时候可以一次性定位缺点:但是存储数据时必须是一块连续的固定的存储空间,如果进行动态改变,整个存储区都会改变,如果存原创 2020-09-02 22:03:33 · 330 阅读 · 0 评论 -
数据结构--知识点4--链表
文章目录一、链表的概念1、为什么需要链表2、链表的定义二、单向链表1、单链表的定义2、python中的变量赋值3、单链表在python中的实现1)节点的操作2)单链表的操作3)测试代码是否符合操作一、链表的概念1、为什么需要链表顺序表的构建需要预先指导数据大小来申请连续的存储空间,在进行扩充时还需要进行数据的搬迁,所以使用起来不是很方便链表结构可以充分利用计算机的内存空间,实现灵活的内存动态管理链表和顺序表都是线性表2、链表的定义链表是一种常见的基础数据结构,是一种线性表,但是不像顺序表一原创 2020-09-01 22:38:43 · 427 阅读 · 0 评论 -
数据结构--知识点3--顺序表
文章目录一、概念一、概念原创 2020-08-30 22:43:48 · 746 阅读 · 0 评论 -
数据结构--知识点2--数据结构概述
文章目录1、引入1、引入算法: 一种思想,一种解决问题的思路,关注于解决问题的方法和步骤数据结构:用什么方式将数据存储起来,不同的组织方式,到时候操作数据时的时间复杂度不同比如: 存储一个班级学生的姓名、年龄、家乡列表中每个学生的信息用字典存储,需要取出Tom的信息时,时间复杂度为O(n)...原创 2020-08-30 21:13:56 · 158 阅读 · 0 评论 -
数据结构--知识点1--时间复杂度
文章目录一、时间复杂度1、概念2、大O表示法3、最坏时间复杂度4、时间复杂度的基本计算规则5、最常见的时间复杂度6、常见时间复杂度之间的关系二、python内置类型性能分析1、timeit模块2、创建list实例不同列表创建方法的时间3、python内置操作的时间复杂度1)list内置操作2)dict内置操作一、时间复杂度1、概念一个算法的时间复杂度根据算法执行的基本运算数量来衡量实例解析import timestart_time=time.time()for a in range(0,100原创 2020-08-30 20:21:16 · 460 阅读 · 0 评论