数据结构
一忙解千愁3
这个人不懒,但什么都没有留下......
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
KMP
title: KMPdate: 2020-10-27 00:27:16tags: [KMP, AL, C语言, 算法, 数据结构, DS]categories: DSandALKMP算法,代码写的不好看,也不简洁,自己手敲的,也算是开天辟地了后续持续优化代码 + 思路详细讲解,只希望让后来者少踩坑,起码不要踩我踩过的坑 T^T先附上代码,后续更新详细讲解非递归求next数组// 开始手写KMP 自我感觉还是不太好的// 串的底层用静态数组实现#include <stdio.原创 2021-04-22 20:09:16 · 181 阅读 · 0 评论 -
链表头插, 链表逆置
title: reverse the linkListdate: 2020-09-23 17:49:03tags: [链表头插, 链表逆置, C语言, 算法, AL, DS]categories: DSandAL链表的头插和逆置操作,很有技巧性,很值得思考#include <stdio.h>#include <stdlib.h>typedef struct MyStruct{ int data; struct MyStruct* next;}Node, .原创 2021-04-21 17:01:51 · 121 阅读 · 0 评论 -
二叉树与树
title: 二叉树date: 2020-11-07 21:25:16tags: 二叉树categories: 数据结构主要记录个人认为比较重要或是易错的知识二叉树和树 区分二叉树不是树, 因为相比于树,它多了两个条件,每个结点的度最多是2 (此属性并不能否定它是一个树,因为可以认为是树的一种特殊形式)。每个结点的孩子(若有孩子)有左右之分,这个条件直接否定了它是一个树,因为树的孩子可以没有左右之分。二叉树的性质三对任何一棵二叉树 T,如果其叶子数为 n_0,度为 2 的结点数.原创 2021-04-21 17:00:09 · 2721 阅读 · 0 评论 -
二分搜索
title: 二分搜索date: 2020-12-22 20:25:07tags: 二分搜索categories: 数据结构二分搜索,写的时候和快排做了一波对比,还是有一些收获的// 二分搜索// 二分搜索不同于快排中的二分递归,// 二分搜索路径只有一条,只要找到头就可以了// 而快排中的二分需要全覆盖(因为是要对整个数组进行排序)// 这也是为什么二分搜索不使用递归也可以很轻松地实现// 递归写法和非递归写法#include <stdio.h>#define .原创 2021-04-21 16:59:36 · 116 阅读 · 0 评论 -
非递归后序遍历二叉树
title: 非递归后序遍历二叉树date: 2020-12-25 20:06:53tags: 后序遍历categories: 数据结构使用栈实现后序遍历二叉树写了很久很久很久,可能是自己太长时间没写这样的代码了吧,简直把自己写崩溃了,不过还好,终于算是写出来了。有的是写了才发现存储结构开的不对, 有的是平时没有遇到的比较神奇的bug 也不算是神奇吧,就是平时没有遇见过的问题,也算是有收获了。爱瞎搞,爱作,可不就遇到很多阴间问题呗~ hhhhhh里边附带了一个自己瞎搞想出来的偷懒生成满.原创 2021-04-21 16:58:24 · 347 阅读 · 0 评论 -
广义表之树的兄弟孩子表示法
title: 广义表之树的兄弟孩子表示法date: 2020-11-17 15:55:55tags:兄弟孩子广义表二叉树categories: 数据结构用兄弟孩子广义表来表示二叉树对比二叉树转化来的兄弟孩子广义表和普通的兄弟孩子广义表并不相同二叉树转换成的兄弟孩子广义表没有明确的一块内存结构来直接表示它是叶子节点还是双亲结点,而是通过 指针 tp 来隐式地表示,tp 指向空,表示它没有孩子节点,否则,有孩子结点普通的兄弟孩子广义表则是通过 tag = 0 或 1 来表示.原创 2021-04-21 16:57:45 · 1628 阅读 · 0 评论 -
稀疏矩阵转置
title: 稀疏矩阵转置date: 2020-10-30 14:38:52tags: 稀疏矩阵转置categories: 数据结构稀疏矩阵的转置#include <stdio.h>#define MAX_LENGTH 100// 定义一个用来表示非零元素的结构体typedef struct a{ // 非零元素的行下标 int rowIndex; // 非零元素的列下标 int colIndex; // 非零元素的值 .原创 2021-04-21 16:57:03 · 243 阅读 · 0 评论 -
快速排序
title: 快速排序date: 2020-11-01 21:45:34tags: 快速排序categories: 数据结构快速排序,分治递归主要思想分治(二分)递归取一个标准值,将比标准值小的放在标准值前,比标准值大的放在标准值后。 此操作视为进行了一次快排然后对标准值前面的子数列和标准值后面的子数列分别进行快排,就这样通过调用递归函数不断地二分…直到第一步快排得到的前面的子数列在不断二分过程中得到的最后一个子数列的标准值和begin相等为止。二分递归比较难理解,建议在纸上演算一下.原创 2021-04-21 16:55:50 · 107 阅读 · 0 评论 -
双向链表基本操作
title: 双向链表基本操作date: 2020-10-12 21:12:51tags: 双向链表categories: 数据结构 双向链表的基本操作初始化一个空的双向链表尾插添加结点顺序随机掉头逆序打印双向链表按序号添加结点按序号删除结点// 双向链表#include <stdio.h>#include <stdlib.h>typedef struct linkList{ int dat.原创 2021-04-20 19:02:13 · 284 阅读 · 0 评论 -
头指针单向链表基本操作
title: 头指针单向链表基本操作date: 2020-10-04 16:47:34tags: 单链表基本操作categories: 数据结构感觉每次自己提前写的东西都和老师讲的书上内容不太一样= =当然大多数是老师讲的更正规一些,毕竟我只是一个会了链表本质就瞎玩的人属于自己琢磨,自己造的那种,很多东西也是不怎么规范但是有的东西我就觉得自己的更好比如下面所说…课本上写的是以头指针为基本单位,每次开一个头指针,即可视为开辟了一个链表。而我参考了动态数组静态数组的写法,将头指针作为了.原创 2021-04-20 19:01:37 · 301 阅读 · 0 评论 -
稀疏矩阵乘法
title: 稀疏矩阵乘法date: 2020-11-09 19:31:44tags: 稀疏矩阵运算categories: 数据结构在本算法中,两个稀疏矩阵的特性都有用到规定规定以下变量名称,本文讲述 矩阵A × 矩阵B = 矩阵C 的运算过程需要用到的存储结构有:矩阵A,矩阵 B 的原始二维数组(2个)矩阵A,矩阵B 的三元组数组(2个)存储 矩阵A,矩阵B 每行有多少个非零元的数组(2个,分别存A、B矩阵)存储 矩阵B每行首个非零元在三元组数组中的位置的数组(1个)需要开.原创 2021-04-20 19:00:56 · 2691 阅读 · 1 评论 -
简单选择排序
title: 简单选择排序date: 2020-12-22 21:35:48tags: 排序算法categories: 数据结构选择排序 ,最简单的排序算法之一平均时间复杂度最坏时间复杂度空间复杂度稳定性O(n^2)O(n^2)O(1)不稳定// 选择排序// 首先通过 n –1 次关键字比较,从 n 个记录中找出关键// 字最小的记录,将它与第一个记录交换。 // 再通过 n –2 次比较,从剩余的 n –1 个记录中找出关键// 字次小的记录,.原创 2021-04-20 19:00:21 · 135 阅读 · 0 评论 -
循环队列
title: 循环队列date: 2020-10-22 21:14:05tags: 循环队列categories: 数据结构循环队列,底层内存结构:静态数组灵魂思想: 将指针的自增改为 指针 = (指针+ 1) % (数组的真实长度)// 循环队列// 为了区分空队列和满队列// 在这里我们认为当整个数组只剩下队尾的那块空间时,队列已满// 当对头和队尾相等时,列队空// 因此 队列中成员个数的最大值是 MAX_SIZE - 1#include <stdio.h>.原创 2021-04-20 18:59:35 · 170 阅读 · 0 评论 -
循环链表的打印 合并
title: 循环链表的打印 合并date: 2020-10-02 21:12:27tags: 打印、合并循环链表categories: 数据结构本文中的所有操作均使用 设有尾指针的循环链表完成,目前只写了打印和合并两个操作,后续持续更新~看名字都可以知道,使用尾指针的循环链表和使用头指针单链表的区别顾名思义,很容易就看出它们两个有以下这两个区别:前者没有头指针,只有尾指针,尾指针存的是尾结点的地址,即它指向尾结点,尾指针->next 就得到了头结点的地址前者的尾结点.原创 2021-04-20 18:58:43 · 630 阅读 · 0 评论 -
依据广度优先的输入字符串 生成二叉树
title: 依据广度优先的输入字符串 生成二叉树date: 2020-12-26 11:18:34tags: 二叉树categories: 数据结构根据广度优先输入的字符串 生成一颗二叉树说明 这个根据输入的字符串自动生成一个二叉树 使用的思想是广搜(BFS) 要用到队列生成二叉树 举个例子 输入 12634^7^^^58^^^^^ 生成的二叉树为: 1 / \ .原创 2021-04-20 18:57:52 · 257 阅读 · 0 评论 -
直接插入排序
title: 直接插入排序date: 2020-12-22 16:48:21tags: 排序算法categories: 数据结构直接插入排序,注释中给了比较详细的理解平均时间复杂度最坏时间复杂度空间复杂度稳定性O(n^2)O(n^2)O(1)稳定讲解版#include <stdio.h>int main(void){ // 初始化一个数组,0号空间不用,给它赋值成0 int arr[11] = {0, 0, 8, 5, 1, 2, .原创 2021-04-20 18:57:04 · 174 阅读 · 0 评论 -
自动生成完全二叉树
title: 自动生成完全二叉树date: 2020-12-25 20:22:05tags: 完全二叉树categories: 数据结构需要写完全二叉树的算法时,再也不用费时间去初始化一个二叉树了hh~存储结构二叉链表, 如果要写的算法不是基于二叉链表,那么肯定就偷不了懒啦思路基本思路就是直接生成一个数组长度length的节点然后利用完全二叉树的性质和数组的下标把它们串起来要用到的完全二叉树的性质分支节点个数 = 总节点个数 整除 2 (在数学中就是 除以二 再向下取整)序.原创 2021-04-20 18:56:15 · 916 阅读 · 0 评论 -
动态数组操作
动态数组操作均封装成函数,涉及到的操作有:动态数组初始化打印添加元素删除元素代码附上// 动态数组#include <stdio.h>#include <stdlib.h>#define InitialSize 10#define EachIncreaseSize 10#define BatchAddNumber 10typedef struct DynamicArray{ int *array; int arrayLenth原创 2020-10-02 18:52:43 · 469 阅读 · 0 评论 -
合并两个有序链表
两个有序链表合并为一个有序链表。使用三个指针分别起到遍历三个链表的作用。#include <stdio.h>#include <stdlib.h>// 在这里宏定义链表1和链表2的长度#define LISTONE_LEN 10#define LISTTWO_LEN 6typedef struct list{ int data; struct list *next;} Node, *pNode;// 添加结点void AddNode(pNo原创 2020-09-29 18:05:51 · 112 阅读 · 0 评论
分享