![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 82
每天学一点!
时刻保持对知识的热情!
展开
-
数据结构-逻辑结构和物理结构
往后的读书笔记只记录重要知识点简单的语言概括出完整的知识点。程序设计=数据结构+算法;数据结构——阐述关系;它又分为逻辑结构和物理结构;逻辑结构有四大结构:(1)集合结构 : 集合结构中的元素关系,除了同属于一个集合这个关系以外,再无其他关系。(2)线性结构:线性结构中,元素间的关系就是一对一,顾名思义,一条线性的结构。(3)...转载 2018-10-19 15:57:40 · 7344 阅读 · 2 评论 -
非比较排序02-桶排序
0 前言基于非比较的排序主要有三种:计数排序、桶排序、基数排序。而计数排序和基数排序可以理解为桶排序的特殊情况。基于非比较排序对代排序列有要求,比如说元素大小。所以其没有比较排序常用(如快排、堆排等)。 1 桶排序定义将待排序列分到有限数量的桶子里,每个桶子再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。当待排序列是均匀分布时,时间复杂度为O(n)...原创 2019-01-23 19:47:27 · 194 阅读 · 4 评论 -
工程中综合排序的选择
1、若你需要排序的是基本数据类型,则选择快速排序。若你需要排序的是自定义数据类型,则选择归并排序。(**基于稳定性考虑**)因为基本数据类型之间无差异,不需要考虑排序算法稳定性,而归并排序则可以实现算法的稳定性。 2、当你需要排序的样本数量小于60,直接选择插入排序,虽然插入排序的时间复...转载 2019-01-15 19:17:24 · 1051 阅读 · 0 评论 -
堆排序
堆排序首先要了解以下几个基础概念:(如果不知道树或者二叉树是啥,建议先了解基础知识)(1)完全二叉树(2)大根堆、小根堆。1 完全二叉树定义:除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐。则根据定义,可以得到以下两个结论:(1)满二叉树必定是完全二叉树(2)非满二叉树中,完全二叉树如左图所示,非完全二叉树如右图所示 ...原创 2019-01-14 17:48:31 · 454 阅读 · 0 评论 -
数据结构-树和二叉树01(定义、度、深度、有序树、森林)
树的定义树作为一种一对多的数据结构,其定义如下: 树(Tree)是n(n ≥ 0)个结点得有限集。n = 0时称为空树。在任何一颗非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n > 1时,其余结点可分为m(m > 0)个互不相交的有限集,其中每个集合本事又是一棵树,并且称为根的子树。 图中,A为根结点A,...原创 2019-02-23 14:46:10 · 14259 阅读 · 7 评论 -
非比较排序01-计数排序
0 前言基于非比较的排序主要有三种:计数排序、桶排序、基数排序。而计数排序和基数排序可以理解为桶排序的特殊情况。基于非比较排序对代排序列有要求,比如说元素大小。所以其没有比较排序常用(如快排、堆排等)。 1 计数排序定义百度百科:计数排序是一个非基于比较的排序,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο...原创 2019-01-18 11:13:41 · 192 阅读 · 0 评论 -
快排1-荷兰国旗问题
题目一(1)题目描述给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)。(2)算法思路假设给定的数组如下,数组大小为N,num=5.,X初始化为-1,表示的意思是下标<=X的数,都<=num。规定,当前数若<=num,则将此值与X的下一个位置的数进...原创 2019-01-03 17:44:17 · 262 阅读 · 0 评论 -
快排2-经典快排和荷兰国旗快排
基础知识见:https://blog.csdn.net/songsong2017/article/details/85615470《建议先阅读基础知识,并自己手推一遍》1 经典快排算法原理:第一步:取数组最后一个数作为num,将数组中的 <= num的数放在数组的左边,> num的数放在数组的右边,这是可以理解为分成了两个数组;第二步:然后将 <= nu...原创 2019-01-08 10:22:24 · 191 阅读 · 0 评论 -
冒泡、插入、选择、归并排序
1 冒泡排序算法原理: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 时间/空间复杂度:若文件的初始状态是正序的,一趟...原创 2018-12-21 19:25:15 · 170 阅读 · 0 评论 -
线性表(链式存储结构)
前言线性表(顺序存储结构-用数组描述)为了解决顺序存储不足:用线性表另外一种结构-链式存储。在顺序存储结构(数组描述)中,元素的地址是由数学公式决定的,而在链式储存结构中,元素的地址是随机分布的,每个元素都有一个明确的指针指向线性表的下一个元素的位置(即地址)。 1 链表描述线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是...原创 2018-12-06 09:30:11 · 16376 阅读 · 1 评论 -
特殊的线性表-队列
链接:(1)线性表(用数组描述)(2)线性表(用链表描述)(3)特殊线性表(栈) 1 队列的定义队列(queue)是一个线性表,其插入和删除操作分别在表的不同端进行。队列是一种先进先出不(First In First Out)的线性表,简称FIFIO。插入元素的那一端称为队尾(back或rear),删除元素的那一端称为队首(front)。 假设队列是 q=(a1,a...原创 2018-12-26 12:46:07 · 970 阅读 · 0 评论 -
特殊的线性表-栈
链接1:线性表(数组实现)链接2:线性表(链表实现)1 栈的定义栈(stack,zhan):把线性表的插入和删除操作限制在同一端进行,就得到栈数据结构。把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。栈是一个线性表,栈元素具有线性关系,即...原创 2018-11-09 19:44:09 · 1240 阅读 · 0 评论 -
线性表-数组描述
1 线性表定义线性结构:线性结构中的元素之间的关系是一对一的关系。线性表(linear list):也称有序表(order list),它的每一个实例都是元素的一个有序集合。每一个实例的形式为(e0,e1,e2,...,en-1),其中n是有穷自然数,ei是线性表的元素,i是线性表元素ei的索引,n是线性表的大小或长度。元素可以被看做原子,它们本身的结构与线性表的结构无关,但是必须是同...原创 2018-10-24 21:31:36 · 734 阅读 · 0 评论 -
单链表的创建(有头结点和无头结点)
前言在学链表的时候,对链表创建的过程一知半解。目前现在刷题的阶段,发现这部分很重要,所以这次完全解决这个知识点。1 带头结点的链表为了方便,创建带有10个结点的链表,链表的数据域为整数类型,取随机整数。链表结构如下图:1.1 头插法头插法的思想如下图:伪代码实现:(1)创建一个头结点,ListNode *head = new ListNode(10...原创 2019-02-28 18:41:26 · 35823 阅读 · 10 评论