首页 > 编程 > Python > 正文

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

2019-11-14 17:50:17
字体:
来源:转载
供稿:网友

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)

  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表