
数据结构
蜗 @牛
没有简介
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序知识点总结
1、插入排序 稳定性:稳定 时间复杂度: 最优情况是正向排序 – O(n) 最差是逆向排序,每次插入都需要比较已完成数列元素的个数 – O(n^2) 空间复杂度:O(1) void Insertsort(int *a,int n){ assert(a); for(int i=0;i<n-1;i++){ //排好序部分的尾标 int end=i; //保存要排序的数 int tmp=a[end+1]; /原创 2020-08-08 18:05:17 · 303 阅读 · 0 评论 -
数据结构知识点总结
一、顺序表和链表 1、顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组 上完成数据的增删查改。 静态顺序表:使用定长数组存储。 动态顺序表:使用动态开辟的数组存储。(常用) 2、链表 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 单向、双向 带头、不带头 循环、非循环 3、两者的区别 顺序表: 空间连续、支持随机访问 1)中间或前面部分的插入删除时间复杂度O(N) 2)增容的代价比较原创 2020-08-07 09:37:08 · 4233 阅读 · 0 评论 -
c++——哈希
概念 哈希是一种搜索数据结构,不过哈希搜索不同于顺序搜索和二叉搜索的是:哈希可以不经过任何比较,一次直接从表中得到要搜索的元素。它是通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数就可以直接找到该元素。 哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表 (Hash Table)(或者称散列表) 。 哈希冲突 哈希函数设置为:hash(key) = key % capacity; capacity为存储元素底层空间的大小。原创 2020-07-15 10:47:45 · 2333 阅读 · 0 评论 -
c++——map和set
键值对 用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值, value表示与key对应的信息。就好比字典中的中英对照。 一、set set文档介绍 特性 1、set的底层实现是通过红黑树实现的。 2、 set是按照一定次序存储元素的容器 。 3、在set中,元素的key(value)必须是唯一的,所以它具有去重的特性。set中的元素不能在容器中进行修改,但是可以从容器中插入或删除它们。 4、在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特原创 2020-07-12 17:40:07 · 773 阅读 · 0 评论 -
c++——红黑树
一、红黑树的概念 红黑树是一种二叉搜索树,但是每个结点都有表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的二叉搜索树。 二、红黑树的特性 1、每个节点要么是黑色,要么是红色。 2、根节点是黑色。 3、每个叶子节点(NIL)是黑色。 4、每个红色结点的两个子结点一定都是黑色。 5、任意一结点到每个叶子结点的路径都包含数量相同的黑结点。 三、红黑树的实现 1、红黑树的插入 (1)根节点为空,则直接插入原创 2020-07-10 17:44:32 · 357 阅读 · 0 评论 -
AVL树(平衡二叉树)
一、AVL树简介 AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。 平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树...转载 2020-07-08 15:52:26 · 851 阅读 · 0 评论 -
二叉搜索树解析
一、二叉搜索树 二叉搜索树又被叫做二叉排序树,它可以是一棵空树,也可以是具有以下性质的二叉树: 1、若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 。 2、若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 。 3、它的左右子树也分别为二叉搜索树。 二、二叉搜索树的构建 1、二叉搜索树的插入 对于一棵二叉搜索树来说,它的插入原则分为两种情况。 (1)、当树是空树时,直接插入即可,该节点即为头节点。 (2)、当树不是空树时,则需要按照二叉搜索树的性质进行插入。即:比当前节点小,放入当前节原创 2020-07-08 12:09:53 · 316 阅读 · 0 评论 -
堆的实现
堆的概念及结构: 如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。...原创 2020-03-20 16:25:23 · 123 阅读 · 0 评论 -
队列
1.队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 2.队列的实现 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低. //链式结构:表示队列...原创 2020-03-06 16:43:38 · 111 阅读 · 0 评论 -
栈
1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈,出数据也在栈顶。 2.栈的实现 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现...原创 2020-03-06 15:17:07 · 128 阅读 · 0 评论 -
链表总结
链表 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 实际中链表的结构非常多样,以下情况组合起来就有8种链表结构: 单向、双向 带头、不带头 循环、非循环 但是生活中最常用的则是无头单向非循环链表和带头循环双向链表 1、无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻...原创 2020-02-22 21:39:14 · 150 阅读 · 0 评论 -
顺序表总结
一、顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 顺序表一般可以分为: 1. 静态顺序表:使用定长数组存储。 2. 动态顺序表:使用动态开辟的数组存储。 //顺序表的静态存储 #define N 100 typedef int SLDataType; typedef struct SeqList { SLDataT...原创 2020-02-21 21:30:32 · 672 阅读 · 0 评论