如何僅用遞迴函式和棧的操作逆序乙個棧

2022-04-06 00:31:57 字數 1987 閱讀 3967

【說明】

本文是左程雲老師所著的《程式設計師面試**指南》第一章中「如何僅用遞迴函式和棧的操作逆序乙個棧」

這一題目的c++復現;

感謝左程雲老師的支援。

【題目】:

乙個棧依次壓入1、2、3、4、5,那麼從棧頂到棧底分別為5、4、3、2、1.將這個棧轉置後,從棧頂到棧底為1、2、3、4、5,也就是實現棧中元素的逆序。

【要求】:

只能用遞迴函式實現,且資料結構只能使用棧。

【思路】:

取出棧底元素後,將棧進行逆序,最後將取出的棧底元素壓入到棧頂。

【編譯環境】:

centos6.7(x86_64)

gcc 4.4.7

【實現】:

實現+測試**

/*

*檔名:restack.cpp

*摘要:使用遞迴的方法逆序乙個棧 */

#include

#include

using

namespace

std;

int poplast(stack &s)

}void restack(stack &s)

intmain()

;

inti;

for(i=0;i<5;i++)

s.push(a[i]);

cout

<< "

before reverse:

"<

for(i=0;i<5;i++)

for(i=0;i<5;i++)

s.push(a[i]);

restack(s);

cout

<< "

after reverse:

"<

for(i=0;i<5;i++)

return0;

}

view code

注:感謝左程雲老師的支援。

【題目】:

乙個棧依次壓入1、2、3、4、5,那麼從棧頂到棧底分別為5、4、3、2、1.將這個棧轉置後,從棧頂到棧底為1、2、3、4、5,也就是實現棧中元素的逆序。

【要求】:

只能用遞迴函式實現,且資料結構只能使用棧。

【思路】:

取出棧底元素後,將棧進行逆序,最後將取出的棧底元素壓入到棧頂。

【編譯環境】:

centos6.7(x86_64)

gcc 4.4.7

【實現】:

實現+測試**

/*

*檔名:restack.cpp

*摘要:使用遞迴的方法逆序乙個棧 */

#include

#include

using

namespace

std;

int poplast(stack &s)

}void restack(stack &s)

intmain()

;

inti;

for(i=0;i<5;i++)

s.push(a[i]);

cout

<< "

before reverse:

"<

for(i=0;i<5;i++)

for(i=0;i<5;i++)

s.push(a[i]);

restack(s);

cout

<< "

after reverse:

"<

for(i=0;i<5;i++)

return0;

}

view code

注:

如何僅用遞迴函式和棧操作逆序乙個棧

題目 乙個棧依次壓入1,2,3,4,5那麼從棧頂到棧底分別為5,4,3,2,1。將這個棧轉置後,從棧頂到棧底為1,2,3,4,5,也就是實現棧中元素的逆序,但是只能用遞迴函式來實現,而不能用另外的資料結構。解答 本題考察棧的操作和遞迴函式的設計,我們需要設計出兩個遞迴函式。遞迴函式一 將棧stack...

如何僅用遞迴函式和棧操作逆序乙個棧

題目 乙個棧依次壓入1 2 3 4 5,那麼從棧頂到棧底分別為5 4 3 2 1,將這個棧轉置後,從棧頂到棧底為1 2 3 4 5,也就是實現棧中元素的逆序,但是只能用遞迴函式來實現,不能用其他資料結構。思路 具體實現如下reverse方法 getandremovelastelement方法在圖中簡...

棧與佇列03 如何僅用遞迴函式和棧操作逆序乙個棧

題目 乙個棧一次壓入1 2 3 4 5,那麼從棧頂到棧底分別是5 4 3 2 1。將這個棧轉置後,從棧頂到棧底為1 2 3 4 5,也就是實現棧中元素的逆序,但是只能用遞迴函式來實現,不能用其他資料結構。解答 遞迴函式一 將棧stack的棧底元素返回並移除。具體過程見 實現1 include sta...