随笔 - 147  文章 - 5  评论 - 6  阅读 - 81225
07 2013 档案
18.约瑟夫环
摘要:用单循环链表做的。代码./* 这是约瑟夫环*/#includeusing namespace std;typedef struct node{ int data; struct node* next;}Link;void josephus(int n,int m){ //用循环链表做 Link *head,*tail; int i,j; head=NULL; tail=NULL; for(i=0;idata=i; temp->next=NULL; if(head==NULL) { ... 阅读全文
posted @ 2013-07-26 10:53 紫金树下 阅读(166) 评论(0) 推荐(0) 编辑
17 找一个字符串中第一个之出现一次的字符
摘要:代码./* 因为字符共256种可能,记录每个字符出现的次数,然后找到第一次出现1次的就是 */#include#includeusing namespace std;void getfirst(string str){ unsigned int count[256]; int i; for(i=0;i>s; getfirst(s); return 0;} 阅读全文
posted @ 2013-07-24 15:49 紫金树下 阅读(191) 评论(0) 推荐(0) 编辑
16.层次遍历
摘要:代码。/* 层次遍历 */#include#includeusing namespace std;typedef char Elemtype;typedef struct node{ Elemtype data; struct node* left; struct node* right;}Tree;//先序建立一个树,NULL指针用0代替Tree* create_tree(void){ Tree* root=NULL; char ch; cin>>ch; if(ch=='0') return NULL; else {... 阅读全文
posted @ 2013-07-24 15:24 紫金树下 阅读(203) 评论(0) 推荐(0) 编辑
15. 二叉查找树的镜像
摘要:题目: 输入1个二叉查找树,将该树转换为它的镜像,即在转换后的二叉查找树中,左子树的节点都大于右子树的节点,用递归和循环两种方法完成。二叉查找树中序遍历是从小到大的,镜像树是从大到小的,可用来判断是否转换成功代码,递归的:/* 二叉查找树转换前中序遍历是从小到大,转换后是从大到小 递归: 若节点有左孩子或者右孩子的话,首先转换左子树,再转换右子树,然后交换节点左右孩子 */#includeusing namespace std;typedef int datatype;typedef struct node{ datatype value; struct node*... 阅读全文
posted @ 2013-07-24 15:14 紫金树下 阅读(384) 评论(0) 推荐(0) 编辑
14. 求有序数组中一对值,使和等于输入值
摘要:类似于算法导论2.3-7,它要求在一个无序集合中找出2个数和等于x。首先对它排序,快排O(nlgn),然后就是本题了。代码:/* 因为已经是有序的,设置两个指针指向开始和结束,然后相加它们,若和>给定的值,则尾指针向前,若和using namespace std;void getsum(int *a,int begin,int end,int sum){ bool flag=false; while(begin>sum; getsum(a,0,5,sum); return 0;}打印所有的,在a[begin]+a[end]==sum时继续下去就OK了。 阅读全文
posted @ 2013-07-24 14:28 紫金树下 阅读(217) 评论(0) 推荐(0) 编辑
13. 求链表倒数第k个节点
摘要:题目:输入1个链表,输出该链表倒数第k个节点,有头指针和尾指针。链表倒数第0个节点是链表的尾指针节点。代码:/* 尾指针是倒数第0个,则倒数第k个是正数第len-k个,计算len */#includeusing namespace std;typedef struct node{ int key; struct node* next;}List;List* head=NULL;List* tail=NULL;void create_list(void){ int data; while(cin>>data,data!=-1) { List *... 阅读全文
posted @ 2013-07-21 18:05 紫金树下 阅读(205) 评论(0) 推荐(0) 编辑
11.求二叉树中节点的最大距离
摘要:题目: 如果把二叉树看成一个图,父子节点之间的连线看成是双下那个的,我们姑且定义距离是两个节点之间边的个数,写1个程序,求1棵二叉树中相距最远的两个节点之间的距离解: 提示把二叉树看成图,有点误导的意思。 首先,两个节点之间的距离不存在重叠的边,其次,从1个节点到另1个节点的走法,肯定是第1个节点走到拐点,然后开始想第2个节点走,这个拐点一定是第1,2个节点的共同祖先。因此可用递归解决。 给定树T,首先求出树T的左子树的高度left_height,然后求出树T的右子树的高度right_height,那么假如说这个最大距离经过的拐点是T,那么这个最大距离就是left_height+right.. 阅读全文
posted @ 2013-07-21 16:35 紫金树下 阅读(339) 评论(0) 推荐(0) 编辑
12 求1+2+...+n
摘要:参考http://www.cppblog.com/zengwei0771/archive/2012/04/28/173014.html和http://blog.csdn.net/shiren_bod/article/details/6703467代码:#includeusing namespace std;long add_func(int n,long& sum){ (n>0) && (add_func(n-1,sum)); return (sum+=n);}int main(void){ int n=100; long sum=0; cout<<& 阅读全文
posted @ 2013-07-20 20:55 紫金树下 阅读(143) 评论(0) 推荐(0) 编辑
10.字符串的逆转
摘要:题目: 输入1个英文句子,反转句子中单词的顺序,单词内字符的顺序不变,句子中单词以空格符隔开,标点符号和普通字母一样处理解: 这是字符串的逆转,除了用递归,这里用遍历,然后将节点插入到头节点位置。代码:#include#include#includeusing namespace std;//可以用链表实现的typedef struct node{ string data; struct node* next;}LinkNode;void revers(string line){ string word; istringstream stream(line); ... 阅读全文
posted @ 2013-07-20 20:36 紫金树下 阅读(218) 评论(0) 推荐(0) 编辑
9.判断1个整数序列是不是二叉查找树的后续遍历结果
摘要:题目: 输入整数序列,判断该数组是不是某个二叉查找树的后续遍历结果,是返回true,不是返回false.解: 二叉查找树中有左孩子8的元素为止,前面的元素都属于左孩子,后面的元素除了末尾都属于右孩子,因为这是我们已经判断左孩子的节点都8,那么继续判断左孩子和右孩子是不是二叉查找树的后续遍历,当且仅当左右孩子都是时,那么这个数组序列就返回true,否则返回false代码:#includeusing namespace std;//判断a[begin]->a[end]是不是bool isbt(int* a,int begin,int end){ //单节点是的 if(begin>=en 阅读全文
posted @ 2013-07-20 20:11 紫金树下 阅读(264) 评论(0) 推荐(0) 编辑
7.判断链表是不是相交和有环,求环入口
摘要:转载http://hi.baidu.com/janqii/item/824ffa4e668a5de01f19bc401。首先链表无环的情况下判断是不是相交,编程之美给了好几种方法,最简单的就是无过2个无环链表相交,那么他们的尾节点相同2。判断链表是不是有环3。如果链表有环怎么求环的入口点4。如果2链表无环,怎么求2个链表相交的第一个节点列。 这个我觉得编程之美上用hash表的方法就不错,首先对链表L1遍历,对每个节点地址做hash存自hash表中,然后对链表L2遍历,遇到第一个在hash表中出现的节点就是它们相交的第一个节点。时间是O(length1+length2),空间是O(length1 阅读全文
posted @ 2013-07-20 19:35 紫金树下 阅读(216) 评论(0) 推荐(0) 编辑
5.查找最小的k个元素(数组)
摘要:题目: 输入n个整数,输出其中最小的k个,例如输入1,2,3,4,5,6,7,8这8个数,则最小的4个是1,2,3,4(输出不要求有序)解: 利用快速排序的partition,算导上求第k大数的思想,求出第k大的数,然后遍历数组,如果a[i]#include#includeusing namespace std;// a[begin]->a[end]int partition(int *a,int begin,int end){ srand((int)time(NULL)); int pivot=rand()%(end-begin+1)+begin; int temp; ... 阅读全文
posted @ 2013-07-19 21:00 紫金树下 阅读(350) 评论(0) 推荐(0) 编辑
4.在二叉树中找出和为某一值的所有路径
摘要:题目: 输入一个二叉树,从根结点开始往下访问一直到叶子节点所经过的所有节点组成一条路径,打印出和与输入整数相等的所有路径解: 参考打印二叉树中某节点的祖先节点http://www.cnblogs.com/buxianghe/p/3198662.html这里还是采用后续非递归遍历的方法,记录在栈中的节点元素的和,当1个节点2次进栈2次出栈时,并且满足从根结点到它的和等于输入的和,并且它是叶子节点时,那么此时栈中元素就是这条路径,打印它代码:/* 参考后续遍历 */#includeusing namespace std;typedef struct node{ int data; ... 阅读全文
posted @ 2013-07-19 15:18 紫金树下 阅读(328) 评论(0) 推荐(0) 编辑
3.求子数组的最大和
摘要:问题:给出一个数组,元素有正有负,数组中连续的1个或者多个数组成1个子数组,每个子数组有1个和,求所有子数组和值的最大值,时间复杂度为O(n)解: 一:可以用穷举的方法求出这个最大值,只是时间复杂度是O(n^3),这中方法的代码如下int dphe(int a[],int len){ int i,j; int **he=new int*[len]; for(i=0;i=max) max=he[i][j]; for(i=0;iA[p,q]就不满足A[p,q]是子数组最大的了。所以,我们可以对A进行遍历,当遇到子数组的和是负值时,就可以抛弃整... 阅读全文
posted @ 2013-07-18 22:33 紫金树下 阅读(212) 评论(0) 推荐(0) 编辑
打印二叉树中节点的所有祖先
摘要:题目:在1棵二叉树中,假设所有节点的值都不同,给定值x,打印值为x的节点的所有祖先节点解: 利用后续非递归遍历打印。后续非递归遍历中,当节点2次进栈2次出栈后要访问它,此时根据后续遍历性质,它的左右孩子都被访问过了,访问过这个节点后再下一个要访问的节点就是当前节点的父节点。代码如下/* *后序遍历 */#include#includeusing namespace std;typedef char Elemtype;typedef struct node{ Elemtype data; struct node* left; struct node* right;}Tree;typedef s. 阅读全文
posted @ 2013-07-18 17:36 紫金树下 阅读(2853) 评论(1) 推荐(1) 编辑
1.把2叉查找树转换成双向链表
摘要:参考线索二叉树的建立方法,对二叉查找树进行中序遍历,遍历中保存1个pre指针,指向刚刚访问过的节点,即当前节点的中序前驱。代码如下:#include#includeusing namespace std;typedef struct node{ int data; struct node* left; struct node* right;}Tree;//输入二叉查找树的先序顺序,NULL指针用0代替Tree* create(void){ int d; Tree *root=NULL; //按先序输入,NULL指针是0 cin>>d; if(d==0) return NULL; e 阅读全文
posted @ 2013-07-16 22:17 紫金树下 阅读(202) 评论(0) 推荐(0) 编辑
Linux下tar.xz结尾的文件的解压方法
摘要:http://blog.csdn.net/silvervi/article/details/6325698今天尝试编译内核,下载到了一份tar.xz结尾的压缩文件,网上解决方法比较少,不过还是找到了,如下:$xz -d ***.tar.xz$tar -xvf ***.tar 可以看到这个压缩包也是两层压缩,外面是xz压缩方式,里层是tar压缩方式。 阅读全文
posted @ 2013-07-11 17:41 紫金树下 阅读(149) 评论(0) 推荐(0) 编辑
Floyd算法
摘要:Floyd算法是一种动态规划算法,用于求解有向图中每对顶点间的最短路径。它要求有向图中可以有负权值,但是不能有负的回路,和Dijkstra,Bellman-Ford算法一样,都是不能有负回路的。设有向图G=(V,E),采用邻接矩阵来表示每对顶点之间的距离d[i][j]。初始时,若i=j,则d[i][j]=0;若i和j之间直接相连,则d[i][j]=Weight(i,j);若i和j之间不直接相连,则d[i][j]=正无穷 OR INT_MAX。假设节点编号是1,2,3,,,,,,,n现在要计算顶点之间的最短路径,设之间最短路径的中间节点的最大节点是k,即中间节点在(1,2,3,,,,k)的范围内 阅读全文
posted @ 2013-07-10 21:42 紫金树下 阅读(506) 评论(0) 推荐(0) 编辑
c缺陷与陷阱笔记-第七章 可移植性代码
摘要:1。移位运算符 如果被移位的对象长度是n位,那么移位计数必须>=0,并且<n,例如对于1个32位的数,移位运算n<<31和n<<0是OK的,n<<32和n<<-1就不行 阅读全文
posted @ 2013-07-09 15:35 紫金树下 阅读(157) 评论(0) 推荐(0) 编辑
c缺陷与陷阱笔记-第六章 预处理器
摘要:1。这一章貌似有个小错误,开始时定义 #define f (x) ((x)-1),然后f(x)代表什么,书上说是(x) ((x)-1),应该是 (x) ((x)-1)(x)2。关于宏定义中参数的2次使用问题3。宏不是语句,举例assert宏的定义 #define assert(e) ((void)((e) || (__assert_error(__FILE,__LINE)))) 阅读全文
posted @ 2013-07-09 15:09 紫金树下 阅读(152) 评论(0) 推荐(0) 编辑
c缺陷与陷阱笔记-第四章 连接
摘要:1。变量的声明。 在不同的源文件中,应该是1个定义+多个声明的形式存在的,并且声明的类型和定义的类型要一样,否则可能会报错。 声明 : extern 类型 变量名 声明并定义: extern 类型 变量名=值 定义: 类型 变量明=值 static用来修饰变量和函数是属于某个源文件的,不能被其他的源文件引用。2。 函数返回类型 如果函数在被调用前没有声明,那么函数的返回类型默认是整形int的,如果将函数和调用函数的分别写在2个不同的源文件,那么在函数被调用的地方要进行函数的声明。3。头文件 对1个要被广泛声明的变量,可以把它写在头文件中,例如 file.h extern ... 阅读全文
posted @ 2013-07-08 22:10 紫金树下 阅读(133) 评论(0) 推荐(0) 编辑
c缺陷与陷阱笔记-第三章 语义陷阱
摘要:1.关于数组和数组指针 数组的名字默认是常量指针,值不能改变的,例如 int a[]={1,2,3,...},这个a的类型时int *,所以如果有int *p,那么a=p是合法的,其他的指针类型,例如char *p=a都是不合法的 2维或者多维数组的指针声明,例如2维数组 int a[12][31],那么声明数组的指针应该是 int (*p)[31],p是一个数组指针,它指向的数组有31个int元素,p的实际类型应该是int**的,所有把int*类型赋值给int**类型时错误的,例如 int a[10]; int (*p)[10]; p=a;//是错误的 正确使用数组指针应该是:... 阅读全文
posted @ 2013-07-08 16:30 紫金树下 阅读(137) 评论(0) 推荐(0) 编辑
c缺陷与陷阱笔记-第二章 语法陷阱
摘要:1。函数的调用和番薯返回值是函数指针的声明 定义一个函数指针,例如 int (*fp)(float),这个函数的返回值是Int,参数是1个float类型,调用这个函数的方法是 (*fp)(),还有fp()是对前面的简写 定义一个函数返回函数指针,典型的 是signal函数,用typedef它应该是这样定义的 typedef void (*FUNC)(int); FUNC signal(int,FUNC) 摊开写就是 void (*)(int) signal(int , void (*)(int)) -------> void (*(signal(int,void (*)(int))).. 阅读全文
posted @ 2013-07-08 15:41 紫金树下 阅读(176) 评论(0) 推荐(0) 编辑
c缺陷与陷阱笔记-第一章 词法陷阱
摘要:1。运算符的贪心性,匹配最长的运算符,例如 n-->0,从-开始,-是运算符,--是运算符,-->就不是,所以是 n -- > 0,--是 a---b,-是,--是,,---不是,所以a---b=a-- - b a+++++b,从+开始,+是,++是,+++不是,所以a++是单独的,后面是+,再++b,所以a+++++b=a++ + ++b y=x/*p,/是运算符,/*是注释的开始,也是,所以左边的意思是y=x注释开始p,如果写成y=x/ *p,那么就是y=x/(*p)的意思了2. 单引号字符表示一个整形常量,它再ASCII吗表中对应的整数,"huhu" 阅读全文
posted @ 2013-07-08 15:01 紫金树下 阅读(148) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示