上一页 1 2 3 4 5 6 7 ··· 15 下一页
  2013年7月24日
摘要: 代码./* 因为字符共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) 编辑
摘要: 代码。/* 层次遍历 */#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 紫金树下 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 题目: 输入1个二叉查找树,将该树转换为它的镜像,即在转换后的二叉查找树中,左子树的节点都大于右子树的节点,用递归和循环两种方法完成。二叉查找树中序遍历是从小到大的,镜像树是从大到小的,可用来判断是否转换成功代码,递归的:/* 二叉查找树转换前中序遍历是从小到大,转换后是从大到小 递归: 若节点有左孩子或者右孩子的话,首先转换左子树,再转换右子树,然后交换节点左右孩子 */#includeusing namespace std;typedef int datatype;typedef struct node{ datatype value; struct node*... 阅读全文
posted @ 2013-07-24 15:14 紫金树下 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 类似于算法导论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 紫金树下 阅读(216) 评论(0) 推荐(0) 编辑
  2013年7月21日
摘要: 题目:输入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) 编辑
摘要: 题目: 如果把二叉树看成一个图,父子节点之间的连线看成是双下那个的,我们姑且定义距离是两个节点之间边的个数,写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) 编辑
  2013年7月20日
摘要: 参考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) 编辑
摘要: 题目: 输入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) 编辑
摘要: 题目: 输入整数序列,判断该数组是不是某个二叉查找树的后续遍历结果,是返回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) 编辑
摘要: 转载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 紫金树下 阅读(214) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 15 下一页