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

2022-06-01 19:24:09 字數 1028 閱讀 5373

// 面試題9:用兩個棧實現佇列

// 和deletehead,分別完成在佇列尾部插入結點和在佇列頭部刪除結點的功能。

template class cqueue

;棧和佇列是截然不同的兩種結構,棧是後進先出,先進棧的元素會被壓到棧底。

佇列則是先進先出。

佇列末尾新增節點很簡單直接在stack1入棧即可。

刪除佇列的頭結點的話,因為頭結點被壓在stack1的棧底,所以應該全部出棧再壓入stack2,stack2棧頂元素出棧即可。

主要是所有情況都要考慮到。

1)隊列為空,即stack1和stack2均為空,這個時候應該丟擲異常

2)stack1不為空,stack2為空。直接stack1所有元素出棧,再壓入stack2,然後stack2棧頂元素出棧即可。

3)stack1不為空/為空,stack2不為空。不管stack1是不是有元素,只要stack2不為空,說明stack2中元素都是順著排的,像佇列一樣,

也就不再需要stack1出棧入棧了,直接stack1棧頂元素出棧。

**可以這樣寫,只要stack2為空就開始轉移stack1的元素,轉移完後如果stack2還是空,丟擲異常;

否則就直接stack2棧頂元素出棧並返回即可。

templatet cqueue::deletehead()

}if(stack2為空)

throw exception("隊列為空");

儲存stack2棧頂元素;

stack2棧頂元素出棧;

return stack2原棧頂元素;}

templatet cqueue::deletehead()

}//搬運後stack2仍為空,丟擲異常

if(stack2.size() == 0)

throw new exception("queue is empty");

//stack2棧頂元素出棧,返回

t head = stack2.top();

stack2.pop();

return head;

}

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

題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別 棧是保證元素後進先出,佇列保證元素先進先出,它們都只有到來先後順序 題目思路 需要用兩個棧來實現乙個佇列,乙個棧a是先進後出,將棧a中出的元素存放在棧b中,負負得正,實現佇列的先進先出功能。存入時,存在棧a,...

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

二 關鍵 1.關於佇列的插入和刪除 只在stack1中插入,只在stack2中刪除。2.關於倒水操作 只在stack2為空時,把stack1中元素彈出壓倒stack2中。其他情況不進行倒水的操作。三 解釋 刪除乙個元素的步驟 當stack2不是空的時候,直接彈出stack2棧頂元素 當stack2是...

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

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。入隊 將元素進棧stack1 出隊 判斷棧stack2是否為空,如果為空,則將棧stack1中所有元素彈出pop,並push進stack2,stack2出棧 如果不為空,棧stack2直接出棧。即 棧a用來作入佇列 棧...