
数据结构/算法
Shane Zhao
CV
展开
-
尾插法建链表
#include <stdio.h> #include <malloc.h>//定义结点结构体struct node{ char data; struct node *next;};typedef struct node JD;//指针函数,返回创建的链表JD *createLinkedList(){ JD *head,*s,*r;//定义头节点,待插入结点,尾节点指原创 2016-02-18 11:40:19 · 652 阅读 · 0 评论 -
Dynamic programming
# coding: utf-8# In[2]:# 动态规划 0/1背包问题# 参考http://www.hawstein.com/posts/dp-knapsack.htmlimport numpy as np# In[3]:# 一共五个宝石,袋子一共可以放10磅宝石n=5c=10# v代表宝石的重量,w代表宝石的价值v={0:2,1:2,2:6,3:5,4:4}w={0:6,1:原创 2017-07-10 11:02:39 · 338 阅读 · 0 评论 -
Divide_Conquer
# coding: utf-8# In[22]:# 分治法求和 请编写前述sum函数的代码def SUM(arr,start,end): if start==end: return arr[end] else: return arr[start]+SUM(arr,start+1,end)# In[28]:date=[x for x in ran原创 2017-07-10 11:00:44 · 401 阅读 · 0 评论 -
python实现求字符串最长公共子串
本文主要参考http://www.cnblogs.com/ider/p/longest-common-substring-problem-optimization.html的讲解,本人自己用python实现了一下暴力法,动态规划。# coding: utf-8# ## 最长公共子串问题# # ### 暴力法求解 VS 动态规划# # ### 参考自http://www.cnblogs.原创 2017-07-10 10:56:05 · 5264 阅读 · 0 评论 -
迪杰斯特拉算法python实现
回顾下最短路径的地杰斯特拉算法迪杰斯特拉算法是求从某一个起点到其余所有结点的最短路径,是一对多的映射关系,是一种贪婪算法示例: 算法实现流程思路: 迪杰斯特拉算法每次只找离起点最近的一个结点,并将之并入已经访问过结点的集合(以防重复访问,陷入死循环),然后将刚找到的最短路径的结点作为中间结点来更新相邻结点的路径长度,这样循环找到图中一个个结点的最短路径。# dists定义了图,记录着从从起点出发原创 2017-07-08 09:22:09 · 12222 阅读 · 0 评论 -
C语言实现AVL-平衡二叉树
前言在学习了二叉搜索树后,我们可以通过二叉搜索树实现结点有序存储。 我们在删除结点的时候,采用的是该结点右子树中最小结点代替他,探后再删除最小的那个结点,这种做法虽然保证了二叉树的有序性,但是久而久之使二叉树越来越不平衡,右边结点越来越少。像这样 或许在右子树中选择最小和左子树中选择最大轮换地使用可以稍微解决一下这种不平衡,但是在这里我们介绍一种AVL树来保证二叉查找树的平衡,AVL树得名于它的原创 2016-03-23 21:22:30 · 9849 阅读 · 6 评论 -
C语言实现二叉查找树
基本概念首先二叉查找树是二叉树,回顾一下二叉树的概念,二叉树的每个节点都不能有多于两个的儿子,一般二叉树如下二叉树的性质二叉树有以下几个性质:TODO(上标和下标) 性质1:二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。 性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。 性质3:包含n个结点的二叉树的高度至少为log2 (n+1)。 性质4:在任意一棵二叉树中,若终端原创 2016-03-22 14:31:04 · 1803 阅读 · 1 评论 -
C语言建立二叉数并遍历,求深度,求叶子数
#include <stdio.h> #include <malloc.h>typedef struct node{ char data; node *l_child,*r_child;}BitNode,*BitTree;/*建立二叉链表*/BitTree create_bitTree(){ char ch; scanf("%c",&ch); Bit原创 2016-03-10 18:05:12 · 702 阅读 · 0 评论 -
C语言单链表实现栈
#include <stdio.h>#include <stdlib.h>typedef struct NODE{ int val; struct NODE *next;}node;//define nodenode * head=NULL;//init head_node of stack//create nodenode *create_node(int val){原创 2016-04-02 23:21:01 · 2346 阅读 · 0 评论 -
C语言数组实现栈操作
#include <stdio.h>#include <stdlib.h>int * array=NULL;//存放栈元素的数组int count=0;//当前栈的元素个数//初始化栈void init_stack(int size){ array=(int *)malloc(sizeof(int)*size); if(!array) { printf(原创 2016-04-02 18:40:10 · 6697 阅读 · 0 评论 -
C语言实现哈夫曼树
关于huffman的定义和使用场景就不说了,可以参考别人的文章其中我这儿哈夫曼树是采用数组来存储结点,用最小二叉堆来寻找最小结点数值基本思路如下: 一. 创建头文件Huaffman.h,定义结点结构体,定义哈夫曼树的基本操作#ifndef _AVL_TREE_H_#define _AVL_TREE_H_typedef int Type;typedef struct _HuffmanNode{原创 2016-03-17 12:05:02 · 2067 阅读 · 0 评论 -
改进的KMP算法
/*改进的字符串匹配算法 改进的KMP算法*/ #include <stdio.h>#include <stdlib.h>#include <string.h> int next[100];//全局变量 int KMP(char S[],char T[]){ int i=0,j=0,k;//i指向S,j指向T int length_s=strlen(S),length_t=原创 2016-02-22 15:10:35 · 2724 阅读 · 0 评论 -
字符串匹配之KMP算法
代码来自看严蔚敏教授C数据结构视频教程后所写/*字符串匹配算法 KMP算法*/ #include <stdio.h>#include <stdlib.h>#include <string.h> int next[100];//全局变量 int KMP(char S[],char T[]){ int i=0,j=0;//i指向S,j指向T int length_s=strle原创 2016-02-22 14:01:29 · 464 阅读 · 0 评论 -
字符串匹配算法 BF算法或者简单匹配
/*字符串匹配算法 BF算法或者简单算法*/ #include <stdio.h>#include <stdlib.h>#include <string.h> int BF(char S[],char T[]){ int i=0,j=0;//i指向S,j指向T int length_s=strlen(S),length_t=strlen(T); //printf("%原创 2016-02-21 16:06:28 · 969 阅读 · 0 评论 -
链表基本操作复习
链表在数据结构里是种非常重要的,在这里我复习了下链表的基本操作List init_list();//初始化链表List list_insert(List list,int key);//向链表插入节点,尾插法List list_insertBypos(List list,int pos,int key);//向链表指定位置插入结点void print_list(List list);//打印链表in原创 2016-03-30 12:08:22 · 469 阅读 · 0 评论 -
顺序表应用之两个一元多项式求和
#include <stdio.h>#include <malloc.h>typedef struct node{ int coef;//系数 int exp;//指数 struct node *next; }NODE;NODE *creatPoly(){ int coef; int exp; NODE *head,*tail,*s;//链表头结点原创 2016-02-18 23:09:00 · 7838 阅读 · 4 评论 -
尾插法建链表
#include <stdio.h> #include<malloc.h>//定义结点结构体typedef struct node{ char data; struct node *next;}NODE,*JD;//定义一个NODE结构体类型和一个JD结构体类型指针//建链表函数 head为头指针结点 void insertNode(JD *head,char ch){原创 2016-02-18 14:00:02 · 606 阅读 · 0 评论 -
顺序表建表
#include <stdio.h> #define m 100//定义结点结构体 typedef struct L{ int data[m]; int length;}Sqlist;//链表插入结点,list为链表指针,poc为插入的位置,x为插入的数据 int ListInsert(Sqlist *list,int poc,int x){ if(list->len原创 2016-02-18 11:43:52 · 565 阅读 · 0 评论 -
EM算法
站在巨人的肩膀上眺望远方reference: http://blog.youkuaiyun.com/zouxy09/article/details/8537620 https://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm#As_a_maximization-maximization_procedure http://w原创 2017-08-30 22:04:50 · 380 阅读 · 2 评论