用倆個棧實現佇列

2021-06-09 04:53:26 字數 1505 閱讀 9695

棧、佇列

一、題目:(感謝

提供的題目)

用倆個棧實現佇列。

某佇列的宣告如下:

templateclass cqueue

~cqueue() {}

void deletehead(); // remove a element from head

private:

stackm_stack_in;

stackm_stack_out;

};

分析:從上面的類的宣告中,我們發現在佇列中有兩個棧。

因此這道題實質上是要求我們用兩個棧來實現乙個佇列。

棧是一種後入先出的資料容器,對佇列進行的插入和刪除操作都是在棧頂上進行;

佇列是一種先入先出的資料容器,我們總是把新元素插入到佇列的尾部,而從佇列的頭部刪除元素。

二、分析:

1.設定a棧用於儲存佇列資訊,b棧為輔助棧

2.入列,如同入棧(a)操作

3.出列,把出棧(a)的元素入棧(b),至a棧中的最後一位捨去,把出棧(b)的元素入棧(a),完成出列的過程

三、**:

#includeusing namespace std;

const int stacksize = 10;

templateclass stack

~stack(){}

void push(const t& node);//入棧

t pop();//出棧

void printstack();//輸出棧中所有元素

int size;//棧大小

private:

int stackarray[stacksize];//儲存棧元素

};templatevoid stack::push(const t& node)

templatet stack::pop()

templatevoid stack::printstack()

~cqueue() {}

void deletehead(); // remove a element from head

private:

stackm_stack_in;

stackm_stack_out;

};templatevoid cqueue::deletehead()

四、高階:

兩個佇列實現棧。

分析:棧使用陣列實現比較方便;而佇列使用鍊錶實現比較方便。

用倆個棧實現佇列

思路 棧是先進後出的,佇列是先進先出的,所以要想讓先壓進棧的元素先出來,只通過乙個棧是實現不了的,但我們可以通過將棧1的資料取出再壓入棧2中,這樣在棧1底部的 也就是先壓棧的 資料就會到棧2的頂部,再將其取出,就可以實現佇列先進先出了。include include include using na...

57 用倆個棧實現佇列

57.用倆個棧實現佇列。題目 某佇列的宣告如下 83templateclass cqueue cqueue void deletehead remove a element from head private stackm stack1 stackm stack2 分析 從上面的類的宣告中,我們發現...

C 倆棧實現佇列

自畫草圖 1 2 3 4向s1壓棧 s1彈棧,元素為4 3 2 1 4 3 2 1壓向s2 s2彈棧為1 2 3 4 即符合隊的特徵先進先出 設計思路 1.s1棧往裡壓資料 2.s2棧只負責彈資料 3.s2彈棧前,先判斷s2是否為空棧,如果是空棧,判斷s1是否是空棧,都為空棧則隊空 4.s1不為空棧...