Python数据结构——栈、队列的实现(二)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1. 一个列表实现两个栈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

2. 两个栈实现一个队列有两个栈s1,s2。入队时,将元素压入s1。出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。

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()

3. 两个队列实现一个栈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)

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航