中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用兩個棧實現隊列

發布時間:2020-07-20 19:16:40 來源:網絡 閱讀:285 作者:sunshine225 欄目:編程語言


方法一:

入隊時,將元素壓入s1

出隊時,將s1的元素逐個“倒入”(彈出并壓入)s2,將s2的頂元素彈出作為出隊元素,之后再將s2剩下的元素逐個“倒回”s1


方法二:

入隊時,先判斷s1是否為空,如不為空,說明所有元素都在s1,此時將入隊元素直接壓入s1;如為空,要將s2的元素逐個“倒回”s1,再壓入入隊元素。

出隊時,先判斷s2是否為空,如不為空,直接彈出s2的頂元素并出隊;如為空,將s1的元素逐個“倒入”s2,把最后一個元素彈出并出隊。


最優解:

入隊時,將元素壓入s1

出隊時,判斷s2是否為空,如不為空,則直接彈出頂元素;如為空,則將s1的元素逐個“倒入”s2,把最后一個元素彈出并出隊。


注意:考慮沒有元素可供出隊時的處理(2個棧都為空的時候,出隊操作一定會引起異常)

代碼實現

//test1.h
#include<iostream>
#include<stack>
using namespace std;
template<class T>
class queueWithTwoStack
{
public:
	queueWithTwoStack();
	~queueWithTwoStack();
	void addTail(const T& data);
	T deleteHead();
private:
	stack<T> s1;
	stack<T> s2;
};

//test1.cpp
#include "test1.h"
using namespace std;
template<class T>
queueWithTwoStack<T>::queueWithTwoStack()
{}
template<class T>
queueWithTwoStack<T>::~queueWithTwoStack()
{}
//加只加在S1中
template<class T>
void queueWithTwoStack<T>::addTail(const T& data)
{
	s1.push(data);
}
//刪只刪S2中的
template<class T>
T queueWithTwoStack<T>::deleteHead()
{
	if((s2.empty())&&(s1.empty()))
	{
		printf("is empty!\n");
		return -1;
	}
	//s2為空,把S1全倒在S2中后刪
	if(s2.empty())
	{
		while(!s1.empty())
		{
			T top=s1.top();
			s1.pop();
			s2.push(top);
		}
	}
	//s2不為空直接刪
	T head=s2.top();
	s2.pop();
	return head;	
}
void test1()
{
	queueWithTwoStack<int> qw;
	qw.addTail(1);
	qw.addTail(2);
	qw.addTail(3);
	cout<<qw.deleteHead()<<endl;

	cout<<qw.deleteHead()<<endl;
	cout<<qw.deleteHead()<<endl;

	//cout<<qw.deleteHead()<<endl;
}
void test2()
{
	queueWithTwoStack<int> qw;
	qw.addTail(1);
	qw.addTail(2);
	qw.addTail(3);
	cout<<qw.deleteHead()<<endl;

	qw.addTail(4);
	cout<<qw.deleteHead()<<endl;
	cout<<qw.deleteHead()<<endl;
	cout<<qw.deleteHead()<<endl;
}
int main()
{
	//test1();
	test2();
	system("pause");
	return 0;
}


參考:《劍指offer》面試題7

    http://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

偃师市| 九龙县| 涡阳县| 仁化县| 宣汉县| 鄢陵县| 杨浦区| 门源| 扬州市| 永和县| 奇台县| 钦州市| 淮安市| 北川| 云梦县| 唐山市| 荆州市| 永善县| 北宁市| 湘潭市| 图木舒克市| 兰西县| 松潘县| 吉木乃县| 密山市| 上饶市| 雅江县| 双牌县| 博白县| 当涂县| 昆山市| 新营市| 女性| 元阳县| 阳谷县| 商城县| 连云港市| 双桥区| 松江区| 尼玛县| 额济纳旗|