C++使用遞歸函數(shù)和棧操作逆序一個棧的算法示例
本文實例講述了C++使用遞歸函數(shù)和棧操作逆序一個棧的算法。分享給大家供大家參考,具體如下:
題目:
一個棧依次壓入1、2、3、4、5,那么棧頂?shù)綏5追謩e為:5、4、3、2、1。
將這個棧逆置后棧頂?shù)綏5追謩e為1、2、3、4、5。
用遞歸函數(shù)來實現(xiàn),不能用其他數(shù)據(jù)結(jié)構(gòu)。
解題思路及代碼
1、遞歸函數(shù)一:將棧的棧底元素一個個返回并移除。
2、遞歸函數(shù)二:逆序棧,調(diào)用遞歸函數(shù)一實現(xiàn)。
C++實現(xiàn):
class Solution { public: //遞歸函數(shù)一 static int getAndRemoveStackLastElem(stack<int>& s) { int result = s.top(); s.pop(); if (s.empty()) return result; else { int last = getAndRemoveStackLastElem(s); s.push(result); return last; } } //遞歸函數(shù)二 static void reverseStack(stack<int>& s) { if (s.empty()) return; int i = getAndRemoveStackLastElem(s); reverseStack(s); s.push(i); } };
程序測試用例:
#include <iostream> #include <stack> using namespace std; class Solution { public: static int getAndRemoveStackLastElem(stack<int>& s) { int result = s.top(); s.pop(); if (s.empty()) return result; else { int last = getAndRemoveStackLastElem(s); s.push(result); return last; } } static void reverseStack(stack<int>& s) { if (s.empty()) return; int i = getAndRemoveStackLastElem(s); reverseStack(s); s.push(i); } }; //打印棧 void show(stack<int> s) { while (!s.empty()) { cout << s.top() << " "; s.pop(); } cout << endl; } int main() { stack<int> s; s.push(1); s.push(2); s.push(3); s.push(4); s.push(5); s.push(6); cout << "Before reverse: " << endl; show(s); cout << "After reverse: " << endl; Solution::reverseStack(s); show(s); system("pause"); }
運行結(jié)果:
Before reverse: 6 5 4 3 2 1 After reverse: 1 2 3 4 5 6 請按任意鍵繼續(xù). . .
希望本文所述對大家C++程序設(shè)計有所幫助。
相關(guān)文章
C語言中const,volatile,restrict的用法總結(jié)
以下是對C語言中const,volatile,restrict的用法進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下2013-10-10C語言結(jié)構(gòu)數(shù)組實現(xiàn)貪吃蛇小游戲
這篇文章主要為大家詳細介紹了C語言結(jié)構(gòu)數(shù)組實現(xiàn)貪吃蛇小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10C++通過共享內(nèi)存ShellCode實現(xiàn)跨進程傳輸
在計算機安全領(lǐng)域,ShellCode是一段用于利用系統(tǒng)漏洞或執(zhí)行特定任務(wù)的機器碼,本文主要為大家介紹了C++如何通過共享內(nèi)存ShellCode實現(xiàn)跨進程傳輸,需要的可以參考下2023-12-12數(shù)據(jù)結(jié)構(gòu) 棧的操作實例詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 順序棧的定義、初始化、空棧判斷、入棧、出棧操作的相關(guān)資料,需要的朋友可以參考下2017-06-06