- 博客(30)
- 资源 (1)
- 收藏
- 关注
原创 矩阵Moore-Penrose伪逆
对于非方正矩阵而言,其逆矩阵没有定义。假设在下面的问题中,我们希望通过矩阵A的左逆B来求解线性方程:**Ax = y**等式两边乘以左逆B后,得到 x = By 取决于问题的形式,可能无法设计一个唯一的映射将A映射到B。 如果矩阵A的行数大于列数,那么上述方程可能没有解。如果矩阵A的行数小于列数,那么上述矩阵可能有多个解。Moore-Penrose伪逆使我们在这类问题上取得了一定得...
2018-05-23 20:39:18
3353
1
原创 最短路径 (单源最短路径Dijkstra和任意两点最短路径Floyd) C实现
#include "stdafx.h"#include #include #include #define MAX_VERTEX_NUM 20#define INFINITY INT_MAXtypedef struct MGraph{ int vexnum, arcnum; int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
2018-02-02 14:24:35
1932
原创 拓扑排序 C实现
#include "stdafx.h"#include #include #define MAX_VERTEX_NUM 20typedef struct ArcNode{ int data; struct ArcNode *next;}ArcNode, *PArcNode;typedef struct VNode{ int indegree;
2018-01-29 20:22:34
546
原创 关键路径 C实现
#include "stdafx.h"#include #include #define MAX_VERTEX_NUM 20typedef struct ArcNode{ int data; int weight; struct ArcNode *next;}ArcNode, *PArcNode;typedef struct VNode{ in
2018-01-29 20:20:26
575
原创 队列基本操作-C语言
#include <stdio.h>#include <stdlib.h>/* 队列 */typedef struct Node{ int data; struct Node *next;}Node,*PNode;typedef struct Queue{ PNode front; PNode rear;}Queue, *PQueue;//初始化队列 PQue
2017-11-20 21:17:53
525
原创 C语言实现栈(栈的链式实现)
#include <stdio.h>#include <stdlib.h>/* 栈的创建及其应用 */typedef struct Node{ int data; struct Node *next;}Node, *Pnode;typedef struct Stack{ Pnode top; Pnode base;}Stack, *Pstack;//创建一个空
2017-11-15 13:14:09
668
原创 拓扑排序--C语言
基本思想: 1、在有向图中选一个没有前驱(入度为0)的顶点且输出; 2、从图中删除该顶点和所有以它为尾的边。 重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止(此时说明有向图中存在环)。#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/*--有向无环图拓扑排序--*/
2017-01-23 20:58:29
509
原创 求连通图的关节点(割点)--C语言
最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是割点,反之不是割点(图的连通性一般通过深搜来判定,是否能一次搜索完 全部顶点);通过深搜优先生成树来判定。从任一点出发深度优先遍历得到优先生成树,对于树中任一顶点V而言,其孩子节点为邻接点。由深度优先生成树可得出两类割点的特性:(1)若生成树的根有两棵或两棵以上的子树,则此根顶点必为割点。因为图中不存在连接不同子
2017-01-21 19:51:20
3335
原创 Prim算法求图的最小生成树--C代码
#include<stdio.h>#include<stdlib.h>#include<limits.h>#include<stdbool.h>/*---prim算法时间复杂度O(n^2),n为顶点数,时间复杂度与边的数目无关,因此适用于求边稠密的图的最小生成树---*/ #define MAX_VERTEX_NUM 20 //图中顶点最大个数 #define INFINITY INT
2017-01-20 14:23:11
2438
3
原创 图的遍历(DFS、BFS)使用邻接矩阵(数组)作为存储结构--C语言
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <limits.h>#define MAX_VERTEX_NUM 20 //最大顶点个数 #define INFINITY INT_MAX //最大值∞ typedef char VertexType; //顶点向量类型 typedef int V
2017-01-17 17:34:11
5902
1
原创 图的遍历--使用邻接表作为存储结构的遍历(DFS、BFS)C语言
#include <stdbool.h>#include <stdlib.h>#include <stdio.h> #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef char VertexType;typedef int VRType;typedef int InfoType; //图中边上的权值信息 typedef int QElemType
2017-01-16 20:37:29
8396
原创 二叉平衡树(AVL)-C语言
#include <stdio.h>#include <stdlib.h>#define max(a,b) (a>=b?a:b)#define min(a,d) (a<b?a:b)#define N 7 //数组长度/* 二叉平衡树AVL */typedef int Elemtype;typedef struct AVLNode{ Elemtype data; st
2017-01-13 15:54:29
572
原创 二叉查找树(二叉排序树)创建、插入、删除、查找-C语言
二叉查找树:或者是一颗空树;或者是具有以下性质的二叉树:(1)若它的左子树不为空,则左子树上所有结点的值都小于根结点的值;(2)若它的右子树不为空,则右子树所有结点的值均大于它的根结点的值;(3)左右子树分别为二叉查找树;#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#define N 7 //插入查找树数组长度 /* 二
2017-01-12 21:10:40
20242
6
原创 哈夫曼树以及哈夫曼编码
1.哈夫曼树 假设有n个权值{w1, w2, …, wn},试构造一棵含有n个叶子结点的二叉树,每个叶子节点带权威wi,则其中带权路径长度WPL最小的二叉树叫做最优二叉树或者哈夫曼树。 特点:哈夫曼树中没有度为1的结点,故由n0 = n2+1以及m= n0+n1+n2,n1=0可推出m=2*n0-1,即一棵有n个叶子节点的哈夫曼树共有2n-1个节点2.哈夫曼编码 通信传
2017-01-11 15:39:10
1357
原创 先序中序重建二叉树
基本思路: 1、先序遍历第一个结点作为根节点。 2、在中序遍历中查找根节点的位置,以此为界将中序遍历序列划分为左右两个序列(左、右子树)。 3、根据左、右子树在中序序列中的结点个数,将先序序列去掉根结点后的序列划分为左、右两个序列,它们分别为左、右子树的先序序列。 4、对左、右子树的先序序列和中序序列递归实施同样方法,直到左、右子树为空。#include <stdio.h>#include
2017-01-04 16:20:40
391
原创 判断二叉树是否为完全二叉树
基本思路:使用队列按层次遍历二叉树,遍历过程中将二叉树的所有结点依次入队。当出队遇见一个NULL结点时,若遍历其后结点都为NULL则为完全二叉树,否则不是完全二叉树。因为层次遍历完全二叉树时,当遍历到空结点时前面所有非空结点已经被遍历完了,若空结点之后还有非空结点则不是完全二叉树。#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/
2017-01-04 16:05:10
2564
原创 C语言字符串查找基础----strchr()、strrchr()、strpbrk()、strstr()
1、查找一个字符 在一个字符串查找一个特定字符最容易的方法是使用strchr和strrchr函数,原型如下所示:char *strchr(char const *str, int ch);char *strrchr(char const *str,int ch);注意:它们的第二个参数是一个整型值。但是,它包含了一个字符值。strchr返回字符第一次出现的位置,strrchr返回字符最后
2016-12-30 17:42:59
1645
1
原创 C语言字符串操作----strlen()、strcpy()、strcat()、strcmp()
C语言中并没有没有显示的字符串数据类型,因此字符串以字符串常量的形式或者存储于字符数组中。字符串常量很适合用于那些程序不会对它们进行修改的字符串,所有其他字符串必须存储于字符数组或动态分配的内存中。注意:字符串是以一个位模式为全0的NUL字节结尾,因此,字符串所包含的字符内部不能出现NUL字节。C语言中 头文件string.h包含使用字符串函数所需的原型和声明。尽管并非必需,但在程序中包含头文
2016-12-24 19:25:51
3177
原创 获取链表倒数第K个节点值
基本思想:设置两个指正,一个快指针pfast,一个慢指针pslow,首先快指针从头结点提前走K-1步,然后两个指针同时开始往后走,当快指针走到尾结点时,慢指针所指结点就是倒数第K个结点。typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//输出链表倒数第K各节点int getTailK(LinkL
2016-12-21 20:14:15
362
原创 翻转链表
//翻转一个链表#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//创建一个含有n个元素的单链表LNode *createList(int n){ LNode *head = NULL,*p1,*p2;
2016-12-21 20:03:25
343
原创 合并两个有序链表(非递归与递归)
基本思路:非递归合并过程中直接将原链表的节点从原链表中取出链入合并链表中。递归合并中将链入节点后剩余的链表作为新的链表再递归合并。typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//合并两个有序链表LinkList mergeList(LNode *head1,LNode *head2){
2016-12-21 17:43:22
593
原创 创建逆序输入值的单链表
基本思路:使用两个临时指针p1,p2,p1指向新创建的节点,p2指向创建过程中链表临时头结点。新节点创建后将其作为链表新的头节点。typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//创建一个逆序输入的n个元素的链表LNode *createEndList(int n){ LNode *
2016-12-21 17:24:39
578
原创 单链表基本操作:创建、插入、删除、获取
#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//创建一个含有n个元素的单链表LNode *createList(int n){ LNode *head = NULL,*p1,*p2; for(in
2016-12-21 16:59:24
542
原创 以O(1)时间删除单链表一个节点
基本思路:把要删除的节点的下一个节点复制到当前节点,然后删除被复制了的下一个节点,即使用下一个节点覆盖当前节点达到删除当前节点的目的,时间复杂度为O(1)。当要删除的节点是尾节点时,仍然需要从头结点开始遍历,时间复杂度仍为O(n)。#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct
2016-12-21 16:53:16
360
原创 双向链表创建、插入、删除
创建含有N各节点的双向链表,实现在链表中插入、删除节点。#include<stdio.h>#include<stdlib.h>typedef struct DulNode{ int data; struct DulNode *prior; struct DulNode *next;}DNode,*DLinkList;//创建含有n个节点的双链表DLinkList cre
2016-12-21 16:20:12
525
原创 计算二叉树中最远节点距离
二叉树最远节点距离:以根节点为轴左右子树最大深度之和与以各个子树的根节点为轴左右子树的最大深度之和的较大者。思路一:解决这个问题最直接的方式就是遍历。对每个节点求深度,之后再与保存的最大深度maxdepth进行对比,但是时间复杂度为O(n^2),这是一种比较糟糕的时间复杂度。 思路二:针对思路一,重复了大量的遍历工作,对每一个节点求深度,对最深的节点遍历了2^n次,没有线索化的二叉树遍历,最常用的
2016-12-18 00:14:01
4876
1
原创 字符串模式匹配
#include <stdio.h>#include <stdlib.h>#include<string.h>//字符串模式匹配int indexString(char s[],char t[],int pos){ int i = pos,j=1; while(i<=strlen(s) && j<=strlen(t)) { if(s[i-1]==t[j
2016-12-16 16:00:17
258
原创 hanio塔问题
#include <stdio.h>#include <stdlib.h>int c=0;//移动次数void move(char x,int n,char z){ printf("%d. Move disk %d from %c to %c \n",++c,n,x,z);}void hanio(int n,char x,char y,char z){ if(n==1)
2016-12-16 15:55:58
1285
原创 求二叉树的高度,宽度、节点个数、叶子节点个数
#include<stdio.h>#include<stdlib.h>#include<stdbool.h>/*实现求二叉树的高度,宽度、节点个数、叶子节点个数*/typedef struct NODE{ int data; struct NODE *lchild,*rchild; }TNode,*PTNode; PTNode createtree() { PTN
2016-12-16 15:49:23
4662
原创 二叉树的递归遍历与非递归遍历
二叉树的递归遍历与非递归遍历#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/* 本程序实现二叉树的创建,递归遍历与非递归遍历 */ typedef struct TNODE { int data; struct TNODE *lchild,*rchild; }TNode,*PNode; //构造二叉树 P
2016-12-16 15:46:06
295
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人