zoukankan      html  css  js  c++  java
  • 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)
    

      

  • 相关阅读:
    webview 缓存
    winform 托盘
    winform自动保存属性变更
    序列化条件
    System.Web.HttpUtility VS System.Net.WebUtility
    javascript模拟sleep
    C#实现把科学计数法(E)转化为正常数字值 (转)
    appium远程连手机调控
    adb通过wifi连接android设备
    在项目中接口测试时怎么做的?
  • 原文地址:https://www.cnblogs.com/linxiyue/p/3562030.html
Copyright © 2011-2022 走看看