
数据结构与算法--用C语言描述
关于数据结构的课堂总结和课后领悟, 以及书本内容的二次整理和归纳
风起风里
这个作者很懒,什么都没留下…
展开
-
icoding复习7, 8
icoding复习7 哈希,AVL 查找必考点!!!1. 哈希表创建typedef enum{ HASH_OK, HASH_ERROR, HASH_ADDED, HASH_REPLACED_VALUE, HASH_ALREADY_ADDED, HASH_DELETED, HASH_NOT_FOUND,} HASH_RESULT;typedef struct __HashEntry HashEntry;struct __HashEntry{...原创 2021-06-26 11:02:38 · 668 阅读 · 1 评论 -
icoding复习5 树 感觉难度巨大....
icoding 复习51. 先序遍历已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法:void pre_order(BiTree root);二叉树的相关定义如下:typedef int DataType;typedef struct Node{ DataType data; struct Node* left; struct Node* right;}BiTNode, *BiTree;遍历所使用栈的相关操作如下:#define S...原创 2021-06-24 22:07:45 · 519 阅读 · 0 评论 -
icoding复习4 数组 十字链表
icoding 复习4 1. 矩阵加法实现三元组表示的两个稀疏矩阵的加法。#define MAXSIZE 100 //假设非零元个数的最大值为100typedef struct { int i,j; //非零元的行下标和列下标,i 和 j 从 1 开始计数,与数学中矩阵元素的编号一致 ElemType e; //非零元的值}Triple;typedef struct { Triple dat...原创 2021-06-24 22:06:54 · 772 阅读 · 0 评论 -
icoding复习3
icoding复习31. 不调用库函数,自己实现字符串的比较操作:该操作当比较的两个字符是都是字母,且两个字符互为大小写(如a和A、e和E)时认为两个字符相同,否则不同,其比较结果按这两个字符的原值确定。函数的返回值规定如下:返回值 < 0:第一个不匹配的字符在 ptr1 中的值低于 ptr2 中的值返回值 == 0:两个字符串的内容相等返回值 > 0:第一个不匹配的字符在 ptr1 中的值大于在 ptr2 中的值int str_compare(const char* ptr1,原创 2021-06-24 22:05:45 · 1042 阅读 · 0 评论 -
icoding复习6 图
icoding复习61. 邻接表1试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下:typedef int VertexType;typedef enum{ DG, UDG}GraphType;typedef struct ArcNode{ int adjvex; InfoPtr *info; struct ArcNode *nextarc;}ArcNode;typedef struct VNode{...原创 2021-06-24 22:04:56 · 671 阅读 · 0 评论 -
icoding复习1,2
icoding复习 1链表 倒数查找1. 已知一个带有表头结点的单链表, 假设链表只给出了头指针L。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。函数原型为:int lnk_search(LinkList L, int k, ElemType* p_ele)若查找成功,函数通过指针参数 p_ele 返回该结点 data 域的值,此时函数返回 1;否则,函数返回 0。相关定义如下:struct _lnklist{ ElemType d..原创 2021-06-23 17:37:24 · 548 阅读 · 0 评论 -
第三个一千行+500行总结-数据结构C复习--知识点总结3--七到九章
第七章 (接知识点总结2) 图图的遍历://深度优先搜索#define OK 1#define True 1#define Error -1#define False 0typedef enum{DG, DN, UDG. UDN}Graph;int visited[MAX];//Graph代表图的一种存储结构比如邻接表,邻接矩阵void TranverseGraph(Graph g){ int vi; for(vi = 0; vi < g.ver...原创 2021-06-21 22:35:11 · 190 阅读 · 0 评论 -
第三个一千行+500行总结-数据结构C复习--知识点总结3--七到九章
第七章 (接知识点总结2) 图图的遍历://深度优先搜索#define OK 1#define True 1#define Error -1#define False 0typedef enum{DG, DN, UDG. UDN}Graph;int visited[MAX];//Graph代表图的一种存储结构比如邻接表,邻接矩阵void TranverseGraph(Graph g){ int vi; for(vi = 0; vi < g.ver...原创 2021-06-21 22:16:10 · 182 阅读 · 0 评论 -
第二个一千行总结-数据结构C复习--知识点总结2--五到七章
第五章 数组与广义表n维数组看作数据元素为n-1维数组的线性表数组地址计算:略特殊矩阵压缩:三角矩阵;三对角矩阵(带状矩阵);稀疏矩阵:存储数据总量小于百分之三十稀疏矩阵用三元组(行,列,值)储存,定义如下:typedef struct{ int row, col;//行,列 int e;}Triple;typedef struct{ Triple data[MAX+1]; int m, n, len;//行,列,数据总个数}TSM...原创 2021-06-21 16:45:07 · 217 阅读 · 0 评论 -
数组合并假设有 n 个长度为 k 的已排好序(升序)的数组,请设计数据结构和算法,将这 n 个数组合并到一个数组,且各元素按升序排列。即实现函数-C-icoding-排序-数据结构
数组合并假设有 n 个长度为 k 的已排好序(升序)的数组,请设计数据结构和算法,将这 n 个数组合并到一个数组,且各元素按升序排列。即实现函数:其中 arr 为按行优先保存的 n 个长度都为 k 的数组,output 为合并后的按升序排列的数组,大小为 n×k。时间要求(评分规则),当 n > k 时:满分:时间复杂度不超过 O(n×k×log(n))75分:时间复杂度不超过 O(n×k×log(n)×k)59分:其它,如:时间复杂度为 O(n2×k2) 时。...原创 2021-06-21 15:39:06 · 1022 阅读 · 0 评论 -
第一个一千行总结-数据结构C复习--知识点总结1--一到四章
总结第一章: 数据结构包括:逻辑结构,储存结构, 运算集合逻辑结构:分为线性(线性表, 栈, 队列, 字符串, 数组, 广义表) 非线性:树,图,网储存结构:顺序储存和非顺序储存 线性储存,散列储存,链式储存算法+数据结构 = 程序第二章: 线性表:2.2线性表的线性储存逻辑结构:除了端点以外,所有元素均有一个前驱和一个后继.具有一对一的关系.存储结构:一组地址连续的储存单元依次存储#define MAX 100typedef str...原创 2021-06-19 21:20:52 · 438 阅读 · 2 评论 -
堆化 二叉堆一般用数组来表示。typedef struct _minHeapNodetypedef struct _otherInfo-icoding-C-数据结构
堆化二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。在二叉堆上可以进行插入节点、删除节点、取出值最小的节点、减小节点的值等基本操作。“最小堆”的定义如下:...原创 2021-06-15 19:28:33 · 660 阅读 · 1 评论 -
堆元素插入 二叉堆一般用数组来表示。typedef struct _otherInfo{ int i; int j;}OtherInfo;-icoding-C-数据结构
堆元素插入二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。在二叉堆上可以进行插入节点、删除节点、取出值最小的节点、减小节点的值等基本操作。“最小堆”的定义如下:...原创 2021-06-15 19:11:39 · 736 阅读 · 1 评论 -
排序-总结
第九章 内部排序排序:重点在于对于记录的关键字进行排序,得到按关键字有序记录序列分为: A.内部排序: 排序过程在内存中进行 B.外部排序: 待排序记录数据量过大,需要借助外部存储设备排序的稳定性:排序后有相同关键字的记录顺序不变就是稳定的排序插入类排序:1.直接插入排序:将新加入的记录的关键字与之前的记录关键字从后往前比较, 若较小,则向前比较,同时进行比较的记录后移一个位置,直到找到小于等于的关键字,插入在其后.实例代码如下:...原创 2021-06-15 17:29:20 · 210 阅读 · 1 评论 -
数据结构-排序-分配类排序-知识点总结归纳3
分配类排序:核心是分配和收集,利用关键字的优先级进行排序的思想高位优先排序:比如桥牌,先比较花色在比较面值;比如学号,比较级,院,班,号;低位优先排序: 链式基数排序思想:基于"分配"和"收集"的操作, 将单关键字转化为多关键字排序将链表作为存储结构, 待排序记录以指针相连,构成链表;分配:按照关键字取值分配记录到链队列相应队列中,每个队列关键字取值相同收集:按照关键字大小,从小到大,将队列首尾相接连接成一个链表;重复上述步骤..定义:...原创 2021-06-15 17:25:17 · 479 阅读 · 0 评论 -
堆初始化-二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2-icoding-void init_min_heap(PMinHeap pq, int
堆初始化二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。在二叉堆上可以进行插入节点、删除节点、取出值最小的节点、减小节点的值等基本操作。“最小堆”的定义如下:typedef struct _otherInfo{ int i; int j;}OtherInfo;typedef struct _minHeapNode{ ...原创 2021-06-14 19:50:25 · 750 阅读 · 1 评论 -
堆辅助函数二叉堆是完全二叉树或者是近似完全二叉树。二叉堆有两种:最大堆和最小堆。“最小堆”的定义如下:typedef struct _otherInfo-icoding-C
堆辅助函数二叉堆是完全二叉树或者是近似完全二叉树。二叉堆有两种:最大堆和最小堆。最大堆(大顶堆):父结点的键值总是大于或等于任何一个子节点的键值,即最大的元素在顶端;最小堆(小顶堆):父结点的键值总是小于或等于任何一个子节点的键值,即最小的元素在顶端。二叉堆子结点的大小与其左右位置无关。二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。在二原创 2021-06-14 17:51:24 · 724 阅读 · 1 评论 -
AVL添加平衡二叉树,是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多等于1。-icoding-数据结构-C-typedef struct node{ int val;
AVL添加平衡二叉树,是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多等于1。它是一种高度平衡的二叉排序树。现二叉平衡树结点定义如下:原创 2021-06-14 17:20:20 · 852 阅读 · 3 评论 -
哈希表添加哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。typedef enum{ HASH_OK, -icoding
哈希表添加哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。哈希表相关定义如下:...原创 2021-06-13 16:42:01 · 1264 阅读 · 4 评论 -
邻接表1试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下:icoding---算法改进--配详细注释
邻接表1试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下:typedef int VertexType;typedef enum{ DG, UDG}GraphType;typedef struct ArcNode{ int adjvex; InfoPtr *info; struct ArcNode *nextarc;}ArcNode;typedef struct VNode{ VertexTyp原创 2021-06-10 22:14:38 · 927 阅读 · 3 评论 -
数据结构-第九章 内部排序-知识点总结2
选择类排序:1.简单选择排序:直接从数组中选择最小的记录和第一个记录交换位置,循环.示例代码如下:void SelectSort(int r[], int b){ int i, j, k; int x; for(i = 1; i < n; i++){ k = i; for(j = i+1; j <= n; j++){ if(r[j] < r[k])//选择最小的记录,得到在数组中的位置 k = j; } if(k != i){原创 2021-06-09 21:25:08 · 218 阅读 · 1 评论 -
哈希表创建哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构.typedef enum{ HASH_OK-icoding-数据结构-C
哈希表创建typedef enum{ HASH_OK, HASH_ERROR, HASH_ADDED, HASH_REPLACED_VALUE, HASH_ALREADY_ADDED, HASH_DELETED, HASH_NOT_FOUND,} HASH_RESULT;typedef struct __HashEntry HashEntry;struct __HashEntry{ union{ char *str原创 2021-06-06 19:28:06 · 813 阅读 · 3 评论 -
数据结构-第九章 内部排序-知识点总结1
第九章 内部排序排序:重点在于对于记录的关键字进行排序,得到按关键字有序记录序列分为: A.内部排序: 排序过程在内存中进行 B.外部排序: 待排序记录数据量过大,需要借助外部存储设备排序的稳定性:排序后有相同关键字的记录顺序不变就是稳定的排序插入类排序:1.直接插入排序:将新加入的记录的关键字与之前的记录关键字从后往前比较, 若较小,则向前比较,同时进行比较的记录后移一个位置,直到找到小于等于的关键字,插入在其后.实例代码如下:...原创 2021-06-06 17:56:59 · 424 阅读 · 2 评论 -
数据结构-查找-总结归纳知识点
//第八章 查找//基于线性表的查找// 1.顺序查找法//思想:所给的关键字和表中元素的关键字逐个比较分为:设置监视哨和不设监视哨监视哨:r[0]防止越界//2.折半查找法要求:顺序储存结构(不能链表),按照关键字大小有序排列(正序和逆序)思想:利用mid=(high+low)/2(整数). 判断条件:low<=high;//3.分块查找法要求:列表分为子表,最后一个子表长度可以不满;索引表每个索引对应每个块(子表)的起始位置,记录每个块的最大(最小)的关键字;索引表.原创 2021-06-05 17:02:12 · 356 阅读 · 0 评论 -
邻接表2 -试在邻接表存储结构上实现图的基本操作 del_vertex-数据结构-图-icoding
邻接表2试在邻接表存储结构上实现图的基本操作 del_vertex,相关定义如下:typedef int VertexType;typedef enum{ DG, UDG}GraphType;typedef struct ArcNode{ int adjvex; InfoPtr *info; struct ArcNode *nextarc;}ArcNode;typedef struct VNode{ VertexType data;原创 2021-05-27 16:12:09 · 889 阅读 · 0 评论 -
邻接表1 - 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc-数据结构-图-icoding
邻接表1试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下:typedef int VertexType;typedef enum{ DG, UDG}GraphType;typedef struct ArcNode{ int adjvex; InfoPtr *info; struct ArcNode *nextarc;}ArcNode;typedef struct VNode{ Ve原创 2021-05-27 15:41:48 · 1789 阅读 · 0 评论 -
数据结构-图-邻接矩阵-试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc-icoding
邻接矩阵试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc,相关定义如下:typedef int VertexType;typedef enum{ DG, UDG}GraphType;typedef struct{ VertexType vertex[MAX_VERTEX_NUM]; //顶点向量 int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵原创 2021-05-27 15:39:20 · 1269 阅读 · 0 评论 -
二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。
树转二叉树使用队列,编写transfrom函数,将普通树转换成对应的二叉树。二叉树的相关定义如下:typedef int DataType;typedef struct Node{ DataType data; struct Node* left; struct Node* right;}BiTNode, *BiTree;普通树节点的定义如下:#define MAX_CHILDREN_NUM 5struct _CSNode{ DataType dat原创 2021-05-16 18:09:27 · 475 阅读 · 1 评论 -
数据结构--二叉树--路径 假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点, 编写函数 path,计算root到 node 之间的路径,(该路径包括root结
假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点,编写函数 path,计算root到 node 之间的路径,(该路径包括root结点和 node 结点)。path 函数声明如下:bool path(BiTNode* root, BiTNode* node, Stack* s);其中,root指向二叉树的根结点,node指向二叉树中的另一结点,s 为已经初始化好的栈,该栈用来保存函数所计算的路径,如正确找出路径,则函数返回 true,此时root在栈底,n...原创 2021-05-13 21:51:30 · 2173 阅读 · 2 评论 -
数据结构--图的广度优先搜索
//图的遍历–广度优先搜索void BreadFirstSearch(Graph g int v0){visit(v0);visited[v0] = True;InitQueue(&Q);EnterQueue(&Q, v0);while(!IsEmpty(Q)){DeleteQueue(&Q, &v);w = FirstAdjVertex(g, v);while(w != -1){if(!visited[w]){visit(w);visited[w]原创 2021-05-12 19:37:31 · 163 阅读 · 0 评论