自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 矩阵Moore-Penrose伪逆

对于非方正矩阵而言,其逆矩阵没有定义。假设在下面的问题中,我们希望通过矩阵A的左逆B来求解线性方程:**Ax = y**等式两边乘以左逆B后,得到 x = By 取决于问题的形式,可能无法设计一个唯一的映射将A映射到B。 如果矩阵A的行数大于列数,那么上述方程可能没有解。如果矩阵A的行数小于列数,那么上述矩阵可能有多个解。Moore-Penrose伪逆使我们在这类问题上取得了一定得...

2018-05-23 20:39:18 3282 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 1912

原创 拓扑排序 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 537

原创 关键路径 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 557

原创 队列基本操作-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 517

原创 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 655

原创 拓扑排序--C语言

基本思想: 1、在有向图中选一个没有前驱(入度为0)的顶点且输出; 2、从图中删除该顶点和所有以它为尾的边。 重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止(此时说明有向图中存在环)。#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/*--有向无环图拓扑排序--*/

2017-01-23 20:58:29 492

原创 求连通图的关节点(割点)--C语言

最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是割点,反之不是割点(图的连通性一般通过深搜来判定,是否能一次搜索完 全部顶点);通过深搜优先生成树来判定。从任一点出发深度优先遍历得到优先生成树,对于树中任一顶点V而言,其孩子节点为邻接点。由深度优先生成树可得出两类割点的特性:(1)若生成树的根有两棵或两棵以上的子树,则此根顶点必为割点。因为图中不存在连接不同子

2017-01-21 19:51:20 3302

原创 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 2416 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 5856 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 8356

原创 二叉平衡树(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 558

原创 二叉查找树(二叉排序树)创建、插入、删除、查找-C语言

二叉查找树:或者是一颗空树;或者是具有以下性质的二叉树:(1)若它的左子树不为空,则左子树上所有结点的值都小于根结点的值;(2)若它的右子树不为空,则右子树所有结点的值均大于它的根结点的值;(3)左右子树分别为二叉查找树;#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#define N 7 //插入查找树数组长度 /* 二

2017-01-12 21:10:40 20167 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 1307

原创 先序中序重建二叉树

基本思路: 1、先序遍历第一个结点作为根节点。 2、在中序遍历中查找根节点的位置,以此为界将中序遍历序列划分为左右两个序列(左、右子树)。 3、根据左、右子树在中序序列中的结点个数,将先序序列去掉根结点后的序列划分为左、右两个序列,它们分别为左、右子树的先序序列。 4、对左、右子树的先序序列和中序序列递归实施同样方法,直到左、右子树为空。#include <stdio.h>#include

2017-01-04 16:20:40 382

原创 判断二叉树是否为完全二叉树

基本思路:使用队列按层次遍历二叉树,遍历过程中将二叉树的所有结点依次入队。当出队遇见一个NULL结点时,若遍历其后结点都为NULL则为完全二叉树,否则不是完全二叉树。因为层次遍历完全二叉树时,当遍历到空结点时前面所有非空结点已经被遍历完了,若空结点之后还有非空结点则不是完全二叉树。#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/

2017-01-04 16:05:10 2519

原创 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 1604 1

原创 C语言字符串操作----strlen()、strcpy()、strcat()、strcmp()

C语言中并没有没有显示的字符串数据类型,因此字符串以字符串常量的形式或者存储于字符数组中。字符串常量很适合用于那些程序不会对它们进行修改的字符串,所有其他字符串必须存储于字符数组或动态分配的内存中。注意:字符串是以一个位模式为全0的NUL字节结尾,因此,字符串所包含的字符内部不能出现NUL字节。C语言中 头文件string.h包含使用字符串函数所需的原型和声明。尽管并非必需,但在程序中包含头文

2016-12-24 19:25:51 3162

原创 获取链表倒数第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 352

原创 翻转链表

//翻转一个链表#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 335

原创 合并两个有序链表(非递归与递归)

基本思路:非递归合并过程中直接将原链表的节点从原链表中取出链入合并链表中。递归合并中将链入节点后剩余的链表作为新的链表再递归合并。typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//合并两个有序链表LinkList mergeList(LNode *head1,LNode *head2){

2016-12-21 17:43:22 590

原创 创建逆序输入值的单链表

基本思路:使用两个临时指针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 567

原创 单链表基本操作:创建、插入、删除、获取

#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 531

原创 以O(1)时间删除单链表一个节点

基本思路:把要删除的节点的下一个节点复制到当前节点,然后删除被复制了的下一个节点,即使用下一个节点覆盖当前节点达到删除当前节点的目的,时间复杂度为O(1)。当要删除的节点是尾节点时,仍然需要从头结点开始遍历,时间复杂度仍为O(n)。#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct

2016-12-21 16:53:16 351

原创 双向链表创建、插入、删除

创建含有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 506

原创 计算二叉树中最远节点距离

二叉树最远节点距离:以根节点为轴左右子树最大深度之和与以各个子树的根节点为轴左右子树的最大深度之和的较大者。思路一:解决这个问题最直接的方式就是遍历。对每个节点求深度,之后再与保存的最大深度maxdepth进行对比,但是时间复杂度为O(n^2),这是一种比较糟糕的时间复杂度。 思路二:针对思路一,重复了大量的遍历工作,对每一个节点求深度,对最深的节点遍历了2^n次,没有线索化的二叉树遍历,最常用的

2016-12-18 00:14:01 4850 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 247

原创 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 1276

原创 求二叉树的高度,宽度、节点个数、叶子节点个数

#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 4645

原创 二叉树的递归遍历与非递归遍历

二叉树的递归遍历与非递归遍历#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 288

U盘的发展原理和历程

对U盘的发展原理进行介绍

2015-09-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除