随笔分类 -  STL

摘要:前序,中序,后序遍历的非递归实现。层次遍历,从上到下或从下到上,从左到右或从右到左,只输出叶子节点,只输出某一层等等。1、代码: 1 void PreOrder(BinaryTreeNode* root) 2 { 3 if (!root) return; 4 stack<BinaryTreeNode*> nodes; 5 while (root != NULL || !nodes.empty()) 6 { 7 if (root != NULL) 8 { 9 cout << root->m_nValue <<... 阅读全文

posted @ 2013-06-07 21:00 月moon鸟 阅读(177) 评论(0) 推荐(0)

摘要:list题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第n个数字。求出这个圆圈里剩下的最后一个数字。思路:可以用list来模拟环形链表,当迭代器达到end时(end是超出末尾的哨兵),迭代器重新赋值为begin。list内部erase效率非常高,注意erase的迭代器的后一位是作为下一次迭代的开始位,也要满足环形特点。时间复杂度为O(mn),空间复杂度为O(n)。LastRemaining 1 int LastRemaining(unsigned int n, unsigned int m) 2 { 3 if(n < 1 || m < 1) 4 阅读全文

posted @ 2013-04-10 15:13 月moon鸟 阅读(216) 评论(0) 推荐(0)

摘要:输入两个整数序列,第一个表示压入顺序,判断第二个是否是该栈的弹出顺序。选择题1、思路: 对弹出序列的元素依次分析,如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入栈了仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。IsOrder 1 #include <iostream> 2 #include <assert.h> 3 #include <stack> 4 5 using namespace std; 6 7 阅读全文

posted @ 2013-04-08 22:26 月moon鸟 阅读(171) 评论(0) 推荐(0)

摘要:转:http://zhedahht.blog.163.com用两个栈实现队列。定义栈的数据结构,请在该类型中实现一个能够得到栈的最小min函数。在该栈中,调用min和push及pop的时间复杂度都是O(1)。1、思路: 一个栈是先入后出,两个配合就是先入先出。一个栈负责push,一个负责pop,当pop栈没有数据了需要去push栈中去拿。Queue 1 #include <iostream> 2 #include <stack> 3 #include <exception> 4 5 using namespace std; 6 7 template < 阅读全文

posted @ 2013-04-08 20:30 月moon鸟 阅读(157) 评论(0) 推荐(0)

摘要:map题目:复杂链表的节点信息,除了next的指向以外,还有sibling的指向。请复制该链表。思路:1、可以利用STL中的map容器,存放原始节点和克隆节点的映射关系。这样第二遍遍历原始链表的时候就可以通过该映射关系构建克隆链表的sibling关系。ComplexListCopy 1 cListNode* ComplexListCopy(cListNode* head) 2 { 3 map<cListNode*, cListNode*> map_ori_clone; 4 cListNode* pNode = head; 5 cListNode* CloneHead =... 阅读全文

posted @ 2013-04-08 16:43 月moon鸟 阅读(194) 评论(0) 推荐(0)

摘要:从上向下打印二叉树的每个节点, 同一层的节点按照从左到右的顺序打印。判断一棵树是否是完全二叉树。将一棵完全二叉树层次遍历转化为一个链表。(不用队列)1、思路: 可以使用双端队列deque容器,头负责打印,尾负责接受子节点,直到deque中没有元素为止。 1 void PrintBiTreeBreadth(BiTreeNode* root) 2 { 3 if (root == NULL) return; 4 deque<BiTreeNode*> dequeBiTreeNode; 5 dequeBiTreeNode.push_back(root); 6 while... 阅读全文

posted @ 2013-04-08 14:57 月moon鸟 阅读(374) 评论(0) 推荐(0)

摘要:标准库定义了顺序容器和关联容器,顺序容器内的元素按其位置存储和访问,关联容器内的元素按其键(key)排序。容器只定义了少量的操作,其他大量的操作是通过算法库实现,比如说排序和查找。算法库中的算法没有为每种容器类型设计特定的操作,而是定义了一组泛型算法,通过迭代器在容器上实施。1、顺序容器 顺序容器主要有vector,list,deque;顺序容器适配器主要有stack,queue,priority_queue。 vector和list的区别:vector是可扩展的数组,比array的优越性在于可扩展,但和array一样在内存里是一块连续的区域,支持快速的随机访问。list是双向链表结构... 阅读全文

posted @ 2013-04-08 10:30 月moon鸟 阅读(290) 评论(0) 推荐(0)

摘要:set请写出堆排序的代码。输入n个整数,找出其中最小的k个数。1、思路: 堆排序分为建堆(insertion)和取根数据(delete root)。每一步都涉及到堆调整,堆调整算法的时间复杂度为O(logn)。HeapSort 1 #include <stdio.h> 2 3 #define heap_parent(npos) ((int)(((npos) - 1) / 2)) 4 #define heap_left(npos) ((npos) * 2 + 1) 5 #define heap_right(npos) ((npos) * 2 + 2) 6 7 void Swap(in 阅读全文

posted @ 2013-04-07 13:53 月moon鸟 阅读(239) 评论(0) 推荐(0)

导航