2011年4月16日

算法导论10.2-7习题解答(单链表逆转)

摘要: CLRS 10.2-7 :在O(n)时间内对给定的单链表进行逆转。解法:这题没什么技巧,就是将指针的指向进行改变即可。#include <iostream>usingnamespace std;//很简单的Node 和 Listclass Node{public: Node* next; int data; Node(); Node(int d);};class List{public: Node* first; List(); void insert(int d);};int main(){ int K =5; List* list =new List(); ... 阅读全文

posted @ 2011-04-16 19:23 NULL00 阅读(846) 评论(1) 推荐(0) 编辑

算法导论10.1-7习题解答(用两个队列实现一个栈)

摘要: CLRS 10.1-7 :说明如何用两个队列来实现一个栈,并分析有关栈操作的运行时间。解法:1.有两个队列q1和q2,先往q1内插入a,b,c,这做的都是栈的push操作。2.现在要做pop操作,即要得到c,这时可以将q1中的a,b两个元素全部dequeue并存入q2中,这时q2中元素为a,b,对q1再做一次dequeue操作即可得到c。3.如果继续做push操作,比如插入d,f,则把d,f插入到q2中,4.此时若要做pop操作,则做步骤25.以此类推,就实现了用两个队列来实现一个栈的目的。注意在此过程中,新push进来的元素总是插入到非空队列中,空队列则用来保存pop操作之后的那些元素,那么 阅读全文

posted @ 2011-04-16 15:26 NULL00 阅读(1701) 评论(0) 推荐(0) 编辑

算法导论10.1-6习题解答(用两个栈实现一个队列)

摘要: CLRS10.1-6 :说明如何用两个栈来实现一个队列,并分析有关队列操作的运行时间。解法:1.有两个栈s1和s2,先往s1内插入a,b,c,这做的都是enqueue操作。2.现在要做dequeue操作,即要得到a,这时可以将s1中的元素全部弹出并存入s2中,这时s2中元素的顺序(从底部到顶部)为c,b,a,这时做s2.pop()操作即可得到a。3.如果继续做enqueue操作,比如插入d,f,则把d,f插入到s1中,4.此时若要做dequeue操作,则直接弹出s2中的b,它是目前为止,呆得时间最长的元素5.若继续做dequeue操作,则s2弹出c,6.若继续做dequeue操作,则s2为空, 阅读全文

posted @ 2011-04-16 15:12 NULL00 阅读(1613) 评论(0) 推荐(0) 编辑

算法导论10.1-5习题解答(deque实现源码)

摘要: CLRS 10.1-5栈的插入和删除操作都是在一端进行的,而队列的插入和删除却是在两头进行的。有一种双端队列(deque),其两端都可以做插入和删除的操作。对于一个用数组构造的双端队列,请写出四个在两端进行插入和删除操作的过程,要求运行时间为O(1)。#include <iostream>usingnamespace std;template <class T>class Deque{public: void push_front(T t); void push_back(T t); T pop_front(); T pop_back(); Deque(int m); 阅读全文

posted @ 2011-04-16 15:01 NULL00 阅读(1211) 评论(1) 推荐(0) 编辑

算法导论10.1-2习题解答(用一个数组实现两个栈)

摘要: CLRS 10.1-2 :说明如何用一个数组A[1...n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢。注意PUSH和POP操作的时间应为O(1)。解法:用top1指向数组第一个元素,用top2指向数组最后一个元素,然后PUSH的时候,它们向中间进发,POP的时候向相应的方向减一。 阅读全文

posted @ 2011-04-16 12:33 NULL00 阅读(1801) 评论(0) 推荐(0) 编辑

导航