棧和隊列題目(c++)

特殊的棧

實現特殊的棧,在實現棧的基本功能上,再返回棧中最小的元素

  • 1、pop、push。getMin操作的時間複雜度都是O(1)O(1)
  • 2、設計的棧類型可以使用現成的棧結構
#include <iostream>
#include< stack >
using namespace std;
//s.empty();         //如果棧爲空則返回true, 否則返回false;
//s.size();          //返回棧中元素的個數
//s.top();           //返回棧頂元素, 但不刪除該元素
//s.pop();           //彈出棧頂元素, 但不返回其值
//s.push();          //將元素壓入棧頂
int main()
{
	stack<int> mystack1,mystack2;
	int a[5];
	int temp = 0;
	for (int i = 0; i < 5; i++)
		cin >> a[i];
	for (int i = 0; i < 5; i++)
	{
		mystack1.push(a[i]);
		if (i == 0)
		{
			mystack2.push(a[i]);
			temp = a[i];
		}
		else
		{
			if (a[i] <= temp)
			{
				mystack2.push(a[i]);
				temp = a[i];
			}
		}
	}
	cout << mystack1.top() <<endl;
	cout << mystack2.top() << endl;

	system("pause");
	return 0;
}

用隊列實現棧

兩個隊列

  • 12345存入第一個隊列
  • 1234出隊列進入第二個隊
  • 第一個隊列先出5,實現後進先出
  • 需要出4,則123出隊列到第一個隊列
  • 第二個隊列只剩4,4出隊列,完成4的後進先出。
  • 以此類推…

用棧實現隊列

兩個棧:

  • 12345進第一個棧,1在最下面,5在最上面;
  • 54321出棧進第二個棧,此時從上到下爲12345,此時1出棧,完成1的先進先出;
  • 需要2出棧,將2出棧…以此類推
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章