数据结构和算法
kkvveeerer
记录是最好的回忆!
展开
-
逆置链表
#includestruct SqList{ int value; struct SqList *next;};void reverse(struct SqList *L){ struct SqList *p; struct SqList *q; p=L->next; L->next=NULL; while(p) { q=p->next; p->next=L->n原创 2012-09-09 10:49:53 · 519 阅读 · 0 评论 -
求字符串的近似度
许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”); 3.删除一个字符(如把“travelling”变为“traveling”); 比如,对于“abcdef转载 2012-10-24 13:06:30 · 1106 阅读 · 0 评论 -
求最大公约数和最小公倍数
下面方法中,ff()求最大公约数,f()是求小公倍数 int ff(int x,int y){ return y == 0 ? x : ff(y,x % y); } int f(int x,int y){ return x / ff(x,y) * y; }原创 2012-11-01 20:04:50 · 626 阅读 · 0 评论 -
整数转成字符串
//整数转成字符串,可以采用加'0',再逆序的办法,整数加'0'就会隐性转成char类型的数#includeint main(void){ int num=123456; int i=0,j=0; char temp[7],str[7]; while(num) { temp[i]=num%10+'0'; printf("%c\n",temp[i]); i++; nu原创 2012-10-01 15:37:50 · 1092 阅读 · 0 评论 -
去除字符串多余的空格
#includevoid RemoveEmpty(char *a){ bool flag=false;//true表示没有遇到空格 int newly=0;//标记新的字符串结尾处 if(a==NULL) { return; } //跳过开始的空格,去除中间多余的空格 for(int i=0;a[i]!=NULL;i++) { if(a[i]!=' ') {原创 2012-10-18 13:50:26 · 1314 阅读 · 0 评论 -
求字符串的最长重复子串
#include#includeusing namespace std;int main(){ string str,tep; cout<<"请输入字符串"<<endl; cin>>str; for(int i=str.length()-1;i>1;i--) { for(int j=0;j<str.length();j++) { size_t t=0; siz原创 2012-10-18 00:08:20 · 831 阅读 · 1 评论 -
字符串的全排列
字符串全排列#includeusing namespace std;#includevoid Permutation(char* pStr, char* pBegin){ //assert(pStr && pBegin); 这个可以替换下面的if if(pStr == NULL || pBegin == NULL) { return; } if(*pBegin == '\原创 2012-09-22 10:12:57 · 1143 阅读 · 0 评论 -
光影切割问题
“光影切割问题”是游戏场景中经常出现的,例如一些房屋场景里面,在里面上会因为阳光从屋顶的漏洞或窗口照射进来而形成许多光照区域和阴影区域。下面是一个在平面中的直线分割示意图,右图两条直线有一个交点——空间分成4部分三条直接有三个交点——空间分成7部分没增加一条直线,则跟前面的n-1条直接有n-1个交点,新增加n块新区域推出:如果总共有N条直线,M个交点,那么区域的数目为N+M+1原创 2012-10-01 21:06:14 · 1156 阅读 · 0 评论 -
求数组中的最大和最小值
解法一:使用常规的解法,时间复杂度为N,比较次数看似2N,但实际上大于max的就不必和min比较了,同理,小于min的就不必和max比较了,因此比较的次数不足2N次#includeint main(void){ int a[5]={3,2,6,8,1}; int min=a[0]; int max=a[0]; int i; for(i=0;i<=4;i++) { if(mi原创 2012-10-01 19:59:27 · 561 阅读 · 0 评论 -
八皇后问题
问题描述:八皇后问题是要求在八行八列的表格里面,要求放入8个皇后,要求所有的皇后都不能在同一行、同一列,并且不能在同一对角线上解决方法:首先是采用回溯法(一种系统地搜索问题的解的方法),其思想是:从一条路往前走,能进则进,不能进则退回来,找另一条路继续试探思路:1、算法开始,清空棋盘,从棋盘的第一行第一列开始2、检测该位置是否可以放皇后(同行、同列、对角线上都没有其他皇后),如果可原创 2012-09-27 23:23:50 · 685 阅读 · 0 评论 -
位运算解决八皇后问题
使用位运算来求解N皇后的高效算法 核心代码如下:[cpp] view plaincopyvoid test(int row, int ld, int rd) { int pos, p; if ( row != upperlim ) { pos = upperlim &转载 2012-09-29 19:40:39 · 12362 阅读 · 4 评论 -
求数组中连续子数组的最大和
思路: 计算出任意i到j之间连续子数组的和再比较必然能得到最大值,但时间复杂度为O(n^2),我们希望能找出线性时间的算法。 我们注意到,假如数组中全为正数,那么最大和必然为全部数相加;如果数组中有负数,并且如果加上某个负数,子数组的和小于0,则最大和子数组必然不包含这个负数。 基于此,给出以下代码:#include int getMaxSum(int a[],int原创 2012-09-26 19:42:16 · 793 阅读 · 0 评论 -
堆栈
在C和C++中,经常需要操作的内存可分为以下几个类型:1、栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈2、堆区(heap):一般有程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。与数据结构的堆不同,分配方式类似于链表3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量原创 2012-09-28 12:58:04 · 508 阅读 · 0 评论 -
链表创建
#include#includestruct SqList{ int value; struct SqList *next;};struct SqList *createLink(){ struct SqList *L; void create(struct SqList *); void showData(struct SqList *); L = (struct SqL原创 2012-09-09 10:48:03 · 807 阅读 · 0 评论 -
二叉树的非递归遍历
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。一.前序遍历转载 2012-11-06 20:17:12 · 649 阅读 · 0 评论