数据结构
文章平均质量分 57
田野爱上狗
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
知树的层次遍历序列及每个结点的度,将其实现为孩子兄弟表示法
/** * 知树的层次遍历序列及每个结点的度,将其实现为孩子兄弟表示法 * 当前结点度为孩子的个数,除了第一个孩子作为当前结点的左孩子,当前结点第n(n > 0)个孩子的右孩子为当前结点第n + 1(n + 1 < degree)个孩子 * 除根结点外,所有结点的右孩子在其父结点时已经处理完毕,当前结点只需要处理左孩子和孩子的右结点 */ void cp(Node*[] node, int[] degree, int n) { //TODO: 先将每个结点的左右孩子指向为NULL int原创 2020-06-05 09:30:05 · 1192 阅读 · 0 评论 -
满二叉树知前序求后序
/** * 满二叉树的根结点把二叉树划分为两个结点数量相同的子树,以此类推 */ Elem stack[MAX]; int top = -1; void preToPost(Elem e[], int s, int t) { if(s > t) return; stack[++top] = e[s]; preToPost(e, (s + t)/2 + 1, t); preToPo...原创 2020-04-30 15:45:29 · 399 阅读 · 0 评论 -
层次遍历获取二叉树的宽度
/** * 2020-04-30 * 当第n层的最后一个结点被访问时,第n+1层的最后一个结点已经入队 */ int getWidthOfBinTree(BTNode T) { if(!T) return; BTNode Q[MAX], last == T; int r, f, max, max_tmp; r = f = max= max_tmp = 0; Q[++r] = T; w...原创 2020-04-30 13:14:17 · 1929 阅读 · 1 评论 -
二叉树的后序非递归及使用后序获取两个接点的第一个共同祖先
//2020-04-30 //注意c的结构体赋值并非是传递结构体的引用(指针) //js和Java写多了容易漏掉这个东西 #include<stdio.h> #include<stdlib.h> #define MAX 100 #define LEFT 0 #define RIGHT 1 typedef int Elem; typedef struct BTNode {...原创 2020-04-30 11:50:04 · 291 阅读 · 1 评论 -
十字链表的实现
/* *2018.9.12 17:09 *十字链表的实现 *注意rhead和chead都是顺序存储的 *其中的down和right并不指向某个结点 */ #include<stdio.h> #include<stdlib.h> #define COLUMN 5 typedef struct Node{ int r, c; int e; struct Node *d...原创 2019-09-20 10:49:36 · 828 阅读 · 0 评论 -
二叉树中求根节点到每个叶子结点的路径
/** *2018.10.25 21:32 *二叉树中求根节点到每个叶子结点的路径 */ #include<stdio.h> #define MAX 100 typedef char Elem; typedef struct BTNode{ Elem e; struct BTNode* lchild; struct BTNode* rchild; }BTNode; vo...原创 2019-09-20 10:48:08 · 5504 阅读 · 3 评论 -
前序满二叉树转化为后序满二叉树(递归)
/** *2018.10.24 13:51 *前序满二叉树转化为后序满二叉树 */ #include<stdio.h> #define MAX 100 void preToPost(char [], int ,int ,char [], int ,int); int main(void) { char pre[] = {'A','B','D','H','I','E','J...原创 2019-09-20 10:48:16 · 720 阅读 · 0 评论 -
根据前序和中序唯一生成一颗二叉树
/** *2018.10.17 18:06 *根据前序和中序唯一生成一颗二叉树 */ #include<stdio.h> #define MAX 100 typedef char Elem; typedef struct BTNode{ Elem data; struct BTNode *lchild; struct BTNode *rchild; }BTNode; B...原创 2019-09-20 10:48:32 · 528 阅读 · 0 评论 -
线索二叉树的建立及遍历(中序)
/** *2018.09.16 12:30 *线索二叉树的建立及遍历(中序) */ #include<stdio.h> #define MAX 100 typedef struct BTNode { int e; struct BTNode *rchild, *lchild; int ltag, rtag; }BTNode; void inThread(BTNode *,...原创 2019-09-20 10:48:52 · 755 阅读 · 0 评论 -
赫夫曼编码(从根结点开始编码)
/** *2018.09.18 14:09 *赫夫曼编码(从根结点开始编码) */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<stdbool.h> typedef struct HuffmanTree { int weight; int parent, ...原创 2019-09-20 10:49:00 · 593 阅读 · 0 评论 -
赫夫曼编码
/** *2018.09.17 16:09 *赫夫曼编码 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<stdbool.h> typedef struct HuffmanTree { int weight; int parent, lchild, r...原创 2019-09-20 10:49:06 · 138 阅读 · 0 评论 -
二叉树中求值为k的结点的层数
/** *2018.10.24 14:47 *二叉树中求值为k的结点的层数 */ #include<stdio.h> #define MAX 100 typedef char Elem; typedef struct BTNode{ Elem e; struct BTNode* lchild; struct BTNode* rchild; }BTNode; int ge...原创 2019-09-20 10:49:17 · 565 阅读 · 0 评论 -
二叉树的非递归形式的前、中、后遍历以及层次遍历
/** *2018.09.14 17:37 *二叉树的遍历 not recursion *先根,中根,后根,层次 */ #include<stdio.h> #define MAX 100 typedef struct BTNode { int e; struct BTNode *rchild, *lchild; }BTNode; void preOrder(BTNode *p...原创 2019-09-20 10:49:27 · 161 阅读 · 0 评论 -
拓扑排序
/** *2018.9.30 15:28 *Topological *拓扑排序,用于关键路径的算法中,判断是否有环 */ #include<stdio.h> #define MAX 100 typedef struct ArcNode{ int adjvex; struct ArcNode *next; }ArcNode; typedef struct Vertex { ...原创 2019-09-19 23:00:56 · 178 阅读 · 0 评论 -
弗洛伊德算法
/** *2018.9.30 10:06 *floyd最短路径算法(任意两点间的最短路径,与dijkstra算法都适用于连通图) *path保存从某点a到某点b的下一个顶点的标号 */ #include<stdio.h> #define MAX 100 //表示两点之间没有路径 #define MAX_WEIGHT 1000 typedef struct Matrix { cha...原创 2019-09-19 22:59:35 · 322 阅读 · 0 评论 -
迪杰斯特拉算法
/** *2018.9.28 22:53 *迪杰斯特拉算法 *求源点到其余所有点的最短路径 *核心思想:cost数组表示源点到该点的距离(权重之和),path表示源点到该点的中间顶点 *set表示该点是否是否已经找到最短路径 *1.初始化cost数组(源点到各点的直接距离,路径存在则path[i] = source) set每个元素初始化为0 *2.将源点的path设置为-1,表示没有路径,并s...原创 2019-09-19 22:58:53 · 235 阅读 · 0 评论 -
深度优先搜索
/** *2018.09.24 14:10 *DFS *以邻接矩阵作为图的存储结构 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 100 typedef struct Edge { struct Edge *nextEdge; int weight, sn...原创 2019-09-19 22:58:03 · 177 阅读 · 0 评论 -
广度优先搜索
/** *2018.9.24 20.00 *广度优先搜索(Broaden First Search) *1.先将当前顶点访问,将其序号进队 *2.判断队列是否为空 *3.不为空:队顶序号出队,访问其未被访问的邻接点, * 然后将其邻接点(当前未被访问到被访问的顶点)序号入队 *4.3中顶点的邻接点访问完成以后进入下一次出队访问中,直到队空 * *tips:队列中保存的是已被访问过的顶点的序号(是...原创 2019-09-19 22:57:31 · 158 阅读 · 0 评论 -
静态链表的实现
/** *2018-8-23 21:35 *静态链表的实现 *数组中第一个结点表示备用链表的第一个结点 *数组中最后一个结点表示链表的第一个结点 *当next域为0时均代表到了当前链表的结尾,因此有两个数组单元(0与MAX-1)无法存储目标数据 * */ #include<stdio.h> #define MAX 10 //此时静态链表中只能存储8个元素 typedef stru...原创 2019-09-19 22:56:44 · 202 阅读 · 0 评论 -
一般模式匹配算法改进版
/* *2018.08.29 13:32 *简单模式匹配 */ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct { char *str; int length; }String; int patternMatching( String *pattern,...原创 2019-09-19 22:55:28 · 193 阅读 · 0 评论 -
一般模式匹配算法
/* *2018.08.29 13:32 *简单模式匹配 */ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct { char *str; int length; }String; int patternMatching(const String const...原创 2019-09-19 22:54:36 · 234 阅读 · 0 评论 -
直接插入排序
/** *2018.10.01 22:22 *直接插入排序 */ #include<stdio.h> #define MAX 100 void directInsertSort(int array[], int n); int main(void) { int array[] = {0,2,6,9,5,2,1,5,7,9,2,4}; directInsertSort(ar...原创 2019-09-19 22:53:37 · 148 阅读 · 0 评论 -
快速排序
#include<stdio.h> int partition(int array[], int low , int high); int quickSort(int array[], int low , int high); int main() { int array[] = {1,2,6,9,7,41,5,787,56,9878,7456,7894,689,77}; ...原创 2019-09-19 22:52:08 · 124 阅读 · 0 评论 -
KMP算法
/* *2018.08.30 12:35 *KMP算法 */ #include<stdio.h> #include<stdlib.h> #include<string.h> //长度不包含空字符 typedef struct { char *str; int length; }String; void getNext(String *sub, int...原创 2019-09-19 22:50:16 · 208 阅读 · 3 评论
分享