劍指offer 面試題 兩個佇列實現棧

2021-06-22 02:38:59 字數 1028 閱讀 6003

不像倆個棧實現佇列,兩次先進後出之後就是先進先出,佇列幾次先進先出仍然是先進先出,那麼我們看看實際情況,將佇列裡除最後乙個以外,全都拿走,剩下的這最後乙個就是想要的結果,那麼先前拿走的那些放**呢?給了兩個佇列,那就放在另外乙個佇列裡。若是在出的話,就對另乙個佇列進行相同的操作。

templateclass mystack

valuetype pop();

void push(const valuetype& );

private:

// int queuenumbers;

std::queuequeue1;

std::queuequeue2;

char push_queue;

private:

std::queue& pushqueue()

std::queue& popqueue()

};templatevoid mystack::push(const valuetype& value)

templatevaluetype mystack::pop()

valuetype cur_front = pushqueue().front();

pushqueue().pop();

push_queue = !push_queue;

return cur_front;

}

這個實現的過程中,每次出棧,都要將佇列裡的元素折騰一次,其實也不用兩個佇列,用乙個佇列就好了,把最後乙個之前的元素出隊再入隊就行了。

templateclass mystack2;

templatevoid mystack2::push(const valuetype& value)

templatevaluetype mystack2::pop()

valuetype front_val = queue.front();

queue.pop();

return front_val;

}

《劍指offer》面試題七 用兩個棧實現佇列

原題位址 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。這裡用兩個陣列來模擬兩個棧。由於棧的特點是先進後出,佇列的特點是先進先出,所以這裡要用兩個棧來實現,乙個棧先進後出,兩個棧的話就可以先進先出了。其中乙個棧 稱呼a棧吧 專門用來完成push操作。只要...

劍指Offer 面試題七 用兩個棧實現佇列

templateclass cqueue cqueue void t deletehead void print private stackstack1 stackstack2 stack1只相當於乙個轉換器,新增元素時經過stack1將元素統統存入stack2中,也就是說stack2中存入元素,s...

劍指Offer 面試題9用兩個棧實現佇列

思路 stack1存放著逆序的剩餘佇列,stack2存放著正序的佇列。pop的時候,當stack2為空,表示序列都在stack1中,則從stack1中迴圈pop後push到stack2,再從stack2中pop出隊首 stack2不為空則直接pop。push的時候,當stack2不為空,把資料從st...