數(shù)據(jù)結(jié)構(gòu)用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的實(shí)例
成都創(chuàng)新互聯(lián)公司是一家以重慶網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站營(yíng)銷、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都辦公空間設(shè)計(jì)等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
棧是先進(jìn)后出,隊(duì)列是先進(jìn)先出
每次元素都push在st1中,pop的時(shí)候如果st2為空,將st1的棧頂元素放在st2的棧底,這樣st1的所有元素都放在st2中,st1的棧底就是st2的棧頂,pop st2的棧頂,這樣就滿足了隊(duì)列的先進(jìn)先出。
#includeusing namespace std; #include #include template class SQueue { public: void Push(const T& value); T Pop(); private: stack st1; stack st2; }; template T SQueue ::Pop() { if (st2.size() <= 0) { if (st1.size() == 0) { exit(1); } while ((st1.size() > 0)) { T& top = st1.top(); st2.push(top); st1.pop(); } } T head = st2.top(); st2.pop(); return head; } template void SQueue ::Push(const T& value) { st1.push(value); } int main() { SQueue sq; for (int i = 0; i < 10; ++i) { sq.Push(i); } for (int i = 0; i < 5; ++i) { cout << sq.Pop() << " "; } for (int i = 0; i < 5; ++i) //分兩次驗(yàn)證 { cout << sq.Pop() << " "; } cout << endl; system("pause"); return 0; }
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!