算法
文章平均质量分 57
TinyFisher
这个作者很懒,什么都没留下…
展开
-
二分搜索递归与非递归C语言实现
据说90%的程序员都无法正确的写出二分搜索,试了下果然如此,需要注意的地方挺多,所以讲递归与非递归的写法记录下来,以便于复习int binary_search(int array[],int n,int key) //非递归{ int low=0; int high=n-1; while(low<=high) //请注意= { if原创 2013-05-17 11:00:51 · 1223 阅读 · 0 评论 -
DP实例之最长公共子序列LCS
/* LCS:求最长公共子序列 例如:s1="abdrge",s2="adreg",则LCS="adre" 状态方程:lcs(i,j)=lcs(i-1,j-1)+1,其中s1[i]=s2[j] 或者 lcs(i,j)=max{lcs(i,j-1),lcs(i-1,j)}*/int LCS(char *a,char *b){ int len_a=strl原创 2013-06-13 11:18:34 · 923 阅读 · 0 评论 -
DP实例之01背包问题C语言实现
问题描述: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=m原创 2013-05-17 10:47:52 · 1888 阅读 · 0 评论 -
二叉树的创建、前/中/后序遍历、按层遍历C语言实现
二叉树的概念、性质等就不多介绍了,这里用C语言实现了二叉树的建立(1.用户输入,2.给数组参数),前中后序遍历和按层遍历。 1.二叉树的建立typedef struct BNode{ char value; //类型假设为char struct BNode *left; struct BNode *right;} Node,*pNode,*原创 2013-05-23 19:14:18 · 1726 阅读 · 0 评论 -
双向链表操作大全C语言实现
双向链表的操作和单链表很像,主要包括创建,删除,插入;只要注意下指针的操作即可,废话不多说,直接上代码:typedef struct dnode{ int num; struct dnode *pre; struct dnode *next;}Dnode,*pDnode;pDnode Create() //用户输入创建,-1表示结束{ pDnode he原创 2013-05-30 15:53:15 · 774 阅读 · 0 评论 -
单链表操作大全C语言实现
单链表的操作一般包括:建立,删除节点,插入节点,链表反转1.单链表建立,包括从终端输入和由数组转换而来两种:typedef struct node{ int num; struct node * next;}Node,*pNode;pNode CreateLink(){ pNode head=(pNode)malloc(sizeof(Node));原创 2013-05-30 11:08:53 · 831 阅读 · 0 评论 -
根据二叉树的先序和中序遍历还原二叉树
#include#includetypedef struct node{ int value; struct node *left; struct node *right;}Node,*pNode;/* *根据二叉树的先序遍历和中序遍历,还原二叉树 *先序:1,2,4,7,3,5,6,8;中序:4,7,2,1,5,3,8,6*/pNode BuildTree(int p原创 2013-05-27 19:27:50 · 1452 阅读 · 0 评论 -
获取二叉树的叶子数、高度以及左右子树的交换的C语言实现
二叉树的一些操作具有天然的递归性,本文实现了获取二叉树的叶子总数、获取二叉树高度以及交换二叉树的左右子树,代码均已编译通过。 1.获取二叉树叶子总数:左子树叶子总数+右子树叶子总数typedef struct BNode{ char value; //类型假设为char struct BNode *left; struct BNode *right原创 2013-05-25 15:58:47 · 2236 阅读 · 1 评论 -
冒泡排序C语言实现
即将找工作,打算将各个排序算法复习一遍,便于以后复习,代码均在codeblock下编译通过,重要的地方有注释提醒,第一篇:冒泡排序void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp;}void bubble_sort(int input[],int length){ int i,j,flag=原创 2013-05-15 19:39:14 · 859 阅读 · 0 评论 -
堆排序C语言实现
堆的概念这里不再描述,这里主要实现堆排序,堆排序主要分为两步:1.堆化数组(最小堆);2.交换首尾元素,(则最后一个元素为最小),调整前n-1个元素,使前n-1个元素仍为为最小堆,循环,直到还剩一个元素;这样排序下来,数组为倒序。代码如下:void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp;}v原创 2013-05-16 09:27:52 · 758 阅读 · 0 评论 -
快速排序C语言实现
void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp;}int partition (int input[],int low,int high){ int position=low-1; int key=input[high]; while(low<high) { i原创 2013-05-16 10:52:07 · 712 阅读 · 0 评论 -
归并排序C语言实现
void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp;}void merge_array(int a[],int low,int mid,int high,int result[]){ int i,j,k; i=low; j=mid+1; k=0; while(i<=mid原创 2013-05-17 10:55:06 · 788 阅读 · 0 评论 -
DP实例之最长上升子序列LIS
/* LIS:最长递增子序列,例如:23453267,最长递增子序列为:234567 lis(i)表示以a[i]结束的递增子序列的长度 lis(i)=max{lis(k)+1,1} k from 0 to i-1 最长递增子序列长度为max(lis[]);*/int LIS(int a[],int len){ int *p=(int *)mallo原创 2013-06-13 11:21:57 · 746 阅读 · 0 评论