数据结构与算法
DAN_L
这个作者很懒,什么都没留下…
展开
-
二叉树的深度遍历
一、深度优先遍历对于一棵二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。二、二叉树的深度遍历的三种方法这三种方法常被用于访问树的节点,它们之间的不同在于访问每个节点的次序不同(一)先序遍历:先访问根节点,然后递归使用先序遍历访问左子树,再递归使用先序遍历右子树根节点->左子树->右子树(二)中序遍历:递归使用中...原创 2020-02-29 16:34:34 · 1791 阅读 · 0 评论 -
二叉树及其广度遍历
一、基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二、二叉树的特性(一)在二叉树的第i层上最多有2^(i-1)个节点(i>0)(二)深度为k的二叉树最多有2^k-1个节点(k>0)(三)对于任意一棵二叉树,如果其叶节点数为N0,而度数为2的节点总数为N2,则N0=N2+1(四)...原创 2020-02-29 15:27:04 · 260 阅读 · 0 评论 -
树的基本概念
一、树的概念树(Tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。之所以把它叫做树,是因为看起来像一棵倒挂的树,根朝上,叶朝下。二、树的特点(一)每个节点有0个或多个子节点(二)没有父节点的节点称为根节点(三)每一个非根节点有且只有一个父节点(四)除了根节点外,每...原创 2020-02-29 11:12:51 · 1229 阅读 · 0 评论 -
搜索
一、定义搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的。二、常见的搜索方法(一)顺序查找(二)二分法查找(三)二叉树查找(四)哈希查找三、二分法查找(一)定义二分法查找又称为折半查找,优点是比较次数少,查找速度快,平均性能好;缺点是要求待查表为有序表(即支持下标索引,即只能是有序的顺序表),且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁...原创 2020-02-28 21:11:08 · 130 阅读 · 0 评论 -
常见排序算法效率比较
原创 2020-02-28 16:07:28 · 179 阅读 · 0 评论 -
归并排序
一、定义归并排序(Merge Sort)是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。二、原理将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。三、时间复杂度(一)最优时间复杂度:O(nlogn)(二)最坏时间复...原创 2020-02-28 16:04:43 · 109 阅读 · 0 评论 -
快速排序
一、定义快速排序(Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、原理(一)从数列中挑出一个元素,称为“基准”(pivot)(二)重新排序数列,...原创 2020-02-28 09:30:29 · 185 阅读 · 0 评论 -
希尔排序
一、概念希尔排序(Shell Sort)是插入排序的一种,也称为缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。二、原理将数组列在一个表中并对列分别进行插入排序,重复这过程,不过每次用更长的列(步...原创 2020-02-27 21:31:18 · 180 阅读 · 0 评论 -
插入排序
一、概念插入排序(Insert Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。二、时间复杂度(一)最优时间复杂度:O(n)(升序排列,序列已经处于升序状态)(二)最坏时间复杂度:O(n^2)(三)稳定性:稳...原创 2020-02-27 12:59:39 · 179 阅读 · 0 评论 -
选择排序算法及实现
一、选择排序的概念选择排序(Select sort)是一种简单直观的排序算法。二、选择排序的原理首先在未排序序列中找到最小(大)元素,存放在排序序列的起始位置,再从剩余排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。三、选择排序的优点选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,...原创 2020-02-27 12:18:51 · 435 阅读 · 0 评论 -
冒泡排序
一、概念重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。二、冒泡排序的时间复杂度(一)最优时间复杂度:O(n)(表示遍历一次发现没有任何可以交换的元素,排序结束)(二)最坏时间复杂度:O(n^2)(三)稳定性:稳定三、冒泡排序的实现def...原创 2020-02-27 09:13:55 · 414 阅读 · 0 评论 -
排序与搜索的基本概念
一、定义排序算法(Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。二、排序算法的稳定性稳定性:稳定排序算法会让原本有相等键值的纪录维持相对的次序。也就是如果一个排序算法是稳定的,当有两个键值相等的纪录R和S,且在原本的列表中R出现在S之前,在排序之后的列表中R也将会在S之前。例如:(4,1) (3,1) (3,7) (5,6)排序后:(3...原创 2020-02-27 08:29:22 · 153 阅读 · 0 评论 -
栈与队列
一、栈(stack)(一)概念又叫堆栈,是一种容器,可存入元素、访问元素、删除元素。(二)特点1、只能在容器的一端(称为栈顶端指标top)进行加入数据(push)和输出数据(pop)的运算2、没有位置的概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。3、由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO,Last In First...原创 2020-02-27 08:17:47 · 179 阅读 · 0 评论 -
单向循环链表
一、定义单向循环链表是单链表的一个变型,链表中最后一个节点的next域不再是None,而是指向链表的头节点。二、操作1、is_empty()判断链表是否为空2、length()链表长度3、travel()遍历整个链表4、add(item)链表头部添加元素5、append(item)链表尾部添加元素6、insert(pos,item)指定位置添加元素7、remove(item)删...原创 2020-02-26 12:41:00 · 268 阅读 · 0 评论 -
双向链表
一、定义又叫做“双向链表”或者“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为尾节点时,指向空值。二、操作1、is_empty()判断链表是否为空2、length()链表长度3、travel()遍历整个链表4、add(item)链表头部添加元素5、append(item)链表尾部添加元素6、insert(p...原创 2020-02-26 12:14:06 · 175 阅读 · 0 评论 -
链表
线性表的实际存储方式分为顺序表和链表一、链表的定义链表:一种最基础的数据结构,是一种线性表,在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址),每个节点分为数据区和链接区两个部分。二、单向链表(一)定义单向链表又叫单链表,是l链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域,链接指向链表中的下一个节点,最后一个节点的链接域指向空值。第一节点叫...原创 2020-02-25 16:20:32 · 100 阅读 · 0 评论 -
内存与类型的本质
一、顺序表(一)顺序表的基本形式1、顺序表的基本布局(数据类型相同的情况下)只要确定了起始位置,表中任一元素的地址都通过下列公式得到Loc(ei)=Loc(e0)+c*i,c表示存储单元的大小2、元素外置顺序表(数据类型不相同的情况下)通过将物理地址的存储地址来找到不同数据类型存储的元素(二)顺序表的结构一个顺序表的完整信息包括两部分,一部分是表中的元素集合,另一部分是为实现正确...原创 2020-02-23 12:55:53 · 222 阅读 · 0 评论 -
Python内置类型性能分析
一、timeit模块二、Python列表与字典表操作的时间复杂度三、数据结构1、概念指数据对象中数据元素之间的关系。Python给我们提供了很多现成的数据结构类型,这些系统已经自己定义好,不需要我们自己去定义的数据结构叫做Pythond的内置数据结构,例如列表、元组、字典。而有些数据组织方式,Python系统里面并没有直接定义,需要我们自己去定义实现这些数据的组织方式,这些数据组织方...原创 2020-02-22 17:45:36 · 145 阅读 · 0 评论 -
算法的基本概念
一、算法的概念算法是计算机处理信息的本质,因为计算机本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。算法是独立存在的一种解决问题的方法和思想。对于算法而言,实现的语言并不重要,重要的是思想。算法可以有不同的语言描述实现版本二、算法的五大特性1、输入:算法具有0个或多个输入2、输出:算法至少有1个或多个输出3、有穷性:算法在有限的步骤之后会自动结束而不会无线循环,并且每一个...原创 2020-02-22 14:28:09 · 6527 阅读 · 0 评论