算法导论第三版 10.1-6习题答案

10.1-6
答案:
设定两个栈为s1和s2,那么s1用来ENQUEUE(),s2用来DEQUEUE(),当然s1需要用来为DEQUEUE()操作作过渡,流程如下:
(1)首先将入队元素1,2,3依次放进栈s1。此时s1元素从低到高为1,2,3,s2中暂时无元素。

(2)然后依次将1,2,3从s1中弹出并且放入s2中。此时s1栈空,s2中元素从低到高依次为3,2,1

(3)若此时进行还需要ENQUEUE()操作将x,y入队,那么则直接将入队元素放进s1中。此时s1中元素从低到高为x,y,s2中元素从低到高为3,2,1

(4)若此时需要进行DEQUEUE()操作,则直接从s2中弹出一个元素(当前弹出的元素应该为1);若s2空,则执行(2)操作,再执行DEQUEUE()操作。此时s1栈空,s2中元素从低到高依次为y,x

所以
此时的ENQUEUE()的时间复杂度为O(1)
DEQUEUE()时间复杂度可能是O(1),可能是O(n)。(当执行(4)操作分号前的操作时候为O(1),当执行分号后的操作时候为O(n)),所以DEQUEUE()时间总的复杂度<=O(n)

发布了12 篇原创文章 · 获赞 1 · 访问量 1084

猜你喜欢

转载自blog.csdn.net/qq_43723172/article/details/103351187