
数据结构
数据结构和算法
李李李李李逍遥
这个作者很懒,什么都没留下…
展开
-
[数据结构] 数组和特殊矩阵的存储
数组的存储一维数组数组名实际上就是数组首地址,是一个地址常量,本质上是一个数 数组名也可以进行运算,是逻辑上的运算,并不是直接的数字运算 arr[0]和*arr是一样的 *(arr+1)和arr[1]是一样的 arr和&arr[0]是一样的 数组存储空间时连续的,是线性的,所以算地址的时候可以用等差数列的公式a[n]地址=a[m]地址+(n-m)*元素占用空间例证:...原创 2019-08-27 10:59:40 · 671 阅读 · 0 评论 -
[数据结构] 内排序(2)
上一篇文章提到了快速排序、冒泡排序、直接插入排序、直接选择排序和希尔排序。这篇文章说堆排序、归并排序和基数排序。堆排序、快速排序和归并排序时间复杂度都是O(nlogn)堆排序二叉堆的定义二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。 当父结点的键值总是大于或等于任何一...原创 2019-09-06 11:19:46 · 196 阅读 · 0 评论 -
[数据结构] 内排序(1)
目录内排序和外排序排序的稳定性排序分类直接插入排序冒泡排序快速排序简单选择排序希尔排序内排序和外排序内排序:排序的数据放到内存能放得下,仅在内存中排序。 外排序:排序的数据放到内存放不下,还要借助外存。排序的稳定性定义:如果排序算法并不改变两个相同值的元素的相对位置,则此算法是稳定的。排序分类直接插入排序//...原创 2019-09-05 15:33:02 · 230 阅读 · 0 评论 -
[数据结构] 查找
顺序查找一个接着一个找,最简单的遍历,以顺序表或线性链表表示静态查找表,假设数组0号单元留空。算法如下:int SqlSearch1(int r[], int n, int k){ i = n; while(i > 0 && r[i] != k) { i--; } return i}此算法每次循环都要判...原创 2019-09-03 11:18:04 · 280 阅读 · 0 评论 -
[数据结构] 树和二叉树-哈夫曼树和哈夫曼编码
几个概念路径长度两个结点之间的路径长度是连接两结点的路径上的分支数。树的路径长度是各叶结点到根节点的路径长度之和。路径长度最小值带权路径长度树的带权路径长度是树的各叶子结点所带的权值与该结点到根的路径长度的乘积的和几种不同WPL的二叉树第一个:WPL=2*2+4*2+5*2+7*2=2(2+4+5+7)=36第二个:WPL=2*1+4*2+5*3+7*3...原创 2019-09-01 10:58:43 · 437 阅读 · 0 评论 -
[数据结构] 树和二叉树-平衡二叉树(AVL)
AVL的引入由于二叉排序树的查找效率与树的高度有关,为了避免树的高度增长过快,降低BST查找性能,规定在插入和删除二叉树的时候,要保证任意结点的左右子树高度差的绝对值不超过1,这样的二叉树就是平衡二叉树,即AVL树。定义结点左子树和右子树的高度差为该结点的平衡因子,则AVL树结点平衡因子只能是-1,0,1。因此,AVL树要么是一颗空树。要么是具有下列性质的二叉树:它的左右子树分别是平衡二叉...原创 2019-08-30 14:00:45 · 1332 阅读 · 2 评论 -
[数据结构] 树和二叉树-二叉排序树(BST)
二叉排序树二叉排序树(Binary Search Tree)又叫二叉查找树。要么是一棵空树,要么是一颗具有下列特性的二叉树:如果左子树不为空,那么左子树上所有结点关键字值都小于根节点。 如果右子树不为空,那么右子树上所有结点关键字值都大于根节点。 左右子树分别是一颗BST。也就是说,BST的中序遍历一定是升序。BST构造和插入#include <iostream>...原创 2019-08-30 13:14:10 · 978 阅读 · 0 评论 -
[数据结构] 树和二叉树-二叉线索树
线索二叉树遍历二叉树就是以一定的规则将二叉树中的结点排列成一个线性序列,从而得到二叉树结点的各种遍历序列。其实质就是对一个非线性结构进行线性化操作,使在这个访问序列中每一个结点(除了第一个和最后一个)都有一个直接前驱和直接后继。在二叉树的链式存储中,只能体现出父子关系,不能直接得到结点在遍历中的前驱和后继。前边提到,在有N个结点的二叉树中,有N+1个空指针域,如果利用这些空指针域存放指向其...原创 2019-08-30 11:52:22 · 363 阅读 · 0 评论 -
[数据结构] 树和二叉树-二叉树存储结构和遍历
二叉树的性质度为0的结点比度为2的结点多一个 非空二叉树第k层至多有pow(2,k-1)个结点 高度为h的二叉树至多有pow(2,h)-1个结点(用等比数列求和公式推)完全二叉树就像上面的图一样,上到下,从左到右依次生孩子,不能跳。其实就是满二叉树的子集,把满二叉树右下角的部分去掉了。完全二叉树的性质假设完全二叉树从上到下,从左到右编号1到n,则有最后一个非叶子结点是...原创 2019-08-27 15:28:24 · 385 阅读 · 0 评论 -
[数据结构] 树和二叉树-树的基本概念和存储
众做周知,逻辑结构分为:线性结构、树形结构、图形结构、集合四种。前面说的List(线性表)都是线性结构,一个前驱一个后继,树有一个前驱多个后继,就像下面这样的。树的应用很广了,比如省市县的关系就是树结构;计算机系统中文件系统就是树结构;国家、公司的组织结构都是输结构。树的几个概念结点的度:树中一个结点几个子节点的个数。 树的度:树中结点最大度数。 分支结点:有儿子的结点(即度大...原创 2019-08-27 14:47:01 · 378 阅读 · 0 评论 -
[数据结构] 线性表-顺序存储
线性表线性表是具有相同数据类型的n个数据元素的有限序列。n可以为0,这些数据元素在逻辑上有先后线性有序,因此叫线性表。线性表的存储结构顺序存储:用地址连续的存储空间存储 链式存储:用地址不一定连续的存储空间存储顺序表的插入、删除、按值查找效率线性表的链式存储结构单链表:表中每一个结点分为两部分,一部分是自己的数据,另一部分是指向下一个结点的指针域。 双链表:表中每一个...原创 2019-08-19 09:29:52 · 221 阅读 · 0 评论 -
[数据结构] 线性表-链式存储
链式存储结构相对于顺序存储结构最大的有点就在于插入和删除不需要移动大量元素,为了描述元素和元素之间的逻辑关系,必须在每个结点上不仅仅存自己数据,还要存关系,也就是所谓的指针域。链表的创建// 操作系统 win 8.1// 编译环境 Visual Stuido 2017#include<stdio.h>#include<malloc.h>#in...原创 2019-08-23 20:28:28 · 252 阅读 · 0 评论 -
[数据结构] 特殊的线性表-栈
栈是一种特殊的线性表,只允许在一段插入和删除,所以一般画图总把栈化成一个杯子,在杯口进入元素,在杯口移出元素。故有三个概念:栈顶:线性表允许插入和删除的一端(实际就是杯口) 栈底:不允许插入和删除的一端(实际就是杯底) 空栈:栈里边没元素因为线性表可以用顺序存储结构和链式存储结构表示,因此栈也可以。栈的顺序存储结构实现(顺序栈)顺序栈定义#define FALSE 0#d...原创 2019-08-23 20:50:43 · 733 阅读 · 0 评论 -
[数据结构] 特殊的线性表-队列
队列概念队列和栈类似,都是一种特殊的线性表,只允许在表的一端插入,在另一端删除;我们把允许插入的一端叫队尾,把允许删除的一端叫队头,同理空队列就是不含任何一个元素的队列。因为队列也是线性表,因此也有顺序存储结构和链式存储结构。队列顺序存储结构结构#define MaxSize 50typedef struct{ int data[MaxSize]; // 存放队列元...原创 2019-08-23 21:37:23 · 424 阅读 · 0 评论 -
[数据结构] 内排序算法分析
直接插入排序空间直接插入排序的原理是将未排好序的序列一个个地插入到已排好序的序列中,插入时,需要与已排好序的序列进行多次比较,直到找到合适的位置插入,而原来已排好序的部分节点可能需要进行后移操作,这个过程中需要一个额外的空间保存一个值用于交换节点,所以空间复杂度为O(1)。时间最坏情况:当待排序序列正好为逆序状态,首先遍历整个序列,之后一个个地将待插入元素放在已排序的序列最前面,之...原创 2019-09-07 10:44:36 · 221 阅读 · 0 评论