关闭
当前搜索:

字符串排列,for循环嵌套递归

字符串的排列,就是给定一个字符串abc,输出能排列出的所有的字符串,如:abc,acb,bac,bca,cba,cab,写这个算法主要是想练习for循环中嵌套递归是怎么执行的,其实单纯的递归算法还是相对好理解的,你想找一个问题的递归算法,就是先把问题分成更小的子问题,并且这个分割还要是有限的,得有终止递归的条件,然后就是用什么方法解决最小的问题。 算法写出来后,验证算法的正确行,运行下最直观,也...
阅读(92) 评论(0)

环形链表,约瑟夫问题,(7)

一个经典的环形链表问题,有1,2,3,,,,n这些数字排成一个圆圈,从1开始每次删除第m个数字,求出这个圆圈中最后的数字。当然也可以说先从数字k开始,数到m删除这个数字,然后就从1开始,数到m删除这个数字,原理是一样。 这里是从1开始,数到m删除这个数字。 其实一个单向非循环链表也是可以模拟这个应用的,就是当指针知道最后一个节点时,让他转到头结点继续遍历。 下面的实例是环形链表,尾节点的下一...
阅读(96) 评论(0)

链表合并(6)

有两个递增排序的链表,把他们合并后的节点仍然是递增排序的。 这个问题的思路比较简单,首先比较p1,p2头结点,把较小的节点(比如是p1)赋值给mergeHead节点,然后,把p1->Next跟p2比较,以此类推,每次比较两个节点,所以这里可以考虑用递归。 #include #include "ListCommon.h" using namespace std; ListNode* mer...
阅读(73) 评论(0)

反转链表,(5)

实现链表的反转,比如原来是 1->2->3->4->5;翻转后就是 5->4->3->2->1,...
阅读(43) 评论(0)

从尾部查找一个单向链表的第几个节点。(4)

给定一个单向链表,查找出从尾部开始的第k个节点,也就是倒数第k个节点,这里假定是从1开始计数的,即尾节点是第一个节点。 如图,假如要查找的是倒数第3个节点,一种思路就是从头结点开始遍历,遍历到尾部,得出链表的长度n,然后再从头开始遍历到 n-k+1个节点,就是倒数第k个,这么做要遍历链表两次。 还有一个思路,定义两个指针,p1st,p2d,开始都指向头结点,如果p1st指向尾部节点时,刚好...
阅读(73) 评论(0)

用O(1)时间,删除一个链表节点(3)

有这样一个问题,给定一个单向链表的头结点pHead和要删除的节点pDeleted,但是要求在O(1)时间完成。 可能先想到的就是从头结点往前遍历,找到要删除的节点pDeleted,这样就知道了它的前后节点,但是这样的时间是O(n)。 这里的思路是: 把pDeleted的下一个节点pNode1的值赋给pDeleted,同时让pDeleted指向pNode2,然后把pNode1删掉,pDelet...
阅读(113) 评论(0)

反方向打印链表。(2)

给出一个链表的头节点,从尾部逆序打印链表。 这里有2中实现思路,一种是用stack,先从头节点开始,依次把链表节点入栈,然后再依次弹出。 第二种思路是递归,实际递归的本质也是用栈来实现的。 #include #include #include "ListCommon.h" using namespace std; //用stack实现 void printListR...
阅读(58) 评论(0)

链表基本操作的函数实现。(1)

如下是一个模拟的链表的基本操作,主要有创建链表,连接链表,打印链表,删除链表等,后面有关链表的算法都依赖这个文件中函数实现。 ListCommon.h //链表的结构 struct ListNode{     int m_nValue;     ListNode* m_pNext; }; //通用的操作函数 ListNode* CreateListNode(int...
阅读(107) 评论(1)

用两个栈实现一个队列算法

栈:后进先出,队列:先进先出。 用两个栈实现一个队列,主要实现队列中的两个函数,appendTail,尾部追加,deleteHead,在头部删除节点, 用了一个模板类,队列的元素可以是任意类型,int,char都可以,其中类模板中构造函数,析构函数,appendTail,deleteHead的声明和实现都要写在.h中,把实现写在.cpp中,会提示这些方法没定义。模板定义挺特殊的。 Analo...
阅读(76) 评论(0)

一个字符替换的算法

给定一个字符串把其中的空格替换成 (%) 这3个字符。 #include using namespace std; void strRepace(char chArray[], int maxLen){     if(chArray == NULL)         return ; //计算空格数     int numsOfSpace =0;...
阅读(70) 评论(0)

使用位运算 的2个算法

1,不用临时变量,交换两个值: #include using namespace std; void swapValue(int num1,int num2){ //通过亦或运算符^,交换两个值,不适用临时变量, 第一步:num1 = num1^num2,num2=num2^num1,相当于num2 =num2^num1^num2;也等于num1^num2^num2,因为num2^...
阅读(70) 评论(0)

哈希表,找出第一个出现一次的字符

在一个字符串中,找出第一个出现一次的字符, 把每个字符做为hash表中的key,出现的次数做为对应的值。 #include using namespace std; char getFirstNotRepeatChar(const char *pStr){     if(pStr == NULL)         return '\0'; //一个char字符占8个...
阅读(66) 评论(0)

二分法 -算法

二分法查找,这个算法要求数据要是有序的。 比如有这样的问题:找出一个数组中,两个数的和小于等于15,然后输出他们,否则就单独输出较大的数。 #include using namespace std; void binarySearch(int *array, int length){     if(array == NULL || length == 0)         ret...
阅读(134) 评论(0)

字符转整数 算法

把一个字符串转成整数: #include using namespace std; long long strToInt(const char* str) {     long long num = 0;     bool minus = false;     cout     if(str != NULL && *str != '\0'){         if(*st...
阅读(95) 评论(0)
    个人资料
    • 访问:35830次
    • 积分:1724
    • 等级:
    • 排名:千里之外
    • 原创:133篇
    • 转载:38篇
    • 译文:0篇
    • 评论:9条
    最新评论