![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
通过c语言实现各种数据结构
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
沙diao网友
我不缺对象,我有new
展开
-
【数据结构】顺序表(C语言)
顺序表一.顺序表1.结构定义2.结构操作2.1插入操作2.2删除操作3.代码演示4.优化(malloc、calloc、realloc)数据结构=结构定义+结构操作一.顺序表1.结构定义结构定义主要包含下面3个方面:存放数据的数组顺序表的大小size当前顺序表的长度(顺序表中的元素个数)length2.结构操作2.1插入操作先将待插入位置后的数据整体往后平移一位在待...原创 2020-04-24 00:22:19 · 364 阅读 · 0 评论 -
【数据结构】链表(c语言)
链表1.结构定义链表的优缺点2.结构操作2.1链表插入2.2链表删除3.代码演示4.头插法1.结构定义不需要一片连续的存储空间,空间可以是分散的,通过指针连接在一起链表是由一个个链表节点组成,前一个节点指向后一个节点链表=程序内部+内存内部,在程序中我们只能拿到一个头节点head,当需要对其他节点进行操作时,我们需要通过头节点不断向后遍历拿到所需的节点链表节点由两部分组成:数据域:...原创 2020-04-24 23:37:53 · 200 阅读 · 0 评论 -
【数据结构】选择排序与快速排序(不稳定排序)
1.选择排序步骤:将数组分为『已排序区』和『待排序区』每一轮从『待排序区』中选择一个最小的元素放在『已排序区』的尾部直到『待排序区』没有元素为止过程:第一轮:3 10交换第二轮:9 4交换第三轮:8 5交换 以此类推时间复杂度:O(n2)选择排序是不稳定排序:53521 第一次51交换 第一个5就在第二个5后边了2.快速排序步骤:l为左指针指向最左元素,r为右指针指向最右元素,同时选取l的值为基准值指针前移r–,找到第一个比基准值小的元素,原创 2020-07-23 10:08:27 · 518 阅读 · 0 评论 -
【数据结构】哈希表(C语言)
哈希表结构操作可以分为哈希函数和冲突处理1.哈希函数通过数组下标访问value时间复杂度O(1)数组的下标是整型数值 ,如果我们将任意类型的元素映射成整型,那么我们就可以直接访问下标数值–>通过哈希函数的映射–>得到存储该数值的地址–>将数值放在对应的地址如果要寻找value,则我们只需要通过映射得到地址,对比地址上的数是否为value即可eg:2.冲突处理问题:7和16都会要插入下标为7的位置–>冲突问题冲突处理:7处有数值,放在后一个位置没有完美的哈希原创 2020-08-05 10:17:06 · 198 阅读 · 0 评论 -
【数据结构】并查集(C语言)
并查集前提是具有传递性 可逆点之间连通后在连接就无效了(右上角图)1.quick-find1.1性质基于染色的思想,一开始所有的点的颜色不同连接两个点的操作,可以看成将一种颜色的点染成另一种颜色如果两个点的颜色一样,证明连通,否则不连通这种方法叫做并查集的【Quick-Find算法】用数组arr[i] = i实现quick-find:不断的将与前面点的颜色一样的点(包含这个点)改为后面点的颜色0–1:arr[0] = 11–2:arr[1] = 2, arr[0] = 22原创 2020-08-04 11:14:54 · 395 阅读 · 0 评论 -
【数据结构】二叉排序树(C语言)
二叉排序树性质插入操作删除操作缺点代码演示性质左子树<根结点右子树>根结点二叉排序树的中序遍历即为从小到大的序列(左根右)解决与排名相关的检索需求:查找排名第k位的元素,有下面三种情况左子树size>=k,在左子树左子树size=k-1,在根结点左子树size<k-1,在右子树的第k-size-1个元素各个节点的size:插入操作新插入的元素一定插在叶子节点,插入1010<20 左 10<17左 10>3右删除操作删除操作原创 2020-07-24 09:54:04 · 174 阅读 · 0 评论 -
【数据结构】AVL树——平衡二叉排序树(C语言)
AVL树——平衡二叉排序树性质调整操作AVL树-左旋AVL树右旋失衡类型LL/RRLR/RL代码演示性质当一棵普通的二叉排序树是右边这个样子,树–>链表那么二叉树的查找效率就由O(logn)退化成了O(n)右边的树是不平衡的,下面介绍一种平衡二叉排序树——AVL树AVL树的平衡条件:节点左右子树的高度差<=1上述条件保证树不会退化成链表高度h的BS树节点个数 h<=n<=2h-1高度为h的AVL树节点个数1.5h<=n<=2h-1low(h) =原创 2020-07-24 15:12:23 · 413 阅读 · 0 评论 -
【数据结构】红黑树RBTree——平衡二叉排序树(C语言)
红黑树代码,解析有时间上#include<stdio.h>#include<stdlib.h>#include<time.h>#define RED 0#define BLACK 1#define DBLACK 2typedef struct Node{ int key; int color; // 0 red, 1 black, 2 double black struct Node *lchild, *rchild;} Node原创 2020-05-16 17:07:16 · 341 阅读 · 0 评论 -
【数据结构】SBTree——平衡二叉排序树(C语言)
1.平衡条件uncle节点的节点个数大于等于自身节点个数如39节点,左子树size = 0, 右子树的右子树size = 1, 所以39需要调整2.旋转操作左旋和右旋 见AVL树3.旋转的触发LL型(size[left[left[t]]] > size[right[t]]):首先对子树t执行右旋操作,旋转以后对t的右子树进行调整,之后再对子树t进行调整LR型(size[right[left[t]]] > size[right[t]]):首先对t左子树执行左旋操作,再原创 2020-07-29 09:33:28 · 465 阅读 · 0 评论 -
【数据结构】树状数组——改进前缀和
树状数组1.性质2.修改操作3.查询操作4.代码演示1.性质普通的前缀和数组si=ai+ai-1+ai-2+……+a1当我们需要查询si时,其时间复杂度为O(1)但当我们想要修改ai的数值时,我们需要需改si及以后的所有前缀和的值直到sn修改的时间复杂度为O(n)树状数组是修改过后的前缀和数组,其查询和修改的时间复杂度都为O(logn)树状数组前缀和是前面几项的和,不是前面所有的和lowbit(i)为i的二进制表示非零最低位的位权eg:lowbit(8) 8 = 1000 非零最原创 2020-07-29 11:27:55 · 269 阅读 · 0 评论