計算機人沒有校運會= =
示例 1:
乙個棧用於儲存插入的數字,乙個棧用於刪除模擬佇列的隊首。
插入:棧1只需要push插入的數字。
刪除:如果棧2為空,將棧1的元素全部push到棧2中並且刪除棧頂,返回刪除的數字;如果棧2不為空,則刪除棧頂並返回棧頂。
class cqueue
void
(int value)
intdeletehead()
if(deletestack.
empty()
) num=deletestack.
top();
deletestack.
pop();
return num;
}return-1
;}};
時間o(n),空間o(n)
發現好像有些沒有意義的**,所以對delete的邏輯進行改進。s1為空且s2為空只需歸類為s2為空的情況,s1和s2只要有一組不為空就為第三種情況。於是得到deletehead的簡化版
int
deletehead()
}if(deletestack.
empty()
)return-1
;//s1為空,s2為空
else
//s1/s2有一者不為空
}
stl裡面的棧的pop()是void類的在int型的函式中不能作為返回值,所以**看起來不舒服,用c#寫就是這樣
public class cqueue
public void
(int value)
public int
deletehead()
}if(stack2.count ==0)
else
}}
劍指 Offer 09 用兩個棧實現佇列
劍指 offer 09.用兩個棧實現佇列 示例 1 輸入 3 輸出 null,null,3,1 示例 2 輸入 5 2 輸出 null,1,null,null,5,2 上大二時候就學的老經典了。思路 宣告兩個棧s1,s2。入佇列操作等同於入棧s1。出佇列操作分三種情況 1.兩個棧都為空,意味著隊列為...
劍指offer 09 用兩個棧實現佇列
示例 1 示例 2 這個地方有點繞,需要注意的是 當stack2不為空時,佇列中的元素都在stack2中 stack2中都是待刪除的元素 無論stack1中是否有元素都從2中彈出元素 頻繁的插入和刪除首選linkedlist,通常情況下不推薦使用vector和及其子類stack class cque...
劍指 Offer 09 用兩個棧實現佇列
該題使用兩個棧,乙個用於存資料,乙個用於取資料,而棧的思路是後進先出,佇列的思路是先進先出,所以需要在插入資料時將所有資料放入a棧,如果此時需要取出資料,那麼就將a內的資料都pop到b中去,假如現在我們插入了 1,2,3 到a中,那麼此時呼叫取資料的函式,將會把資料轉存到b中,b中的資料就為 3,2...