2013年4月8日

摘要: 输入两个整数序列,第一个表示压入顺序,判断第二个是否是该栈的弹出顺序。选择题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鸟 阅读(166) 评论(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鸟 阅读(152) 评论(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鸟 阅读(190) 评论(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鸟 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 标准库定义了顺序容器和关联容器,顺序容器内的元素按其位置存储和访问,关联容器内的元素按其键(key)排序。容器只定义了少量的操作,其他大量的操作是通过算法库实现,比如说排序和查找。算法库中的算法没有为每种容器类型设计特定的操作,而是定义了一组泛型算法,通过迭代器在容器上实施。1、顺序容器 顺序容器主要有vector,list,deque;顺序容器适配器主要有stack,queue,priority_queue。 vector和list的区别:vector是可扩展的数组,比array的优越性在于可扩展,但和array一样在内存里是一块连续的区域,支持快速的随机访问。list是双向链表结构... 阅读全文
posted @ 2013-04-08 10:30 月moon鸟 阅读(279) 评论(0) 推荐(0) 编辑

导航