
c语言
文章平均质量分 92
悠闲小人物
当你凝视深渊的时候,深渊也在凝视你!
展开
-
c语言1+2+……+n的代码
我是小白,现在只是想记录我写的代码#include <stdio.h>#include <stdlib.h>int fan(int n){//1+2+~+n递归函数表示 return n>1?fan(n-1)+n:1;}int fan1(int n){//1+2+~+n非递归函数表示 int i,sum; sum=0; for(i=n;i...原创 2018-12-11 16:25:08 · 2465 阅读 · 0 评论 -
希尔排序耗时代码
折半排序,插入排序,希尔排序。c++排序函数所用时间的比较,十万个随机数进行排序所耗时(一百万个随机数,我的电脑显示不出来)#include <iostream>#include <stdio.h>#include <stdlib.h>#include <time.h>using namespace std;#define MAXSI...原创 2018-12-03 16:15:58 · 341 阅读 · 0 评论 -
十进制转换二进制 非递归实现
做了个十进制转换成二进制的题,就是容易忽略一些细节。我写的十进制转换二进制函数代码是这样的int fan(int n){ int i=0,a[100]; while(n) { a[i]=n%2; i++; n/=2; } while(i--) printf("%d",a[i]);}但是我看了大神的代码之后,就有点不懂了。int fan1(int n){ ...原创 2019-01-04 11:20:20 · 818 阅读 · 0 评论 -
图的邻接矩阵--C语言
由于没做输入挑选工作,所以只能按照写对。(无向图)完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MVNum 100void Interrupt(void)//创建一个中断函数 { while(1)//用于检测换行符,使函数脱离scanf的连续输出 if(getchar()=='\n') break;} typedef struct{ ch原创 2020-10-26 22:47:33 · 775 阅读 · 0 评论 -
无向图 邻接表的创建 - C语言
还是书上的。代码运行时的输入操作还是必须要严格进行。完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MVNum 100 //最大顶点数 void Interrupt(void)//创建一个中断函数 { while(1)//用于检测换行符,使函数脱离scanf的连续输出 if(getchar()=='\n') break;} typedef st原创 2020-10-27 22:09:35 · 3966 阅读 · 1 评论 -
归并排序 C语言实现
归并排序( Merging Sort )就是将两个或两个以上的有序表合并成一-个有序表的过程。将两个有序表合并成个有序表的过程称为2-路归并,2-路归并最为简单和常用。算法思想:假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为1的有序序列为止。书上的例子:时间复杂度O(nlog2log_2log2n)空间复杂度O(n)算法特点:1)是稳定排序。2)可用于原创 2020-11-20 21:55:03 · 621 阅读 · 0 评论 -
堆排序 C语言实现
堆排序(Heap Sort) 是一种树形选择排序,在排序过程中,将待排序的记录Data[1…n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩 子结点之间的内在关系,在当前无序的序列中选择关键字最大(或最小)的记录。时间复杂度O(nlog2log_2log2n)空间复杂度O(1)算法特点:1 ) 是不稳定排序。2 ) 只能用于顺序结构,不能用于链式结构。3 ) 初始建堆所需的比较次数较多,因此记录数较少时不宜采用。堆排序在最坏情况下时间复杂度为O(nlog2n),相对于原创 2020-11-20 16:42:37 · 974 阅读 · 1 评论 -
简单选择排序 C语言
简单选择排序(Simple Selection Sort)也称作直接选择排序。算法步骤:1) 设待排序的记录存放在数组Data[1…n]中。第一趟从Data[1]开始,通过n-1次比较,从n个记录中选出关键字最小的记录,记为Data[k],交换Data[1]和Data[k]。2) 第二趟从Data[2]开始,通过n- 2次比较,从n-1个记录中选出关键字最小的记录,记为Data[k],交换Data[2]和Data[k]。3) 依次类推,第i趟从Data[i]开始,通过 n - i 次比较,从n-i原创 2020-11-20 12:28:37 · 2153 阅读 · 2 评论 -
快速排序 C语言实现
快速排序快速排序(Quick Sort )是由冒泡排序改进而得的。在冒泡排序过程中,只对相邻的两个记录进行比较,因此每次交换两个相邻记录时只能消除一个逆序。 如果能通过两个(不相邻)记录的一次交换,消除多个逆序,则会大大加快排序的速度。快速排序方法中的一次交换可能消除多个逆序。课本上的例子:时间复杂度最好情况:O(nlog2log_2log2n)最坏情况:O(n2n^2n2)平均情况:O(nlog2log_2log2n)空间复杂度O(log2log_2log2n)算法特点:1)记原创 2020-11-19 22:06:22 · 1111 阅读 · 1 评论 -
冒泡排序 C语言
冒泡排序冒泡排序( Bubble Sort)是一种最简单的交换排序方法,它通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一般逐渐往上 “漂浮” (左移),或者使关键字大的记录如石块一样逐渐向下 “坠落”(右移)。算法步骤:(1)设待排序的记录存放在数组Data[1…n]中。首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序(即Data[1].key > Data[2].key),则交换两个记录。然后比较第二个记录和第三个记录的关键字。依次类推,直至原创 2020-11-19 19:16:44 · 622 阅读 · 1 评论 -
希尔排序 C语言实现
希尔排序希尔排序( Shell’s Sort)又称“缩小增量排序”( Diminishing Increment Sort),是插入排序的一种, 因D.L.Shell 于1959 年提出而得名。直接插人排序,当待排序的记录个数较少且待排序序列的关键字基本有序时,效率较高。希尔排序基于以上两点,从“减少记录个数”和“序列基本有序”两个方面对直接插入排序进行了改进。基本思想:先将整个待排记录序列分割成若干子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。原创 2020-11-19 18:37:52 · 1962 阅读 · 0 评论 -
折半插入排序 C语言
折半插入排序 C语言直接插入排序采用顺序查找法查找当前记录在已排好序的序列中的插入位置,这个“查找”操作可利用“折半查找”来实现,由此进行的插人排序称之为折半插入排序( Binary Insertion Sort )。算法步骤:①设待排序的记录存放在数组Data[1…n]中,Data[1]是一个有序序列。② 循环n-1次,每次使用折半查找法,查找Data[ i ] ( i=2,…,n )在已排好序的序列DataI1…i-1]中的插入位置,然后将Data[ i ]插人表长为i-1的有序序列Data[1原创 2020-11-19 17:10:14 · 1952 阅读 · 0 评论 -
直接插入排序 C语言实现
直接插入排序是一种最简单的排序方法,其基本操作是将一条记录插入到已排好序的有序表中,从而得到一个新的、记录数量增1的有序表。算法步骤:(1)设待排序的记录存放在数组Data[1…n]中,Data[1]是一个有序序列。(2)循环n-1次,每次使用顺序查找法,查找Data[ ](i = 2,…,n)在已排好序的序列Data[ 1…i-1 ]中插入位置,然后将Data[i]插人表长为i-1的有序序列Data[ 1…i-1 ],直到将Data[n]插人表长为n-1的有序序列Data[ 1…n-1 ],最后原创 2020-11-19 16:21:03 · 874 阅读 · 0 评论 -
二叉排序树的创建,插入及删除 - C语言
这里的二叉排序树的创建是根据课本上写的,其中掺杂了递归思想,之前的写的二叉树的创建是为非递归的方法https://blog.youkuaiyun.com/qq_43402544/article/details/109228383。完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct//关键字结构体 { int key;//关键字项 int otherinfo;//原创 2020-11-09 22:17:08 · 10243 阅读 · 4 评论 -
线性表的查找 C语言
还是书上的内容。(1)折半查找我这里先写折半查找(又名二分查找),是一种效率较高的查找方法,就是有个前提,查找数据的前提是数据本身是从小到大的有序排列的。只适用于有序表。时间复杂度为:代码如下:int SearchList3(SSTable ST,int key)//折半查找(二分查找),前提必须是从小到大的有序排序 { int mid, low = 1, high = ST.length;//初始化完成 while(low<high) { mid = (low+high原创 2020-11-09 10:44:50 · 2642 阅读 · 2 评论 -
图的关键路径 C语言
还是按照书上给的例子:图的关键路径必须了解的(以下都是自己理解的):(1)AOE-网:带权值的AOV-网。(AOV-网是不带权值且没有回路的有向图)(2)Ve(i):顶点V(i)的最早发生时间。这里开始只知道图的源点Ve(0)的值,初始点顶点Ve(0)为0,Ve(i)的值便是从V(0)开始沿着各种路径到达顶点V(i)的最长路径。例如:图中V(0)有两种路径到达V(4)选择最长的那条,故Ve(4) == 7。(3)Vl(i):顶点V(i)的最迟发生时间。只有求出所有Ve(i)才能开始求Vl(i),这原创 2020-11-08 21:02:45 · 1047 阅读 · 1 评论 -
有向图的拓扑排序 C语言
这里使用我随便画的例子:这种用顶点表示活动,用弧表示活动间的优先关系的有向图称为顶点表示活动的网(Activity On Vertex Network),简称AOV-网。按照我的理解是:AOV-网是不带权值且没有回路的有向图。完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MVNum 100 //最大顶点数 #define MAXSIZE 100 //最大栈容量原创 2020-11-04 21:52:43 · 3130 阅读 · 7 评论 -
有向图的最短路径--弗洛伊德算法 C语言
这里有点懵!还是按书上的例子(这里用邻接矩阵表示)完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MaxInt 32767//无穷值设置 #define MVNum 100 //图的最大容量 ,也可以称为图的最大顶点数 void Interrupt(void)//创建一个中断函数 { while(1)//用于检测换行符,使函数脱离scanf的连续输出原创 2020-11-04 19:01:12 · 2626 阅读 · 2 评论 -
图的最短路径--迪杰斯特拉算法 c语言
还是按照书上的例子:完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MaxInt 32767//无穷值设置 #define MVNum 100 //图的最大容量 ,也可以称为图的最大顶点数 void Interrupt(void)//创建一个中断函数 { while(1)//用于检测换行符,使函数脱离scanf的连续输出 if(getchar()=='原创 2020-11-02 22:33:34 · 3845 阅读 · 3 评论 -
图的最小生成树--克鲁斯卡尔算法 C语言
克鲁斯卡尔算法构造最小生成树。还是根据书上的例子进行构造:步骤为(代码用邻接矩阵表示上图):完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MaxInt 32767//无穷值设置 #define MVNum 100 //图的最大容量 ,也可以称为图的最大顶点数 void Interrupt(void)//创建一个中断函数 { while(1)//用于检原创 2020-11-01 22:15:40 · 2879 阅读 · 0 评论 -
图的最小生成树 -普里姆算法 c语言
这里运用邻接矩阵来进行对普里姆算法的实现。还是按照课本上的例子:代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MaxInt 32767#define MVNum 100 //图的最大容量 ,也可以称为图的最大顶点数 void Interrupt(void)//创建一个中断函数 { while(1)//用于检测换行符,使函数脱离scanf的连续输出 if原创 2020-11-01 16:58:46 · 2492 阅读 · 2 评论 -
图的广度优先搜索遍历 -- c语言
图的广度优先搜索遍历,以我的理解是:先以一个顶点做起点,一层一层的进行输出打印。这里引用书上的一个例子。完整代码如下(邻接表的形式):#include <stdio.h>#include <stdlib.h>#include <string.h>#define MVNum 100 //最大顶点数 //创建一个中断函数 void Interrupt(void)//创建一个中断函数 { while(1)//用于检测换行符,使函数脱离scanf的连续输出原创 2020-10-31 16:36:25 · 5229 阅读 · 2 评论 -
图的深度优先搜索遍历 -- c语言
相比于我之前的邻接矩阵和邻接表的创建知识点多了个深度优先搜索函数。可以在两篇直接增加该函数,便是邻接矩阵或邻接表的深度优先搜索。首先是邻接矩阵的深度优先函数。都是书上的,只是多了几个变量的定义和初始化函数代码如下:bool visited[MVNum];//访问标志数组 ,其初始值为false void InitVisited(bool *visited)//标志数组初始化 { for(int i=0;i<MVNum;i++) visited[i] = false;} int原创 2020-10-30 22:30:31 · 1310 阅读 · 1 评论 -
无向图 邻接多重表的创建 - c语言
并不一定全,但是运行成功了。代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_VERTEX_NUM 20typedef enum{unvisited,visited} VisitIf;//变量名称转换 typedef struct EBox{ VisitIf mark;//变量mark只能取unvisited和visited;未访问和已访问 int iv原创 2020-10-30 16:50:31 · 912 阅读 · 0 评论 -
有向图 十字链表的创建 - C语言
代码还是要求严格的输入操作,没有判错能力。见谅!代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_VERTEX_NUM 20void Interrupt(void)//创建一个中断函数 { while(1)//用于检测换行符,使函数脱离scanf的连续输出 if(getchar()=='\n') break;} typedef struct.原创 2020-10-28 22:45:01 · 830 阅读 · 1 评论 -
任意进制转换十进制 -- c语言
任意进制转换十进制 – 数据结构c语言队列操作实现代码也不算是任意进制,最高只能到十六进制。见谅!代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 100 //静态顺序栈存储的最大空间 const char f[]="0123456789ABCDEF";//定义一个全局常量 ,方便导出十进制以上的不为数字形式的数据的显示 void Interrupt原创 2020-10-25 11:48:03 · 4058 阅读 · 0 评论 -
大数相加 - C语言
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct StackNode { char data; struct StackNode *next; }SqStack,*LinkStack;void InitStack(LinkStack &S)//栈的初始化,只有创建一个栈顶结点这一步 { S = (SqStack*)malloc(sizeof(SqSt原创 2020-10-24 23:02:02 · 383 阅读 · 0 评论 -
矩阵的对称性,自反性和反对称性的判断
用C语言实现离散数学中对矩阵的简单操作及对矩阵的判断判断是否输入的矩阵是否为方阵,在是方阵的基础上判断是否具有对称性,反对称性和自反性。对称矩阵:一个方形矩阵,其转置矩阵和自身相等。对称矩阵是指以主对角线为对称轴,各元素对应相等的矩阵。用线性代数书上的解释是:对称矩阵是一个方形矩阵,其转置矩阵和自身相等。反对称矩阵:反对称矩阵,它的主对角线上的元素全为零,而位于主对角线两侧对称的元素反号。线性代数书上解释为:自反性:关系矩阵的主对角线上元素值全部为1反自反性:关系矩阵的主对角线上元素全部为0原创 2020-10-23 21:05:47 · 21594 阅读 · 5 评论 -
C语言 中序遍历二叉树--非递归算法
完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct BiTNode//二叉树的结构体 { char ch;//二叉树的数据域 struct BiTNode *lchild,*rchild;//二叉树的指针域 }BiTNode ,*BiTree;typedef struct StackNode //栈的结构体 { BiTree data;//栈原创 2020-10-22 20:52:26 · 4970 阅读 · 1 评论 -
C语言 哈夫曼树的实现及 递归实现哈夫曼编码
构建哈夫曼树算法的实现可以分为两大部分。(1)初始化:首先动态申请2n个单元;然后循环2n-1次,从1号单元开始,依次将1至2n-1所有单元中的双亲、左孩子、右孩子的下标都初始化为0;最后再循环n次,输入前n个单元中叶子结点的权值。完成初始化的状态图为图中的(a)。(2)创建树:循环n-1次,通过n-1次的选择、删除与合并来创建哈夫曼树。选择是从当前森林中选择双亲为0且权值最小的两个树根结点s1和s2;删除是指将结点s1和s2的双亲改为非0;合并就是将sl和s2的权值和作为一个新结点的权值依次存人到数组原创 2020-10-22 20:01:10 · 3768 阅读 · 1 评论 -
二叉排序树-非递归形式 C语言
完整代码如下:#include <stdio.h>#include <stdlib.h>typedef struct BiTNode{ int data;//二叉树数据域 struct BiTNode *lchild,*rchild;//二叉树指针域 }BiTNode,*BiTree;void InitTree(BiTree &T)//初始化二叉树 { T = (BiTNode*)malloc(sizeof(BiTNode));//创建一个头结点 .原创 2020-10-22 19:09:51 · 1187 阅读 · 0 评论 -
C语言 线索二叉树
线索二叉树,我个人的理解是:在创建一个二叉树的基础上,把二叉树中的只有一个孩子或没有孩子的结点中的指向空的指针进行填充,以便于二叉树的遍历。首先,还是先创建一个二叉树。还是以上个代码中所表示的样板为例(懒)。画不怎么好看,请见谅!然后,便是对已经建立的二叉树进行线索化。上图是对头结点Thrt的初始化,结点pre为全局变量。另外需要记住:(1)LTag为0时指向该结点的左孩子,为1时指向该结点的前驱;(2)RTag为0时指向该结点的右孩子,为1时指向该结点的后继。对二叉树的线索化:前:原创 2020-10-22 13:51:32 · 688 阅读 · 1 评论 -
C语言 创建二叉树及对二叉树的操作
代码都是书上的。需要注意的是怎么输入。第一行 为自己输入的数据,在创建的二叉树中数据域为char型,故空格和enter键也会被存入二叉树数据中。‘#’号总比二叉树数据结点多一个,不然一直在输入,无法进入输出。输出是中序遍历打印的。根据上面的输入数据可以画出自己创建的二叉树(上图)。这是草稿纸上的操作,代码结果只输出中序遍历结果。完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>原创 2020-10-22 11:16:17 · 8687 阅读 · 12 评论 -
C语言 串的链式存储
串的链式存储:顺序串的插入和删除操作不方便,需要移动大量的字符。因此,可采用单链表方式存储串。由于串结构的特殊性一结构中的每个数据元素是 一个字符,则在用链表存储申值时,存在个“结点大小”的问题,即每个结点可以存放一个字符,也可以存放多个字符。例如,图中(a)所示为结点大小为4 (即每个结点存放4个字符)的链表,图中(b)所示为结点大小为1的链表。当结点大小大于1时,由于串长不一定是结点大小的整倍数, 则链表中的最后一个结点不一定全被串值占满,此时通常补上“#”或其他的非串值字符(通常“#”不属于串的字符原创 2020-10-22 10:05:47 · 2908 阅读 · 4 评论 -
十进制转换任意进制--链栈实现
首先,先了解一下c语言const用法:修饰局部变量,int const a = 9; const int b = 8;这两种写法是一样的,表示a和b都是常量,不可改变。需要注意的是,用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了。完整代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>const char f[]="0123456789ABCDEF";//定义一个全原创 2020-10-22 09:31:30 · 1488 阅读 · 2 评论 -
十进制转换二进制--栈实现
C语言十进制转换二进制,用顺序栈实现。完整代码如下:#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20 //静态顺序栈存储的最大空间 typedef struct{ int data[MAXSIZE];//静态顺序栈可用的最大容量 int top;//栈顶}SqStack;void InitStack(SqStack &S)//栈的初始化 { S.top = -1;//静态顺序栈中,使S原创 2020-10-22 08:36:57 · 9434 阅读 · 0 评论 -
C语言动态顺序串实现--KMP算法
数据结构C语言动态顺序串,相比于静态顺序串只是多了能增加最大容纳量函数的操作。#include <stdio.h>#include <stdlib.h>#include <string.h>#define StrSize 20 //动态顺序串当前最大长度 typedef struct{ char *ch;//数据域 int length;//串长 int MaxSize;//最大容量 }SString;void InitSt原创 2020-10-20 15:54:12 · 445 阅读 · 1 评论 -
C语言顺序串--BF算法
数据结构C语言静态顺序串代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 50 //静态顺序串的最大容纳量 typedef struct{ char ch[MAXSIZE];//数据域 int length;//串长 }SString;void InitString(SString &S)//初始化串,静态顺序串中,只让串原创 2020-10-20 15:44:12 · 1179 阅读 · 0 评论 -
数据结构 队列的实现--链式
数据结构c语言链式队列的实现与表示代码如下:#include <stdio.h>#include <stdlib.h>typedef struct QNode{ int data; struct QNode *next;}QNode,*QueuePtr;typedef struct{ QueuePtr front;//队头指针 QueuePtr rear;//队尾指针 }LinkQueue;void InitQueue(LinkQueue &原创 2020-10-10 18:06:59 · 153 阅读 · 0 评论 -
动态顺序队列 C语言
数据结构c语言动态顺序队列的实现和表示代码如下:#include <stdio.h>#include <stdlib.h>#define InitSize 6typedef struct{ int *base;//存储空间的基地址 int front;//头指针 int rear;//尾指针 int MAXSIZE;//队列存储最大值 }SqQueue;void InitQueue(SqQueue &Q)//初始化队列 { Q.base原创 2020-10-10 08:30:24 · 501 阅读 · 0 评论