![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python 数据结构算法
生命不止,学习不息
这个作者很懒,什么都没留下…
展开
-
python 实现二叉树
树:树结构的例子就是你可能每天都会用到的文件系统。在一个文件系统中,磁盘的分支或者文件夹构建成了一棵树。二叉树的基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)理解:二叉树作为一个Python中的典型,其实质就是一个分叉形式的数组,以一个节点开始,每次延伸出两个左右子节点,无限延伸直到没有子节...原创 2019-07-29 15:02:16 · 192 阅读 · 0 评论 -
归并排序
归并排序归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。归并排序的分析ef merge_sort(alist): if len(alist) <...原创 2019-07-27 23:39:48 · 89 阅读 · 0 评论 -
希尔排序
希尔排序希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序过程:希尔排序的基本思想是:...原创 2019-07-27 23:17:49 · 84 阅读 · 0 评论 -
插入排序
插入排序插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。以第一个元素为有序序列;从第二个元素开始,向前面的有序序列插入元素;ef insert_sort(alist): ...原创 2019-07-27 22:48:24 · 132 阅读 · 0 评论 -
快速排序
**快速排序(**英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤为:从数列中挑出一个元素,称为"基准"(pivot),基准是唯一的,一直不变的...原创 2019-07-27 22:21:45 · 114 阅读 · 3 评论 -
双向链表
双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。所以,在这里一个节点包括了三部分,前驱、数据、后驱。双向链表 表示操作is_empty() 链表是否为空length() 链表长度travel() 遍历链表add(item) 链表头部添加app...原创 2019-07-23 09:21:45 · 300 阅读 · 0 评论 -
python 单向循环链表
单向循环链表单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。操作is_empty() 判断链表是否为空length() 返回链表的长度travel() 遍历add(item) 在头部添加一个节点append(item) 在尾部添加一个节点insert(pos, item) 在指定位置pos添加节点remove(item) 删除一...原创 2019-07-22 08:31:16 · 69 阅读 · 0 评论 -
顺序表 线性表 数组的区别
在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数据之间的某种关系。这样的一组序列元素的组织形式,我们可以将其抽象为线性表。...原创 2019-07-21 14:50:57 · 1323 阅读 · 0 评论 -
python 链表 单链表
链表为什么需要链表顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。链表的定义链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。为了实现无序...原创 2019-07-21 10:25:58 · 312 阅读 · 4 评论 -
python 选择排序
选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将...转载 2019-07-24 23:09:42 · 83 阅读 · 1 评论 -
冒泡排序
冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元...原创 2019-07-24 23:06:07 · 109 阅读 · 1 评论 -
循环队列
循环队列是 队列的一种特殊形式。首先介绍队列,然后引申出循环队列。队列又称为“先进先出”(FIFO)线性表限定插入操作只能在队尾进行,而删除操作只能在队首进行对于顺序队列:空队列 head = tail当插入新元素到队尾时,tail加1当删除队首元素时,head加1,上图如果把C也删掉,那么就 head = tail 了tail 始终指向队列元素的下一个位置对应的操作:队...原创 2019-07-20 13:34:22 · 565 阅读 · 0 评论 -
python 双端队列
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。双端队列(deque 或 double-ended queue)与队列类似,也是一系列元素的有序组合。其两端称为队首(front)和队尾(rear),元素在到达两端之前始终位于双端队列中...原创 2019-07-20 11:05:37 · 258 阅读 · 0 评论 -
pytthon 队列
队列(queue)指允许在一段进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(FIFO)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为对头。队列不允许在中间部位进行操作。简单来说,队列(Queue)是一系列有顺序的元素的集合,新元素的加入在队列的一端,这一端叫做“队尾” (rear),已有元素的移除发生在队列的另一端,叫做“队首”(front)。当一个元素被加...原创 2019-07-20 10:47:21 · 193 阅读 · 0 评论 -
排序算法的稳定性
什么是稳定性在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需要注意的是,排序...原创 2019-07-28 10:58:11 · 220 阅读 · 0 评论