【說明】
本文是左程雲老師所著的《程式設計師面試**指南》第一章中「如何僅用遞迴函式和棧的操作逆序乙個棧」
這一題目的c++復現;
感謝左程雲老師的支援。
【題目】:
乙個棧依次壓入1、2、3、4、5,那麼從棧頂到棧底分別為5、4、3、2、1.將這個棧轉置後,從棧頂到棧底為1、2、3、4、5,也就是實現棧中元素的逆序。
【要求】:
只能用遞迴函式實現,且資料結構只能使用棧。
【思路】:
取出棧底元素後,將棧進行逆序,最後將取出的棧底元素壓入到棧頂。
【編譯環境】:
centos6.7(x86_64)
gcc 4.4.7
【實現】:
實現+測試**
/*view code*檔名: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;
}
注:感謝左程雲老師的支援。
【題目】:
乙個棧依次壓入1、2、3、4、5,那麼從棧頂到棧底分別為5、4、3、2、1.將這個棧轉置後,從棧頂到棧底為1、2、3、4、5,也就是實現棧中元素的逆序。
【要求】:
只能用遞迴函式實現,且資料結構只能使用棧。
【思路】:
取出棧底元素後,將棧進行逆序,最後將取出的棧底元素壓入到棧頂。
【編譯環境】:
centos6.7(x86_64)
gcc 4.4.7
【實現】:
實現+測試**
/*view code*檔名: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;
}
注:
如何僅用遞迴函式和棧操作逆序乙個棧
題目 乙個棧依次壓入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...