兩個隊列實現一個棧

  兩個隊列實現一個棧,寫了兩個棧實現一個隊列後,基本上思路是比較清晰的...但我發現貌似就不能用O(1)時間的實現出棧,我本身想的是每次出棧,數據存放的隊列就會換到另外一個,進棧卻是不復雜,只用找到一個不是空的隊列就行了。ios

  代碼:spa

#include <iostream>
using namespace std;

#define sizeOfBuffer 5

struct Stack {
	int val;
	int base;
	int top;
}Queue1[sizeOfBuffer], Queue2[sizeOfBuffer];

class MyFunc {

public:
	struct Stack* initStack(struct Stack* Q) {
		Q = new struct Stack;
		Q->base = Q->top = 0;

		return Q;
	}

	bool PushStack(struct Stack* Q, int Data) {
		if(Q->base != sizeOfBuffer && Q->top == 0) {
			Queue1[Q->base++].val = Data;
		} else if(Q->top != sizeOfBuffer && Q->base == 0) {
			Queue2[Q->top++].val = Data;
		} else return false;

		return true;
	}

	bool PopStack(struct Stack* Q) {

		if(Q->base == 0 && Q->top == 0)
			return false;
		else if(Q->base != 0 && Q->top == 0) {
			while(--Q->base > 0) {
				Queue2[Q->top] = Queue1[Q->top];
				++Q->top;
			}
		}
		else {
			while(--Q->top > 0) {
				Queue1[Q->base] = Queue2[Q->base];
				++Q->base;
			}
		}

		return true;
	}

	int GetStackCount(struct Stack* Q) {
		return Q->base ? Q->base : Q->top;
	}

	void PrintStackMember(struct Stack* Q) {
		int i = Q->base, j = Q->top;

		while(i || j) {
			cout << (i ? Queue1[--i].val : Queue2[--j].val) << ' ';
		}
	}
};



int main()
{
	struct Stack* SP = NULL;
	int Data;
	char Ch;

	SP = MyFunc().initStack(SP);

	cout << "1) 入棧		2) 出棧" << endl
		<< "3) 棧		4) 個數" << endl
		<< "5) 退出" << endl
		<< "請輸入對應的編號進行操做" << endl;

	Ch = cin.get();
	while(Ch != '5') {

		switch(Ch) {
		case '1' :	cout << "輸入:" << endl;
					cin >> Data;
					MyFunc().PushStack(SP, Data) == true ? cout << "已入棧" << endl : cout << "Stack overflow!" << endl;
				break;
		case '2' :	MyFunc().PopStack(SP) == true ? cout << "已出棧" << endl : cout << "Stack underflow!" << endl;
				break;
		case '3' :	cout << "顯示數據:" << endl;
					MyFunc().PrintStackMember(SP);
					cout << endl;
				break;
		case '4' :	cout << "當前棧個數:" << MyFunc().GetStackCount(SP) << endl;
				break;
		}
		Ch = cin.get();
	}

	delete SP;
	SP = NULL;
	
	return 0;
}

  ...貌似也沒什麼好說的QAQ,就這樣吧。blog

相關文章
相關標籤/搜索