假如你有一堆的盤子。如果你堆得太高的話,就可能會垮掉。所以,在真實的生活中,如果盤子疊到一定高度,你會重新開始堆新的一堆盤子。
實現這樣的乙個資料結構,我們稱之為棧集
,來模擬這個過程。這個棧集包含若干個棧(可以理解為若干堆的盤子),如果乙個棧滿了,就需要新建乙個棧來裝新加入的項。你需要實現棧集的兩個方法,push(item)
和pop()
,讓這個棧集對外表現得就像是乙個棧在進行操作一樣。
您在真實的面試中是否遇到過這個題? 是
setofstacks(2); // 建立乙個單個棧容量為2的棧集
push(1)
push(2)
push(4)
push(8)
push(16)
pop() // return 16
pop() // return 8
pop() // return 4
後續問題: 為棧集實現乙個popat(int index)
的方法,讓他可以直接從給定的某個棧上進行pop。
實現**:
push:當setofstack為空或者裡面的最後乙個子棧為滿時,新加乙個子棧
pop: 從最後乙個子棧開始彈出,如果彈出後的子棧為空,則彈出空子棧
class setofstacks:
"""@param: capacity: an inetger, capacity of sub stack
"""def __init__(self, capacity):
# do intialization if necessary
self.setofstack =
self.capacity = capacity
"""@return: an integer
"""def pop(self):
# write your code here
result = self.setofstack[-1].pop()
if len(self.setofstack[-1]) == 0:
self.setofstack.pop()
return result
lintcode練習 494 雙佇列實現棧
利用兩個佇列來實現乙個棧的功能 您在真實的面試中是否遇到過這個題?是 push 1 pop push 2 isempty return false top return 2 pop isempty return true實現 利用list來模擬佇列,在執行pop操作時,將que1裡的值全部存放在qu...
LintCode練習 12 帶最小值操作的棧
題目描述 實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o 1 時間內完成。樣例如下操作 push 1 pop push 2 push 3 min push 1 min 返回 2,1 思路 使用兩個列表mda...
Lintcode 用棧實現佇列
正如標題所述,你需要使用兩個棧來實現佇列的一些操作。佇列應支援push element pop 和 top 其中pop是彈出佇列中的第乙個 最前面的 元素。pop和top方法都應該返回第乙個元素的值。樣例 比如push 1 pop push 2 push 3 top pop 你應該返回1,2和2 挑...