1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
class
Twostacks( object ): def
__init__( self ): self .stack = [] self .a_size = 0 self .b_size = 0 self .top = 0 def
a_isEmpty( self ): return
self .a_size = = 0 def
a_push( self ,item): self .stack.insert( self .a_size,item) self .a_size + = 1 def
a_pop( self ): if
self .a_size> = 1 : item = self .stack[ self .a_size - 1 ] self .stack.remove(item) self .a_size - = 1 return
item def
b_isEmpty( self ): return
self .b_size = = 0 def
b_push( self ,item): self .stack.insert( self .a_size,item) self .b_size + = 1 def
b_pop( self ): if
self .b_size> = 1 : item = self .stack[ self .a_size] self .stack.remove(item) self .b_size - = 1 return
item |
有两个栈s1,s2。入队时,将元素压入s1。出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 |
class
Stack( object ): def
__init__( self ): self .stack = [] def
isEmpty( self ): return
self .stack = = [] def
push( self ,item): self .stack.append(item) def
pop( self ): if
self .isEmpty(): raise
IndexError, ‘pop from empty stack‘ return
self .stack.pop() def
size( self ): return
len ( self .stack) class
Queue_with_stacks( object ): def
__init__( self ): self .stackA = Stack() self .stackB = Stack() def
isEmpty( self ): return
self .stackA.isEmpty() and
self .stackB.isEmpty() def
enqueue( self ,item): self .stackA.push(item) def
dequeue( self ): if
self .stackB.isEmpty(): if
self .stackA.isEmpty(): raise
IndexError, ‘queue is empty.‘ while
self .stackA.size()> = 2 : self .stackB.push( self .stackA.pop()) return
self .stackA.pop() else : return
self .stackB.pop() |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 |
class
Queue( object ): def
__init__( self ): self .queue = [] def
isEmpty( self ): return
self .queue = = [] def
enqueue( self ,x): self .queue.append(x) def
dequeue( self ): if
self .queue: a = self .queue[ 0 ] self .queue.remove(a) return
a else : raise
IndexError, ‘queue is empty‘ def
size( self ): return
len ( self .queue) class
Stack_with_queues( object ): def
__init__( self ): self .queueA = Queue() self .queueB = Queue() def
isEmpty( self ): return
self .queueA.isEmpty() and
self .queueB.isEmpty() def
push( self ,item): if
self .queueB.isEmpty(): self .queueA.enqueue(item) else : self .queueB.enqueue(item) def
pop( self ): if
self .isEmpty(): raise
IndexError, ‘stack is empty‘ elif
self .queueB.isEmpty(): while
not self .queueA.isEmpty(): cur = self .queueA.dequeue() if
self .queueA.isEmpty(): return
cur self .queueB.enqueue(cur) else : while
not self .queueB.isEmpty(): cur = self .queueB.dequeue() if
self .queueB.isEmpty(): return
cur self .queueA.enqueue(cur) |
原文:http://www.cnblogs.com/linxiyue/p/3562030.html