随笔分类 -  数据结构

摘要:1. 二叉树的遍历:先序(递归、非递归),中序(递归、非递归),后序(递归、非递归)。 2. 获取二叉树节点个数: 3. 判断二叉树是否为完全二叉树: 4. 求二叉树两个节点的最小公共祖先: 5. 二叉树的翻转: 6. 求二叉树第k层的节点个数: 7. 求二叉树中节点的最大距离(相距最远的两个节点之 阅读全文
posted @ 2018-08-28 17:14 博观&约取 阅读(5887) 评论(1) 推荐(0)
摘要:C语言实现单链表,并完成链表常用API函数: 1.链表增、删、改、查。 2.打印链表、反转打印、打印环形链表。 3.链表排序、链表冒泡排序、链表快速排序。 4.求链表节点个数(普通方法、递归方法)。 5.链表反转(普通方法、递归方法)。 6.链表合并。 7.获取链表中间节点。 8.判断链表是否有环。 阅读全文
posted @ 2018-08-17 14:13 博观&约取 阅读(1577) 评论(0) 推荐(0)
摘要:1. 数组快排: 方法一: 运行结果如下: 方法二:双指针错开 运行结果如下: 2. 链表快排: 阅读全文
posted @ 2018-08-16 22:22 博观&约取 阅读(1185) 评论(0) 推荐(0)
摘要:(1)二叉树的基本概念: 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree) (2)二叉树的性质(特性): 性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0) 性质2: 深度为k的二叉树至多有2^k - 阅读全文
posted @ 2018-07-05 15:51 博观&约取 阅读(186) 评论(0) 推荐(0)
摘要:(1)树的概念: 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点 阅读全文
posted @ 2018-07-05 15:26 博观&约取 阅读(164) 评论(0) 推荐(0)
摘要:(1)查找: 查找是在一个项目集合中找到一个特定项目的算法过程。查找通常的答案是真的或假的,因为该项目是否存在。 查找的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找 (2)二分查找: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困 阅读全文
posted @ 2018-07-05 11:30 博观&约取 阅读(196) 评论(0) 推荐(0)
摘要:(1)归并排序: 归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。 将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。 阅读全文
posted @ 2018-07-05 10:36 博观&约取 阅读(227) 评论(0) 推荐(0)
摘要:(1)快速排序: 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达 阅读全文
posted @ 2018-07-04 23:03 博观&约取 阅读(262) 评论(0) 推荐(0)
摘要:(1)希尔排序: 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含 阅读全文
posted @ 2018-07-04 21:38 博观&约取 阅读(252) 评论(0) 推荐(0)
摘要:(1)插入排序: 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 (2)插入排序 阅读全文
posted @ 2018-07-04 20:34 博观&约取 阅读(224) 评论(1) 推荐(0)
摘要:(1)选择排序: 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数 阅读全文
posted @ 2018-07-04 18:28 博观&约取 阅读(196) 评论(0) 推荐(0)
摘要:一. 排序算法概述: (1)排序与搜索: 排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。 (2)排序算法的稳定性: 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本 阅读全文
posted @ 2018-07-04 17:16 博观&约取 阅读(731) 评论(0) 推荐(0)
摘要:(1)双向链表定义: 一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。 (2)操作: is_empty(): 链表是否为空 length(): 链表长度 travel( 阅读全文
posted @ 2018-07-04 15:36 博观&约取 阅读(347) 评论(0) 推荐(0)
摘要:(1)单向循环链表定义: 单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。 (2)操作: is_empty(): 判断链表是否为空 length(): 返回链表的长度 travel(): 遍历 add(item): 在头部添加一个节点 append 阅读全文
posted @ 2018-07-04 11:30 博观&约取 阅读(252) 评论(0) 推荐(0)
摘要:1. 链表的定义: 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不 阅读全文
posted @ 2018-07-04 00:36 博观&约取 阅读(272) 评论(0) 推荐(0)
摘要:1. 普通队列的实现: (1)队列的表现形式: 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操 作!假设队列是q 阅读全文
posted @ 2018-07-03 21:48 博观&约取 阅读(222) 评论(0) 推荐(0)
摘要:1.时间复杂度(大O表示法): O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn) (1)Python中常用数据结构的时间复杂度: list内置操作的时间复杂度: dict内置操作的时间复杂度: (2)抽象 阅读全文
posted @ 2018-07-03 20:29 博观&约取 阅读(1802) 评论(0) 推荐(0)