2016-04-04 127 views
1

我正在嘗試編寫一個函數mrg_stacks(s1, s2),它將兩個堆棧合併在一起並返回一個新的堆棧。兩個參數堆棧應依次保持原始值相同。將兩個堆棧加在一起

def mrg_stacks(s1,s2): 

我也創建測試用例:

stack_a = Stack() 
stack_a.push(1) 
stack_a.push(2) 
stack_b = Stack() 
stack_b.push(3) 
stack_b.push(4) 
my_stack = merge_stacks(stack_a , stack_b) 
while not my_stack.is_empty(): 
    print(my_stack.pop()) 
while not stack_a.is_empty(): 
    print(stack_a.pop()) 
while not stack_b.is_empty(): 
    print(stack_b.pop()) 

結果:

4 
3 
2 
1 
2 
1 
4 
3 
+0

問題是什麼? –

+0

合併兩個堆棧並返回一個新的堆棧。 –

+0

這樣我就可以用的東西像堆棧(),推(),pop()方法和is_empty()在必要時函數內部 –

回答

0

可以使用附加和流行的代名詞,推動和蟒蛇彈出。

所以你必須

print "Hello World!\n" 
def merge(a,b): 
    ans = [] 
    while(len(a)>0): 
     ans.append(a.pop()) 
    while(len(b)>0): 
     ans.append(b.pop()) 
    return(ans) 
a = [3,4] 
b = [1,2] 
m = merge(a,b) 
for k in m: 
    print(k) 

打印:

+0

生病嘗試運行與測試情況下,我 –

+0

如果你有測試情況下,你可能也張貼與問題...除非這是作業,在這種情況下,你應該問你的老師,如果你被允許發佈問題。 – kpie

+0

我發佈過嗎?他們都是頂級 –

0

這是同樣的遊戲,因爲圖靈每個CS的學生做了。

class node(): 
    value = None 
    next = None 
    def __init__(self,val): 
     self.value=val 
    def setNext(self,next): 
     self.next=next 

class Stack: 
    next = None 
    current = None 
    def is_empty(self): 
     if(current == none): 
      return(True) 
     return(False) 
    def push(self,next): 
     next.setNext(self.current) 
     self.current = next 
    def pop(self): 
     temp = self.current 
     self.current = self.current.next 
     return(temp) 

def mrg_stacks(a,b): 
    ans = [] 
    while(not a.is_empty): 
     ans.append(a.pop()) 
    while(not b.is_empty): 
     ans.append(b.pop()) 
    return(ans) 
+0

AttributeError的:「名單」對象有沒有屬性「is_empty - 得到這個錯誤 –

+0

這是becasue您需要和b堆棧。如果你不能從這裏開始工作,你可能不應該得到這項任務的榮譽。 – kpie

+0

我給你一個提示 - >我的mrg_stacks函數返回一個列表。 – kpie

0

Lol compsci 105? 嘗試先將其繪製爲圖表: top ---> bottom(stack) Stack A:| 2 | 1 |
Stack B:| 4 | 3 |
合併堆棧:| 4 | 3 | 2 | 1 |
所以,你想從堆棧得到一個& B到通過push和pop方法的合併堆棧,但你不能直接做它從棧中彈出,然後推動它會給它不正確的順序。所以我的提示:反轉堆棧