
数据结构与算法(c语言)
数据结构与算法(C语言版)
Yetteego
简单不先于复杂,而是在复杂之后。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
树转化为二叉树、森林转化为二叉树、二叉树转化为树、二叉树转化为森林
一、将树转换为二叉树:树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟。按照这种关系很自然地就能将树转换成相应的二叉树:1.在所有兄弟结点之间加一连线2.对每个结点,除了保留与其长子的连线外,去掉该结点与其它孩子的连线。如下图所示:二、将一个森林转换为二叉树:具体方法是:1.将森林中的每棵树变为二叉树;2.因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结...原创 2019-07-07 21:03:32 · 8522 阅读 · 0 评论 -
C语言数据结构堆排序算法
/**堆排序(heapsort) 是选择排序的升级版 降低了排序函数的冗余性*堆排序分为 大顶堆 和小顶堆 大顶堆为堆顶为最大元素 小顶堆为堆顶为最小元素*先建立堆 再调整 最后输出 堆的元素*建立在二叉树的基础上*/void HeapSort(int *s,int length);//堆排序函数void HeapAdjust(int *s,int i,int len...原创 2019-06-04 15:49:17 · 939 阅读 · 0 评论 -
C语言数据结构归并排序和快速排序的对比
/**归并排序算法*快速排序算法和其的对比*归并排序函数基于递归的思想*将其划分为 一个 两个 四个 八个。。。 直到不满足条件为止*最后运用合并函数将两个划分块和并在一起 并保证优先排序*/#include<stdio.h>#include<stdlib.h>void Merge_sort(int *a,int i,int j,int *b);//归并...原创 2019-06-04 15:44:43 · 453 阅读 · 0 评论 -
c语言数据结构基数排序算法
/**基数排序算法的大概思想:*首先创建一个链表用于存储待排序数组 arraynode链表*创建一个储存头结点的数组 用来储存分配好的节点 0-9*进行分配 即给group数组进行赋值数据*首先进行分配的是 次关键字的操作 然后进行主关键字的操作(最高位)*分别对分配好的数组进行收集 将头节点的指针返回值传回*最后进行将主关键字的收集链表的头指针进行传回之后*将链表的所...原创 2019-06-04 15:38:33 · 1666 阅读 · 1 评论 -
C语言数据结构二分查找的递归实现
/** 对比利用循环实现的时间复杂度递归实现的时间复杂度为1*/**二分查找算法(对已经排好序的数据而言)递归实现*/#include<stdio.h>#include<stdlib.h>int Binary_search_recursive(int *s,int length,int key,int L,int H);//二分查找的递归实现函数void so...原创 2019-06-04 15:29:24 · 2305 阅读 · 1 评论 -
C语言数据结构顺序表的查找算法
/**顺序表的查找算法(重点是哨兵的设置)*创建一个数据结构体*创建一个顺序表的结构体*顺序表结构体里面包含 数据数组 和 数组长度*采用两种查找方法 哨兵设置 普通查找*哨兵排序算法的设置的好处是可以降低时间的复杂度 节省 for循环的次数*程序 的步骤分为 初始化顺序表 创建顺序表 查找 输出 测试*/#include<stdio.h>#include&...原创 2019-06-04 11:58:46 · 7930 阅读 · 0 评论 -
c语言数据结构排序算法汇总
/**简单插入排序(以temp元素为中间值 控制循环条件 不满足条件进行交换)*插入排序(插入一个数据保持有序排列)*冒泡排序*改进的冒泡排序算法(有效的降低时间复杂度)*希尔排序(有点模糊)(插入排序的升级版 增加了增量的概念 可以降低时间复杂度)*选择排序*快速排序 (递归的思想)*堆排序算法(利用二叉树点的储存规则 保证树中元素的顺序保持递增或者递减的规律)*基数排序算...原创 2019-06-03 21:43:35 · 1328 阅读 · 0 评论 -
c语言数据结构二分查找算法
/**二分查找算法(对已经排好序的数据而言)*设置一个 L M H 三个临时变量 将排好序的数组*分别对应 第一个元素的下标 和中间元素的下标 和最后元素的下标*首先将数组进行排序``*假如第一次元素和对应的M所在数组中的元素进行比较的时候*小于中间元素的值 将H的值调整到M-1*反过来将L的对应的数组的下标调整到M+1处*降低时间复杂度*对数组的二分算法*/#include...原创 2019-06-03 21:39:18 · 1653 阅读 · 0 评论 -
C语言数据结构链二叉树非递归的前序、中序遍历
/**链式二叉树非递归的前序遍历和中序遍历*后序遍历比较特殊**利用顺序栈来存储树的节点**代码实现如下*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h> #define NAMESIZE 255//字符串的最大长度#def...原创 2019-06-14 21:31:39 · 398 阅读 · 0 评论 -
C语言数据结构单链表的相关操作汇总
/**链表的相关操作集合*链表的创建 头插法 尾插法*链表元素的排序(递增排序)*链表的遍历*链表节点点的插入 前插 后插 在指点位置插入数据*删除指点位置的节点*按值进行查找 按序号进行查找*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time...原创 2019-06-09 15:11:20 · 229 阅读 · 0 评论 -
C语言数据结构顺序表的操作(创建、插入、删除、查询)
*顺序表的相关操作*创建顺序表(顺序存储)*创建数组*在指定位置进行删除*在指定位置进行插入*返回指定位置的数据*返回数据的指定位置*遍历顺序表的数据*/#include<stdio.h>#include<time.h>#include<stdlib.h>#include<string.h>#define MAXSI...原创 2019-06-09 15:07:45 · 9235 阅读 · 0 评论 -
C语言数据结构快速排序算法
/**交换排序 -快速排序算法*找到任意的中间序列值 将比序列值小的数都移到左边 将比序列值大的数都移到序列值的右边*首先进行递归进行中间值两边的排序*/#include<stdio.h>void Quick_sort(int *s,int i,int j);//快速排序的核心算法int partition(int *s,int i,int j);//进行以中间值为界...原创 2019-06-05 08:47:31 · 519 阅读 · 0 评论 -
C语言数据结构冒泡排序算法
/**交换排序算法*冒泡排序*改进的冒泡排序算法 (优点可以降低时间复杂度)*/#include<stdio.h>#include<stdlib.h>void bubble_sort(int *s,int n);//简单的冒泡排序函数void up_bubblesort(int *s,int n);//改进的冒泡排序 可以降低时间复杂度void mai...原创 2019-06-05 08:50:30 · 1160 阅读 · 0 评论 -
C语言数据结构希尔排序算法和简单插入排序算法的对比
/**希尔排序 利用增量递减的规则*简单插入排序的进阶版*好处 可以有效降低时间复杂度*希尔排序的核心是利用增量的变化 在简单排序的基础上 降低时间复杂度*和简单插入函数之间进行对比*/#include<stdio.h>#include<stdlib.h>void ShellSort(int*s,int length);//希尔排序函数 (核心算法)...原创 2019-06-05 08:53:56 · 348 阅读 · 0 评论 -
C语言数据结构字符串的模式匹配-BF算法
/**串的模式匹配-BF算法*找到相同的字符串输出在原字符串中的位置 代表匹配字符串在原字符串中的位置*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define STRSIZE 255//字符串的最大长度typedef char *StrType;//字符数字类型typedef ...原创 2019-06-11 18:37:02 · 2041 阅读 · 0 评论 -
C语言数据结构稀疏矩阵的转置
/**稀疏矩阵的转置*创建一个二维数组*创建一个三元组数组来存放矩阵的元素*转置矩阵存放的公式为 sum[] 数组存放每一列的非零元素的个数*cpot[]数组存放每一列第一个非零元素在转置三元组中的位置*/#include<stdio.h>#include<stdlib.h>#include<time.h>#define MAXSIZE 1...原创 2019-06-11 18:31:34 · 1843 阅读 · 0 评论 -
C语言数据结构邻接矩阵的广度优先搜索-BFS
//邻接矩阵的广度优先搜索-BFS#include<stdio.h>#include<stdlib.h>#include<string.h>#define VERTEXNUM 100 //最大顶点数#define MAXSIZE 1024typedef char*VertexType;//顶点数据的类型#define OK 1#define ER...原创 2019-06-06 09:17:51 · 819 阅读 · 0 评论 -
C语言数据结构邻接矩阵的深度优先搜索-DFS
//邻接矩阵的深度优先搜索-DFS#include<stdio.h>#include<stdlib.h>#include<string.h>#define VERTEXNUM 100 //最大顶点数#define MAXSIZE 1024typedef char*VertexType;//顶点数据的类型#define OK 1#define E...原创 2019-06-05 09:18:03 · 886 阅读 · 0 评论 -
C语言数据结构邻接表的广度优先搜索-BFS
//无向图的邻接表的广度优先搜索——BFS#include<stdio.h>#include<stdlib.h>#include<string.h>#define VERTEXNUM 100//最大顶点数#define ERROR 0#define OK 1typedef char *VertexType;//顶点数据的结构体int visit...原创 2019-06-05 09:14:38 · 981 阅读 · 0 评论 -
C语言数据结构克鲁斯卡尔算法-求最小生成树
/**克鲁斯卡尔算法*得到图的最小生成树*构造一个无向网的的邻接矩阵*创建一个临时数组*对edge数组进行排序*/#include<stdio.h>#include<stdlib.h>#include<string.h>typedef char* VertexType;//顶点的信息的数据类型typedef int ArcType;//权重...原创 2019-06-05 09:11:10 · 2399 阅读 · 0 评论 -
C语言数据结构普里姆算法-求最小生成树
/**普里姆算法求最小生成树*创建一个无向网*创建一个保存每一行的最小权值和顶点值的结构体数组*进行 每一次的数组更新*最后直到生成一个无向网的最小生成树**/#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX_SIZE 1024//顶点的最大数目#defi...原创 2019-06-05 09:07:12 · 1658 阅读 · 0 评论 -
C语言数据结构迪杰斯特拉算法-求源节点到各个节点的最短路径长度
/**迪杰斯特拉算法*求源节点到其他各个节点的最短路径长度*定义一个path数组 用来保存上一次的路径节点*定义一个d数组 用来保存源节点到各个节点的最小路径*定义一个s数组 用来保存已经找到最小路径的下标 定义为bool型全局变量*最后遍历并打印d数组*/#include<stdio.h>#include<stdio.h>#include<s...原创 2019-06-05 09:04:27 · 1270 阅读 · 0 评论 -
C语言数据结构弗洛伊德算法-求两点之间最短路径长度
/**求有向网中的任意两点的最短路径*弗洛伊德算法的核心是 运用一个path二维数组 和一个A二维数组*path数组用来保存中间路径经过的节点*A数组用来保存任意两个顶点之间的最短路径长度*最后输出A数组运用了递归输出的思想*先初始化path数组和A数组*运用三层循环 (算法的核心) 计算任意两点之间的最短路径长度 将经过的节点的下标存储在path数组中去*递增的思想*创...原创 2019-06-05 09:00:58 · 2360 阅读 · 0 评论 -
C语言数据结构简单插入排序算法
#include<stdio.h>#include<stdlib.h>void insert_sort(int *s,int n);//排序函数void main(){ int i; int n[100]; int m; printf("请输入数据的个数:\n"); scanf("%d",&m); print...原创 2019-06-05 08:57:07 · 487 阅读 · 1 评论 -
C语言数据结构二叉排序算法(二叉排序树)
/*二叉排序树的相关操作*二叉排序树的创建使用二级指针*顺序表的创建 顺序表的数据递增排序*对树的节点的数据进行赋值操作*利用二分查找法进行二叉排序树的创建(递归实现二叉排序树的创建)*对数据进行查找 (递归实现)*对数据进行插入*/#include<stdio.h>#include<stdlib.h>#include<string.h>#...原创 2019-06-08 09:14:23 · 2316 阅读 · 0 评论 -
C语言数据结构顺序表的相关操作
//顺序表的建立#include<stdio.h>#include<stdlib.h>typedef int element;#define MAXSIZE 1024typedef struct{ element data[MAXSIZE]; int last;}Sequ_List;Sequ_List*Creat_sequlist();//顺序表的建立...原创 2019-06-08 09:05:32 · 458 阅读 · 0 评论 -
C语言数据结构哈希表的相关操作(插入(创建)、查找)
/**创建哈希表 (散列表)(插入(创建)、查找)*对哈希表数据进行初始化 使每一个位置上都可以判断是否存在元素*进行 数据的插入(利用哈希函数先确定位置 如果位置上面存在元素 则继续计算位置)*查找到的思想和插入的类似(所处的位置不同 查找失败的判断条件不同)*查找元素处在数据的两端 查找失败的条件(hashtable->elem[hashaddress]NULLKEY)*查...原创 2019-06-08 09:02:13 · 5031 阅读 · 0 评论 -
C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋值*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<...原创 2019-06-12 20:00:31 · 12292 阅读 · 2 评论 -
C语言数据结构二叉树的前序 中序 后序 遍历 和非递归实现的中序遍历
//二叉树的前序 中序 后序 遍历 和非递归的中序遍历/*二叉树的初始化二叉树的创建二叉树的测试函数数据结构体 节点结构体 总的结构体*/#include<stdio.h>#include<stdlib.h>#define MAXSIZE 1024#define MAXNODE 100static int id=0;typedef struct ...原创 2019-06-07 10:32:58 · 2985 阅读 · 0 评论 -
C语言数据结构二叉树的层序遍历(非递归实现)
//二叉树的层序遍历void leveloredertravers(TreeNode*tp)//层序遍历{/* *利用队列的先进先出原则 *层序遍历 *创建队列 元素为节点结构体指针数组 *从上往下进行遍历 *利用队列的特点进行层层输出 */ TreeNode*s[MAXNODE];//循环队列 int front=0; ...原创 2019-06-06 10:00:50 · 2814 阅读 · 0 评论 -
C语言数据结构孩子兄弟法创建树(非二叉树)
/**孩子兄弟法创建树(不是二叉树)*先输入长子节点再输入孩子节点*用树的遍历去实现类似二叉树的遍历*使用创建链式二叉树的方法创建孩子兄弟树*/#include<stdlib.h>#include<stdio.h>#include<string.h>#define MAXSIZE 255static int id=0;typedef str...原创 2019-06-06 09:57:49 · 5104 阅读 · 0 评论 -
C语言数据结构双亲法创建二叉树
/**双亲法创建二叉树*建立双亲节点*创建数据节点*创建一维数组*输入数据*查找指定节点的双亲在数组中的位置*返回指点节点的在数组中的位置*/#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100 //一维数组的大小//typedef int element;static char name...原创 2019-06-06 09:54:34 · 1069 阅读 · 0 评论 -
C语言数据结构创建哈夫曼树-Huffman coding
/**创建哈弗曼树*创建树*每次遍历最小的两个节点*译码*遍历树(解码的过程)*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define n 4//树的叶子节点数#define m (2*n-1)//树的节点总数#define MAXVALUE 1000 //权重最大值...原创 2019-06-06 09:51:47 · 2960 阅读 · 0 评论 -
C语言数据结构创建有向网的邻接矩阵-顺序存储
/**顺序储存有向网邻接矩阵*定义一个边的权值的二维数组*定义一个点的一维数组*创建一个邻接矩阵*输出有向网的邻接矩阵*/#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAXVERTEX 100//顶点数 #define ERROR 0 #define OK...原创 2019-06-06 09:47:22 · 3119 阅读 · 6 评论 -
C语言数据结构创建有向图的邻接矩阵-顺序存储
/**顺序储存有向图邻接矩阵*定义一个边的权值的二维数组*定义一个点的一维数组*创建一个邻接矩阵*输出这个邻接矩阵*/#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAXVERTEX 100//顶点数 #define ERROR 0 #define OK 1...原创 2019-06-06 09:40:44 · 5079 阅读 · 1 评论 -
C语言数据结构创建无向图的邻接矩阵-顺序存储
/**顺序储存无向图邻接矩阵*定义一个边的权值的二维数组*定义一个点的一维数组 初始化*创建一个无向图*输出无向图的邻接矩阵*/#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAXVERTEX 100//顶点数 #define ERROR 0 #defi...原创 2019-06-06 09:34:13 · 6008 阅读 · 0 评论 -
C语言数据结构创建邻接表
/**创建邻接表(链式存储)*输入顶点信息*输入每个边的下标*创建以每一个顶点为起点的单向链表*以顶点数输出链表中的数据*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define VERTEXNUM 100#define ERROR 0#define OK 1typed...原创 2019-06-06 09:28:16 · 1273 阅读 · 3 评论 -
C语言数据结构循环队列(创建、入队、出队、取对头元素、遍历)
/**循环队列的创建*循环队列的初始化*创建一个一维数组*操作 出队 入队 判对列空 对列满*创建数据域结构体*创建循环队列的结构体*求循环队列的长度*/#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>#define OK 1#def...原创 2019-06-12 22:04:04 · 10496 阅读 · 0 评论 -
C语言数据结构链队列(创建、入队、出队、取对头元素、遍历)
/**链队列的相关操作*创建一个rear和front指针的结构体*创建一个链表的结构体*初始化时rear和front指向head指针*采用尾插法创建链表*操作 (初始化、创建、入队 、出队、取对头元素、遍历)*/#include<stdio.h>#include<stdlib.h>#include<time.h>#include<st...原创 2019-06-13 10:59:09 · 8699 阅读 · 0 评论 -
C语言数据结构链式二叉树的创建、前序、中序、后序遍历
/**二叉树的创建*二叉树的初始化*前序 中序 后序遍历*/#include<stdio.h>#include<stdlib.h>#define MAXSIZE 1024static int id=0;typedef struct elementtype//数据结构体创建{ char name[MAXSIZE]; int id;}Ele...原创 2019-06-07 10:42:20 · 1816 阅读 · 0 评论