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


    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)
    

      

  • 相关阅读:
    mysql逻辑备份
    Configuring ProxySQL
    CSS伸缩布局
    溢出文字隐藏三种方式
    CSS过渡效果transition和动画
    伪元素before和after本质
    css滑动门技术
    字体图标iconfont
    CSS精灵技术(sprite)
    行内块和文字垂直对齐vertical-agign
  • 原文地址:https://www.cnblogs.com/linxiyue/p/3562030.html
Copyright © 2020-2023  润新知