天天看點

逆轉棧(c++)

題目要求如下:

現有棧S,試設計算法,将S中的元素逆置。要求不用輔助資料結構,僅通過對S自身的操作完成S中元素的逆置。

代碼如下:

#include"pch.h"
#include<iostream>
#include<stack>
#include<cstdlib>
#include<ctime>
using namespace std;

const int LENGTH = 10;
stack<int> initialStack()
{
	stack<int> result;
	for (int i = 0; i < 10; i++)
	{
		result.push(rand() % 10);
	}
	return result;
}
void printStack(stack<int> st)
{
	for (int i = 0; i < 10; i++)
	{
		cout << st.top();
		st.pop();
		if (i != 9)
			cout << " ";
		else
			cout << endl;
	}
}
void helpReverseStack(stack<int>& st, int top_num, int level)
{
	if (st.size() == level)
	{
		st.push(top_num);
		return;
	}
	int num = st.top();
	st.pop();
	helpReverseStack(st, top_num, level);
	st.push(num);
}
void reverseStack(stack<int>& input)
{
	for (int i = 0; i < input.size() - 1; i++)
	{
		int num = input.top();
		input.pop();
		helpReverseStack(input, num, i);
	}
}

int main()
{
	stack<int> input = initialStack();
	printStack(input);
	reverseStack(input);
	printStack(input);
}
           

實作結果如圖:

逆轉棧(c++)