摘要: 有两个相同的栈,一个里面放着自大到小排列的数,栈顶的数最小,另一个栈是空的。不允许利用其它的数据结构,只能利用这两个栈,要求把第一个栈里的数字反过来,从小到大排列,结果还放在原来的那个栈里面。思路:假设stackA存放数,stackB为辅助栈。stackA元素个数为N。第1次操作:先取stackA栈顶元素,记为tmp,然后把剩余N-1个元素转移到stackB中,接着把tmp和stackB的N-1个元素依次压入stackA中,这样完成了stackA原栈顶的反转。第2次操作:先取stackA栈顶元素,记为tmp,因为栈底有一个元素已完成反转,故只需要把剩余的N-2个元素转移到stackB,接着把t 阅读全文
posted @ 2013-05-03 21:03 hust_枫 阅读(852) 评论(0) 推荐(0) 编辑
摘要: 前面已经实现了两个栈实现队列的功能(http://www.cnblogs.com/ivorfeng/archive/2013/05/01/3053206.html),今天就实现利用两个队列实现栈的push和pop功能。思路:已有queue1和queue2;进栈:初始时,两个队列均为空,元素压入queue1;之后需要判断压入非空的队列中;出栈:出栈时,两个队列必有一个为空,另一个非空,因此需要把非空的队列只留下最后一个元素,其他均转移到另一个队列中;再把之前剩下的一个元素输出。ps:出栈的时候,一开始想着统一代码,想把已经转移到另一个队列的元素再转回来,这样就可以保持每次只对其中一个队列(que 阅读全文
posted @ 2013-05-03 20:49 hust_枫 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted);前提:默认输入的待删除节点在链表中!链表结点结构定义如下:1 struct ListNode2 {3 int m_nValue;4 ListNode* m_pNext;5 };思路:若待删结点的下一结点非空,则把它的值复制给待删节点,然后释放待删结点的下一结点; 若待删结点的下一结点为空且等于待删结点等于头结点,则释放之; 若上面两种情况都不是,即为尾结点,需要从头遍历而... 阅读全文
posted @ 2013-05-03 19:44 hust_枫 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 以下内容是本人学习vim文本编辑器时的一些笔记。关于vim教程:可以在Terminal下键入vimtutor进入vim的学习教程。Lession 11.光标移动。键盘上h,j,k,l分别对应 向左,向上,向下,向右移动,当然也可以用方向键。2.退出vim。vim有两种模式,一种是正常模式(normal mode),一种是编辑模式(不知道这样称呼标准不?)。正常模式可以利用h,j,k,l进行文本的浏览;键入i进入编辑模式。按ESC退出编辑模式返回到normal mode。需要退出vim时,先按ESC确保当前是normal mode,接着键入":q!"<Enter> 阅读全文
posted @ 2013-05-03 16:27 hust_枫 阅读(210) 评论(0) 推荐(0) 编辑