- 博客(13)
- 资源 (16)
- 收藏
- 关注
原创 用Python实现二叉树的遍历
⼆叉树的遍历树的遍历是树的⼀种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问⼀次且仅访问⼀次,我们把这种对所有节点的访问称为遍历(traversal)。那么树的两种重要的遍历模式是深度优先遍历,⼴度优先遍历,深度优先⼀般⽤递归,⼴度优先⼀般⽤队列。⼀般情况下能⽤递归实现的算法⼤部分也能⽤堆栈来实现。深度优先遍历对于⼀颗⼆叉树,深度优先搜索(Depth Firs...
2018-12-17 09:41:30 237
原创 用Python实现二叉树,完全二叉树和满二叉树
⼆叉树的基本概念⼆叉树是每个节点最多有两个⼦树的树结构。通常⼦树被称作“左⼦树”(left subtree)和“右⼦树”(right subtree)⼆叉树的性质(特性)性质1: 在⼆叉树的第i层上⾄多有2^(i-1)个结点(i>0)性质2: 深度为k的⼆叉树⾄多有2^k - 1个结点(k>0)性质3:对于任意⼀棵⼆叉树,如果其叶结点数为N0,⽽度数为2的结点总 数为N2,...
2018-12-17 09:23:46 3045
原创 用Python实现单向链表
单向链表单向链表也叫单链表,是链表中最简单的⼀种形式,它的每个节点包含两个域,⼀个信息域(元素域)和⼀个链接域。这个链接指向链表中的下⼀个节点,⽽最后⼀个节点的链接域则指向⼀个空值。表元素域elem⽤来存放具体的数据。链接域next⽤来存放下⼀个节点的位置(python中的标识)变量p指向链表的头节点(⾸节点)的位置,从p出发能找到表中的任意节点。节点实现class Single...
2018-12-17 08:52:07 1063 1
原创 用Python实现双端队列
双端队列双端队列(deque,全名double-ended queue),是⼀种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插⼊和删除操作在表的两端进⾏。双端队列可以在队列任意⼀端⼊队和出队。操作Deque() 创建⼀个空的双端队列add_front(item) 从队头加⼊⼀个item元素add_rear(item)从队尾加⼊⼀个item元素remov...
2018-12-16 19:57:18 239
原创 用Python实现队列
队列的实现同栈⼀样,队列也可以⽤顺序表或者链表实现。操作Queue() 创建⼀个空的队列enqueue(item) 往队列中添加⼀个item元素dequeue() 从队列头部删除⼀个元素is_empty() 判断⼀个队列是否为空size() 返回队列的⼤⼩代码的实现:class Queue(object): """队列&
2018-12-16 19:50:08 251
原创 用Python实现栈
栈(stack),有些地⽅称为堆栈,是⼀种容器,可存⼊数据元素、访问元素、删除元素,它的特点在于只能允许在容器的⼀端(称为栈顶端指标,英语:top)进⾏加⼊数据(英语:push)和输出数据(英语:pop)的运算。有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存⼊的那个元素,确定了⼀种默认的访问顺序。由于栈数据结构只允许在⼀端进⾏操作,因⽽按照后进先出(LIFO, Last In Fi...
2018-12-16 19:15:04 208 2
原创 用Python实现希尔排序
希尔排序希尔排序(Shell Sort)是插⼊排序的⼀种。也称缩⼩增量排序,是直接插⼊排序算法的⼀种更⾼效的改进版本。希尔排序是⾮稳定排序算法。该⽅法因DL.Shell于1959年提出⽽得名。 希尔排序是把记录按下标的⼀定增量分组,对每组使⽤直接插⼊排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减⾄1时,整个⽂件恰被分成⼀组,算法便终⽌。希尔排序过程希尔排序的基本思想是:将...
2018-12-16 18:57:56 200
原创 用Python实现归并排序
归并排序归并排序是采⽤分治法的⼀个⾮常典型的应⽤。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最⼩之后,然后合并两个有序数组,基本思路是⽐较两个数组的最前⾯的数,谁⼩就先取谁,取了后相应的指针就往后移⼀位。然后再⽐较,直⾄⼀个数组为空,最后把另⼀个数组的剩余部分复制过来即可。归并排序的分析代码实现:def merge_sort(alist): if len(alist) ...
2018-12-16 18:42:36 245
原创 用Python实现插⼊排序
插⼊排序插⼊排序(英语:Insertion Sort)是⼀种简单直观的排序算法。它的⼯作原是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到应位置并插⼊。插⼊排序在实现上,在从后向前扫描过程中,需要反复把已排元素逐步向后挪位,为最新元素提供插⼊空间。插⼊排序分析代码实现:def insert_sort(alist): # 从第⼆个位置,即下标为1的元素开始向前插⼊...
2018-12-16 18:33:38 555
原创 用Python实现选择排序
选择排序选择排序(Selection sort)是⼀种简单直观的排序算法。它的⼯作原理如下。⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最⼩(⼤)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换⼀对元素,它们当中⾄少...
2018-12-16 18:26:43 298
原创 用Python实现快速排序
快速排序快速排序(英语:Quicksort),⼜称划分交换排序(partitionexchangesort),通过⼀趟排序将要排序的数据分割成独⽴的两部分,其中⼀部分的所有数据都⽐另外⼀部分的所有数据都要⼩,然后再按此⽅法对这两部分数据分别进⾏快速排序,整个排序过程可以递归进⾏,以此达到整个数据变成有序序列。步骤为:从数列中挑出⼀个元素,称为"基准"(pivot),重新排序数列,所有元素...
2018-12-16 18:15:59 331 2
原创 用Python实现冒泡排序
冒泡排序(英语:Bubble Sort)是⼀种简单的排序算法。它重复地遍历要排序的数列,⼀次⽐较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的⼯作是重复地进⾏直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越⼩的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:⽐较相邻的元素。如果第⼀个⽐第⼆个⼤(升序),就交换他们两 个。 对每⼀对相邻...
2018-12-16 17:58:22 546
Python灰帽子-黑客与逆向工程师的Python编程之道Python灰帽子-黑客与逆向工程师的Python编程之道
2018-11-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人