zoukankan      html  css  js  c++  java
  • 数据结构-栈和队列

    两个栈实现队列
    class QueueWithTwoStacks:
        '''思路:栈1用来进栈,栈2用来出栈'''
    
        def __init__(self):
            self.stack1 = []
            self.stack2 = []
    
        def append(self, key):
            self.stack1.append(key)
    
        def popleft(self):
            ##stack2 没有值添加
            if not self.stack2:
                while self.stack1:
                    # 进栈
                    self.stack2.append(self.stack1.pop())
    
            if not self.stack2:
                raise Exception('empty')
            # stack2 有值pop
            return self.stack2.pop()
    
    
    q = QueueWithTwoStacks()
    
    q.append(1)
    q.append(2)
    print(q.popleft())
    q.append(3)
    
    print(q.popleft())
    print(q.popleft())
    
    q.append(5)
    q.append(6)
    print(q.popleft())
    






    两个队列实现栈
    from collections import deque
    
    
    class StackWithTwoQueues:
        '''一个队列用来进队,删除操作:长度>1,先把另一个队列 除过最后一元素,全部插入到另一个队列,删除最后一个即可'''
        def __init__(self):
            self.queue1 = deque()
            self.queue2 = deque()
    
        def append(self, key):
            self.queue1.append(key)
    
        def pop(self):
            if not self.queue1 and not self.queue2:
                raise IndexError('stack is empty')
    
            if not self.queue2:
                if len(self.queue1) == 1:
                    return self.queue1.popleft()
    
                # 留每个队列的最后一个元素即可
                for i in range(len(self.queue1) - 1):
                    self.queue2.append(self.queue1.popleft())
                return self.queue1.popleft()  # 此时队列1空
    
            if not self.queue1:
                if len(self.queue2) == 1:
                    return self.queue2.popleft()
    
                # 留每个队列的最后一个元素即可
                for i in range(len(self.queue2) - 1):
                    self.queue1.append(self.queue2.popleft())
                return self.queue2.popleft()  # 此时队列2空
    
    
    stack=StackWithTwoQueues()
    
    
    stack.append('a')
    stack.append('b')
    stack.append('c')
    
    print(stack.pop())
    print(stack.pop())
    print(stack.queue1)
    print(stack.queue2)
    
    stack.append('d')
    
    print(stack.pop())
    
    
  • 相关阅读:
    rc.local文件
    mysql 常用语句模板
    gradle使用
    Elasticsearch 聚合
    华盛顿大学 Programming Languages
    802.11基础
    802.11简单认证过程
    网络诊断错误归类
    802.1X基础
    终端管理软件tmux
  • 原文地址:https://www.cnblogs.com/liuer-mihou/p/12738664.html
Copyright © 2011-2022 走看看