
数据结构
文章平均质量分 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 · 1114 阅读 · 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 · 344 阅读 · 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 · 1851 阅读 · 1 评论 -
二叉树的后序非递归及使用后序获取两个接点的第一个共同祖先
//2020-04-30//注意c的结构体赋值并非是传递结构体的引用(指针)//js和Java写多了容易漏掉这个东西#include<stdio.h>#include<stdlib.h>#define MAX 100#define LEFT 0#define RIGHT 1typedef int Elem;typedef struct BTNode {...原创 2020-04-30 11:50:04 · 247 阅读 · 1 评论 -
二叉树中求值为k的结点的层数
/***2018.10.24 14:47*二叉树中求值为k的结点的层数*/#include<stdio.h>#define MAX 100typedef char Elem;typedef struct BTNode{ Elem e; struct BTNode* lchild; struct BTNode* rchild;}BTNode;int ge...原创 2019-09-20 10:49:17 · 505 阅读 · 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 · 108 阅读 · 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 · 545 阅读 · 0 评论 -
线索二叉树的建立及遍历(中序)
/***2018.09.16 12:30*线索二叉树的建立及遍历(中序)*/#include<stdio.h>#define MAX 100typedef struct BTNode { int e; struct BTNode *rchild, *lchild; int ltag, rtag;}BTNode;void inThread(BTNode *,...原创 2019-09-20 10:48:52 · 685 阅读 · 0 评论 -
根据前序和中序唯一生成一颗二叉树
/***2018.10.17 18:06*根据前序和中序唯一生成一颗二叉树*/#include<stdio.h>#define MAX 100typedef char Elem;typedef struct BTNode{ Elem data; struct BTNode *lchild; struct BTNode *rchild;}BTNode;B...原创 2019-09-20 10:48:32 · 481 阅读 · 0 评论 -
前序满二叉树转化为后序满二叉树(递归)
/***2018.10.24 13:51*前序满二叉树转化为后序满二叉树*/#include<stdio.h>#define MAX 100void 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 · 665 阅读 · 0 评论 -
二叉树中求根节点到每个叶子结点的路径
/***2018.10.25 21:32*二叉树中求根节点到每个叶子结点的路径*/#include<stdio.h>#define MAX 100typedef char Elem;typedef struct BTNode{ Elem e; struct BTNode* lchild; struct BTNode* rchild;}BTNode;vo...原创 2019-09-20 10:48:08 · 5439 阅读 · 3 评论 -
二叉树的非递归形式的前、中、后遍历以及层次遍历
/***2018.09.14 17:37*二叉树的遍历 not recursion*先根,中根,后根,层次*/#include<stdio.h>#define MAX 100typedef struct BTNode { int e; struct BTNode *rchild, *lchild;}BTNode;void preOrder(BTNode *p...原创 2019-09-20 10:49:27 · 121 阅读 · 0 评论 -
十字链表的实现
/**2018.9.12 17:09*十字链表的实现*注意rhead和chead都是顺序存储的*其中的down和right并不指向某个结点*/#include<stdio.h>#include<stdlib.h>#define COLUMN 5typedef struct Node{ int r, c; int e; struct Node *d...原创 2019-09-20 10:49:36 · 773 阅读 · 0 评论 -
拓扑排序
/***2018.9.30 15:28*Topological *拓扑排序,用于关键路径的算法中,判断是否有环*/#include<stdio.h>#define MAX 100typedef struct ArcNode{ int adjvex; struct ArcNode *next;}ArcNode;typedef struct Vertex { ...原创 2019-09-19 23:00:56 · 146 阅读 · 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 · 151 阅读 · 3 评论 -
快速排序
#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 · 95 阅读 · 0 评论 -
直接插入排序
/***2018.10.01 22:22*直接插入排序 */#include<stdio.h>#define MAX 100void 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 · 116 阅读 · 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 · 195 阅读 · 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 · 152 阅读 · 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 · 161 阅读 · 0 评论 -
广度优先搜索
/***2018.9.24 20.00*广度优先搜索(Broaden First Search)*1.先将当前顶点访问,将其序号进队*2.判断队列是否为空*3.不为空:队顶序号出队,访问其未被访问的邻接点,* 然后将其邻接点(当前未被访问到被访问的顶点)序号入队*4.3中顶点的邻接点访问完成以后进入下一次出队访问中,直到队空**tips:队列中保存的是已被访问过的顶点的序号(是...原创 2019-09-19 22:57:31 · 116 阅读 · 0 评论 -
深度优先搜索
/***2018.09.24 14:10*DFS*以邻接矩阵作为图的存储结构*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 100typedef struct Edge { struct Edge *nextEdge; int weight, sn...原创 2019-09-19 22:58:03 · 141 阅读 · 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 · 168 阅读 · 0 评论 -
弗洛伊德算法
/***2018.9.30 10:06*floyd最短路径算法(任意两点间的最短路径,与dijkstra算法都适用于连通图)*path保存从某点a到某点b的下一个顶点的标号*/#include<stdio.h>#define MAX 100//表示两点之间没有路径#define MAX_WEIGHT 1000typedef struct Matrix { cha...原创 2019-09-19 22:59:35 · 284 阅读 · 0 评论