![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
dodobibibi
除了爱学习,一无是处。。。
展开
-
【树】二叉树
数的概念树(英语:tree)是一种抽象数据类型(ADT)或是视作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点树的术语没有父节点的节点称为根节点每一个非根节点有且只有一个父节点除了根节点...原创 2020-02-19 04:10:39 · 145 阅读 · 0 评论 -
【算法】二分法查找
搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,意为该项目是否存在。搜索的集中常见方法:顺序查找、二分法查找、二叉树查找、哈希查找。二分法查找二分法查找又称折平查找,优点是比较次数少,查找速度快,平均性能好,其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关...原创 2020-02-18 04:56:07 · 281 阅读 · 0 评论 -
【算法】归并排序
归并排序是采用分治法的一个非常典型的应用,归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。时间复杂度:最优时间复杂度:O(nlogn)最坏时间复杂度:O(nlogn)稳定性:稳定def merg...原创 2020-02-18 04:13:19 · 115 阅读 · 0 评论 -
【算法】快速排序
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort)。通过一趟排序将要排序的数据分割成独立的两部分。其中一部分的所有数据都比另外一部分的所有数据都要小,然后在按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤为:从数列中挑出一个元素,称为“基准”重新排序数列。所有元素比基准值小的摆放在基准...转载 2020-02-18 01:49:41 · 251 阅读 · 1 评论 -
【算法】希尔排序
希尔排序(英文:Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该算法因DL.Shell于1959年提出而得名。希尔排序是记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减少至1时,整个文件恰被分成一组,算法便终止。希尔排序过程:希尔排序的基本思路是将数组列在...原创 2020-02-15 00:58:31 · 210 阅读 · 0 评论 -
【算法】插入排序
插入排序(英语:Insertion sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后面扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供空间。最优时间复杂度:O(n)(升序排列,序列已经处于升序状态)最坏时间复杂度:O(n2)稳定性:稳定def insert_sort(al...原创 2020-02-15 00:49:51 · 136 阅读 · 0 评论 -
【算法】选择排序
选择排序(Selection sort)是一种简单直观的排序算法。他的工作原理如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则他不会被移动。选择排序每次交换一对元素,他们中至少有一个将被移到其最终位置上。因此对n个元素的表进行排序总共进行至多n-...原创 2020-02-12 04:01:06 · 128 阅读 · 0 评论 -
【算法】冒泡算法
冒泡算法(英语:Bubble sort)是一种简单的排序算法。它重复的遍历要排序的数列,一次比较两个元素,如果它们的顺序错误,就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元素做同...原创 2020-02-12 03:07:50 · 336 阅读 · 0 评论 -
【算法】排序与搜索
排序算法(英语:strong algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。排序算法的稳定性稳定性:稳定排序算法会让原本有相等键值的记录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的记录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对将要以他...原创 2020-02-12 02:55:16 · 115 阅读 · 0 评论 -
【数据结构】队列、双端队列
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为对头。队列不允许在中间部位进行操作。假设队列是q={a1,a2,…,an},那么a1就是对头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生...原创 2020-02-06 02:45:54 · 342 阅读 · 0 评论 -
【数据结构】栈
栈(stack),有些地方称为堆栈。是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念。保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO,Last In Fir...原创 2020-02-06 02:38:34 · 102 阅读 · 0 评论 -
【数据结构】单向循环链表
单链表的一个变形是单向循环表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。class Node(object): """节点""" def __init__(self, elem): self.elem = elem self.next = Noneclass SingleCycleLink(object): ...原创 2020-02-06 01:20:02 · 154 阅读 · 0 评论 -
【数据结构】双向链表
一种更复杂的链表是双向链表或双面链表。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;另一个指向下一个节点,当此节点为最后一个节点时,指向空值。...原创 2020-02-06 00:52:14 · 125 阅读 · 0 评论 -
【数据结构】介绍
概念:数据是一个抽象的概念,将其进行分类后得到程序设计语言中的基本类型。如:int、float、char等。数据元素之间不是独立的,存在特定的关系,这些关系便是结构。数据结构指数据对象中数据元素之间的关系。python给我们提供了很多现成的数据结构数据类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做python的内置数据结构。比如列表、元祖、字典。而有些数据组织方式,python系...原创 2020-02-04 01:46:02 · 97 阅读 · 0 评论 -
算法
算法的概念算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般的,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。算法是独立存在的一种解决问题的方法和思路。对于算法而言,实现的语言并不重要,重要的是思想。算法可以有不同的语言描述实现版本(如C描述、C++描述、python描述等等)...原创 2020-02-04 01:32:56 · 593 阅读 · 0 评论 -
【数据结构】单向链表
单向链表也叫单链表,是链表中最简单的一种形式,他的每个节点包含两个域。一个信息域(元素域(elem):用来存放具体的数据)和一个链接域(next:用来存放下一个节点的位置(python中的标识))。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。链表与顺序表的对比:链表失去了顺序表随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大,但对存储空间的使用相对灵...原创 2020-02-04 01:10:58 · 167 阅读 · 0 评论