栈和队列

  • 内置的数据结构

    {} key-value 通过key找value很快

    [] 序列 通过index取值非常块

    () 元组

    {1,}集合

    'eytd'字符串

  • 不是python内置的

    • Queue队列:先进先出FIFO

      '''
      先进先出
      Queue()创建一个空的新队列
      '''
      class Queue():
          def __init__(self):
              self.items = []
          def enqueue(self, item):
              self.items.insert(0, item)
          def dequeue(self):
              return self.items.pop()
          def isEmpty(self):
              return self.items == []
          def size(self):
              return len(self.items)
          
      q = Queue()
      q.enqueue(1)
      q.enqueue(2)
      q.enqueue(3)
      print(q.dequeue())
      print(q.dequeue())
      print(q.dequeue())
      
    • Stack栈:后进先出LIFO

      '''
      栈顶、栈尾、先进后出
      Stack()创建一个空的新栈,它不需要参数,并返回一个空栈
      peek()从栈返回栈顶,但不会删除它,不需要参数,不修改栈
      isEmpty()测试栈是否为空
      '''
      
      class Stack:
          def __init__(self):
              self.items = []
          def push(self,item):
              self.items.append(item)
          def pop(self):
              return self.items.pop()
          def peek(self):
              return len(self.items)-1
          def isEmpty(self):
              return self.items == []
          def size(self):
              return len(self.items)
      
      stack = Stack()
      stack.push(1)
      stack.push(2)
      stack.push(3)
      print("栈顶元素下标:", stack.peek())
      print(stack.isEmpty())
      print("元素个数:", stack.size())
      print(stack.pop())
      print(stack.pop())
      print(stack.pop())
      
  • 结合继承

    # 方法一
    class Foo:
        def __init__(self):
            self.items = []
        def put(self,item):
            self.items.append(item)
        def get(self):
            return self.items.pop()
    #队列
    class Queue(Foo):
        def get(self):
            return self.items.pop(0)
    #栈
    class Stack(Foo):pass
    
    #方法二
    class Foo:
        def __init__(self):
            self.items = []
        def put(self,item):
            self.items.append(item)
        def get(self):
            return self.items.pop() if self.index else self.items.pop(0)
    #队列
    class Queue(Foo):
        def __init__(self):
            self.index = 0
            Foo.__init__(self)
    #栈
    class Stack(Foo):
        def __init__(self):
            self.index = 1
            Foo.__init__(self)
            
            
    q = Queue()
    q.put(1)
    q.put(2)
    print(q.get())
    print(q.get())
    
    stack = Stack()
    stack.put(3)
    stack.put(4)
    print(stack.get())
    print(stack.get())
    
  • 练习

    #创建Mypickle类
    import pickle
    # 栈
    class Stack:
        def __init__(self):
            self.items = []
        def put(self,item):
            self.items.append(item)
        def get(self):
            return self.items.pop()
    
    class Mypickle:
        def __init__(self, path):
            self.file = path
        def dump(self,obj):
            with open(self.file, 'ab') as f:
                pickle.dump(obj, f)
        def load(self):
            with open(self.file, 'rb') as f:
                while True:
                    try:
                        yield pickle.load(f)
                    except EOFError:
                        break
        # def load(self):
        #     l = []
        #     with open(self.file, 'rb') as f:
        #         while True:
        #             try:
        #                 l.append(pickle.load(f))
        #             except EOFError:
        #                 break
        #     return l
    pic = Mypickle('pickcle_file')
    # s1 = Stack()
    # s1.put('111')
    # s1.put('222')
    # s1.put('333')
    # pic.dump(s1)
    # s2 = Stack()
    # s2.put('aaa')
    # s2.put('bbb')
    # s2.put('ccc')
    # pic.dump(s2)
    for i in pic.load():
        print(i.items)
        #['111', '222', '333']
        #['aaa', 'bbb', 'ccc']
    
posted @ 2020-04-20 23:29  guguda  阅读(85)  评论(0)    收藏  举报