
Data Structures And Algorithms
文章平均质量分 53
liuhaifang123456
这个作者很懒,什么都没留下…
展开
-
二叉查找树(二叉排序树)的详细实现
博客地址:http://blog.youkuaiyun.com/touch_2011/article/details/68319242011-10-22 13:18:24 · 283 阅读 · 0 评论 -
确定参赛者名单(C语言实现)
/*2011第二届国信蓝点杯全国软件专业人才设计与开发大赛2011第二届国信蓝点杯全国软件专业人才设计与开发大赛选拔赛试题-Java语言高职组最后一题题:A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参...2011-07-10 10:39:02 · 583 阅读 · 0 评论 -
整数划分(C语言实现)
/*整数的划分问题。 如,对于正整数n=6,可以分划为: 6 5+1 4+2, 4+1+1 3+3, 3+2+1, 3+1+1+1 2+2+2, 2+2+1+1, 2+1+1+1+1 1+1+1+1+1+1+1 现在的问题是,对于给定的正整数n,编写算法打印所有划分。用户从键盘输入 n (范围1~10)程序输出该整数的所有划分。*/#in...2011-07-10 10:35:20 · 2687 阅读 · 1 评论 -
几种全排列的算法(C语言实现)
/* * 几种排列组合的算法 */#include<stdio.h>int a[20];int n;//打印数组void showArray(int *a){ int i; for(i=1;i<=n;i++) printf("%d",a[i]); printf("\n");}//翻转法void ...2011-07-07 00:14:00 · 3959 阅读 · 0 评论 -
Playfire加密算法(C语言实现)
这是C语言选拔赛最后一题,题目如下: /* * c语言竞赛初赛本科最后一题 */#include<stdio.h>#include<string.h>//矩阵char matrix[5][5];//存储26个字母在矩阵中的行号和列号,不在矩阵中行列号均为-1int charSite[26][2];//填充ma...2011-07-06 10:13:13 · 1264 阅读 · 0 评论 -
浅析贪心算法
1.基本思路:a.顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。b....2011-07-05 17:46:12 · 175 阅读 · 0 评论 -
浅析动态规划算法
1、 基本思想将一个问题分解为子问题递归求解,且将中间结果保存以避免重复计算。通常用来求最优解,且最优解的局部也是最优的。求解过程产生多个决策序列,下一步总是依赖上一步的结果,自底向上的求解。2、 一般步骤A. 寻找子问题,对问题进行划分。一般是分几种情况,有时是模拟现实中的情况B. ...2011-07-05 15:30:40 · 199 阅读 · 0 评论 -
浅析递归
1.递归的思想:设计一个递归函数,明确这个递归函数的定义,在这个函数里面反复调用自己从而求出问题的解。递归很多时候用于求有多少种解法的题目:这时要分清有多少种情况,然后把每一种情况产生的解的个数相加。2.例题分析(1)放苹果:M个同样的苹果放N个同样的盘子,允许有盘子空着, 问有多少种放法。注意:5 1 1和1 5 1是同一种放法 分析:分两种情况:a.至少有一个盘子为空,...2011-07-02 20:40:06 · 292 阅读 · 0 评论 -
浅析分治法
1、分治法思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。2.分治法特征:1) 该问题的规模缩小到一定的程度就可以容易地解决2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。3) 利用该问题分解出的子问题的解可以合并为该问题的解;4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。...2011-07-02 13:54:33 · 191 阅读 · 0 评论 -
浅析回溯算法
1、回溯法的基本思想 (1)在确定解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜索整个解空间。这个开始结点成为活结点,同时也成为当前的扩展结点。(2)在当前扩展结点处,搜索向纵深方向移至一个新结点。这个新结点成为新的活结点,并成为扩展结点。(3)如果在当前扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时,应往回移动(回溯)到最近的活结点处,...2011-06-29 22:48:09 · 358 阅读 · 0 评论 -
高精度计算
1.大整数加法2.大整数减法3.大整数乘法4.大整数除法(通过不断的做减法)5.麦森树具体解析看图片附件2011-06-27 14:06:35 · 157 阅读 · 0 评论 -
浅析模拟算法
1.描述 有些问题难以找到公式或规律来解决,可以按照步骤,模拟人的解决行为,一步一步往下走就能找到答案。2.实例分析 (1)(北大考研机试)一根长度为1米的木棒上有若干只蚂蚁在爬动。它们的速度为每秒一厘米或静止不动,方向只有两种,向左或者向右。如果两只蚂蚁碰头,则它们立即交换速度并继续爬动。三只蚂蚁碰头,则两边的蚂蚁交换速度,中间的蚂蚁仍然静止。如果它们爬到了木棒的边缘(0...2011-06-27 07:58:02 · 352 阅读 · 0 评论 -
农夫过河的四种解法
/* * 题目描述:有一个农夫,带着一只狼、一只羊、一颗白菜过河。其中农夫不在的时候狼会吃羊, * 羊会吃白菜。只有一只船,且每次农夫最多只能带一样物品过河。求解决方案。 * * 思路:1. 过程回溯法。把人、狼、羊、白菜看成A、B、C、D。过河的时候从ABCD中选两个过河,在 * 选一个回来。若发生狼跟羊、羊跟白菜在同一个岸边,且农夫不...2011-06-25 14:21:17 · 8949 阅读 · 0 评论 -
各种排序算法的实现(C语言实现)
/* * 各种基本排序算法实现(以由小到大为例) */#include<stdio.h>#define ARRAY_LENGTH 50 //插入排序void inseartSort(int a[],int length){ int i,j,index,temp; for(i=0;i<length;i++){//数组a中元素逐个有序插入数...2011-06-17 22:31:28 · 324 阅读 · 0 评论 -
二叉查找树(C语言实现)
/* * 构造一颗二叉查找树,实现树的插入、删除等基本操作 * */#include<stdio.h>#include<stdlib.h>typedef struct node{ int count; //记录某个元素出现的次数 int data; //数据 struct node * left; struct...2011-06-15 23:47:54 · 185 阅读 · 0 评论 -
哈希表查找(C语言实现)
/* * 题目:给定一个全部由字符串组成的字典,字符串全部由大写字母构成。其中为每个字符串编写密码,编写的 * 方式是对于 n 位字符串,给定一个 n 位数,大写字母与数字的对应方式按照电话键盘的方式: * 2: A,B,C 5: J,K,L 8: T,U,V * 3: D,E,F 6: M,N,O 9: W,...2011-06-15 13:38:53 · 2315 阅读 · 0 评论 -
索引查找之英语词典(C语言实现)
/* * 题目:英语词典。所有的单词存放在dictionary.txt中。输入一个英文单词,在词典中查找这个单词, * 若找到显示这个单词的中文意思,显示此单词不存在。 * 思路:以字母顺序建立索引表。 * */ /* * 题目:英语词典。所有的单词存放在dictionary.txt中。输入一个英文单词,在词典中查找这个单词, * 若找到显示这个单词的中...2011-06-14 22:48:23 · 2243 阅读 · 1 评论 -
求最短路径的两种算法(C语言实现)
求这个有向网中任意两点的最短路径 /* * 最短路径,迪杰斯特拉算法和弗洛伊德算法(采用邻接矩阵存储) * */#include<stdio.h>#define MAX_VERTEX_NUM 20#define INFINITE 10000 //当做无穷大//图的定义typedef struct { int verte...2011-06-11 11:23:10 · 2434 阅读 · 0 评论 -
拓扑排序(C语言实现)
对这个有向图进行拓扑排序/* * 拓扑排序(采用邻接矩阵存储) */#include<stdio.h>#define MAX_VERTEX_NUM 20//图的定义typedef struct { int vertexNum; char vertex[MAX_VERTEX_NUM]; int arc[MAX_VERTEX_NUM][M...2011-06-10 23:09:59 · 1117 阅读 · 0 评论 -
最小生成树(C语言实现)
求这个网的最小生成树/* * 普里姆算法和克鲁斯卡尔算法求最小生成树 * 采用邻接矩阵存储 * */#include<stdio.h>#define MAX_VERTEX_NUM 20//图的定义typedef struct { int vertexNum; int edgeNum; char vertex[MAX_VERTE...2011-06-10 21:30:32 · 4846 阅读 · 2 评论 -
邻接表存储的有向图的基本操作(C语言实现)
/* * 邻接表存储的有向图的基本操作 */#include<stdio.h>#include<stdlib.h>#define MAX_VERTEX 20typedef char VertexType;//用数组vertex按序存放遍历的各个顶点,广度遍历时看成队列,深度遍历时看成栈VertexType vertex[MAX_VER...2011-06-06 11:47:44 · 2940 阅读 · 0 评论 -
邻接矩阵存储的无向网的基本操作(C语言实现)
/* *无向网的基本操作(邻接矩阵存储) */#include<stdio.h>#define MAX_VERTEX_NUM 20typedef char VertexType;typedef struct { int vertexNum;//顶点个数 VertexType vertex[MAX_VERTEX_NUM];//顶点信息 int ...2011-06-05 01:09:13 · 965 阅读 · 0 评论 -
哈夫曼编码与解码(C语言实现)
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define MAXNUM 60typedef struct{ char ch; int weight; //权值,这个字符出现的频率 int parent; i...2011-05-26 07:34:44 · 5865 阅读 · 1 评论 -
二叉树的基本操作(C语言实现)
#include<stdio.h>#include<stdlib.h>//二叉树的节点定义typedef struct TreeNode{ char ch; //数据域 struct TreeNode *lchild; //左孩子 struct TreeNode *rchild; //右孩子}BTNode...2011-05-25 14:02:23 · 538 阅读 · 0 评论 -
购物卷1000元买多种东西,刚好用完的解决方案(C语言实现)
#include<stdio.h>#define M_MAX 20//最多输入的商品种类#define MONEY 1000//购物卷金额int m;//商品种类int price[M_MAX];//存储各种商品价格int max_count[M_MAX];//每一种商品最多能买多少个int count[M_MAX];//记录当前各个商品的...2011-05-15 17:41:08 · 1055 阅读 · 0 评论 -
打印螺旋上三角(C语言实现)
#include<stdio.h>void print(int n);void main(){ int n; printf("please input n(n<=20):\n"); scanf("%d",&n); print(n);}void print(int n){ int i=0;//x坐标 i...2011-05-15 16:56:22 · 1064 阅读 · 0 评论 -
猴子偷桃问题(C语言实现)
/* * * 题目:有五只猴子摘了一堆桃,决定第二天分食,在晚上,一只猴子偷偷起来把桃子 平分成5份,还剩下一只桃,便吃了剩下的一只,再拿走了其中一份。一会儿又 有一只猴子起来也把桃子平分成5份,还剩一只,便吃了,再拿走一份。就这样, 第三只、四只、五只都按此法吃了又拿,问这五只猴子原来最少摘了多少只桃? * * 作者:To...原创 2011-05-14 17:50:54 · 3790 阅读 · 0 评论 -
马的遍历(C语言实现)
题目描述:设计程序完成如下要求:在中国象棋棋盘上,对任一位置上放置的一个马,均能选择合适 的路线,使得该棋子能够按象棋的规则不重复的走过棋盘上的每一个位置。 作者:Touch 时间:2011-05-13 思路:回溯与递归。每个位置都有八个方向(当然有些方向走不通),选择一个方向走,走不通时回溯 为了提高效率,选择下一个位...2011-05-14 17:00:33 · 1883 阅读 · 1 评论 -
数值计算,插值,解方程(C语言实现)
一些关于插值,解方程的实现,比如牛顿插值等。。。2011-05-10 13:57:49 · 377 阅读 · 0 评论 -
英汉词典(C语言实现)
/*题目:某英汉词典包含N个记录,每个记录有两个字段:一个是英文单词,另一个是中文解释。各个记录按英文单词的词典顺序排列,各英文单词并不重复。输入英文单词和中文解释(用空格隔开),若此单词已存在,则把这个单词的中文解释覆盖掉,若不存在,则把此单词加入词典。(输入的大写字母全部转换成小写,词典中没有大写字母)。单词在文本文件中的存储形式:(单词和中文有空格隔开)dictionary.txtabout...2011-05-10 13:44:33 · 3916 阅读 · 0 评论 -
计算环上可以取走的珠子(C语言实现)
/*设一个环上有编号为 0~n-1 的 n 粒不同颜色的珠子 ( 每粒珠子颜色用字母表示,n 粒珠子的颜色由输入的字符串表示)。将环中某两粒珠子间剪开,环上珠子形成一个序列,然后按以下规则从序列中取走珠子:首先从序列左端取走所有连续同包珠子;然后从序列右端在剩下珠子中取走所有连续同色珠子,两者之和为该剪开处可取走珠子的粒数。在不同位置剪开,能取走的珠子数不尽相同。 本程序所求的是在环上哪个位...2011-05-10 13:42:20 · 434 阅读 · 0 评论 -
八皇后问题(C语言实现)
/******************************************************************************1. 八皇后问题要求在一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击.按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子.因此,八皇后问题等于要求八个皇后中的任...2011-05-10 13:40:33 · 238 阅读 · 0 评论 -
用递归进行全排列 (C语言实现)
/* *用递归进行全排列 *思路是:比如a,b,c三个数进行全排列,a先拿出来,b、c进行全排列,b、c中b又先拿出来,c进行全排列,然后c拿出来,b进行全排列,依次类推。 */...2011-05-10 13:39:08 · 2061 阅读 · 0 评论 -
矩阵相乘(C语言实现)
/* *矩阵相乘,矩阵a和b相乘等于矩阵c */#include<stdio.h>void main(){ int i,j,k; int a[2][3]={{1,2,3},{3,2,1}}; int b[3][2]={{1,2},{3,2},{1,1}}; int c[2][2]; for(i=0;i<2;i++)//i是a的行数 for(j=0;j<2...2011-05-10 13:37:08 · 901 阅读 · 0 评论 -
汉诺塔问题(C语言实现)
/* *汉诺塔问题 */#include<stdio.h>void move(int n,char x,char y ,char z)//n表示盘子的个数{ if(n==1)//将编号为1的盘子直接从x到z printf("move disk 1 from %c to %c\n",x,z); else{ move(n-1,x,z,y);//x通过z将1至n-1个盘子移到y ...2011-05-10 13:36:25 · 382 阅读 · 0 评论 -
帅选法求素数(C语言实现)
帅选法求素数2011-05-10 13:35:31 · 129 阅读 · 0 评论 -
链栈和链队列的实现,二级指针的用法(C语言实现)
//链栈的结构体定义,用单链表实现 //链队列的结构体定义,用带头结点的循环单链表实现2011-05-10 13:33:58 · 402 阅读 · 0 评论 -
后缀表达式(逆波兰式)、中缀表达式的转换与求值
/***********************************************************************************************************************一、把中缀表达式转换为后缀表达式算法的基本思路是从头到尾地扫描中缀表达式中的每个字符,对于不同类型的字符按不情况进行处理。1、先定义一个工作数组,用来存储转换之...2011-05-10 13:30:23 · 635 阅读 · 0 评论 -
出圈问题,约瑟夫环(C语言实现)
/*题目:2.有n个人围成一圈,顺序排号。从第一个人开始报数(从1-3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的位置。*/ 代码很简洁,效率较高,用数组代替循环队列。...2011-05-10 13:27:51 · 1215 阅读 · 0 评论 -
三个容器的倒水问题(C语言实现)
1. 编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤。(20分) a12 b8 c5 12 0 0 * * * ( “*”表示当前状态下每个容器的盛水量) ...... 6 6 0...2011-05-10 13:24:35 · 3597 阅读 · 0 评论