04-顺序

作者: 卯月七 | 来源:发表于2020-03-17 10:21 被阅读0次

顺序反映数据的进出问题,分为先进先出(队列),后进先出(栈),以及能控制进出的双端队列。

1. 什么是顺序

数据的顺序关乎数据的提取方式,分为先进后出(队列问题)、后进先出(栈)、控制进出(双端队列)。可结合排队购物(队列)、玩具枪弹夹(栈)进行理解。

2. 优缺点

根据具体的业务情况,选择不同的顺序方式,有利于提高数据提取速度。

3. 代码

3.1 队列

class Array():
   def __init__(self, size=4):
       self.__size = size  # 记录容器大小
       self.__item = [None] * size  # 分配空间
       self.__length = 0

   def __setitem__(self, key, value):
       self.__item[key] = value
       self.__length += 1

   def __getitem__(self, key):
       return self.__item[key]

   def __len__(self):
       return self.__length

   def __iter__(self):
       for value in self.__item:
           yield value


class Queue():
   def __init__(self, size=4):
       self.item = Array(size)
       self.size = size
       # 先进先出
       self.head = 0
       self.end = 0

   def put(self, value):
       self.item[self.head % self.size] = value
       self.head += 1

   def pop(self):
       temp = self.item[self.end % self.size]
       self.end += 1
       return temp

3.2 栈

class Array():
    def __init__(self, size=4):
        self.__size = size  # 记录容器大小
        self.__item = [None] * size  # 分配空间
        self.__length = 0

    def __setitem__(self, key, value):
        self.__item[key] = value
        self.__length += 1

    def __getitem__(self, key):
        return self.__item[key]

    def __len__(self):
        return self.__length

    def __iter__(self):
        for value in self.__item:
            yield value


class Stack():
    def __init__(self, size=4):
        self.item = Array(size)
        self.size = size
        self.head = 0

    def put(self, value):
        self.item[self.head % self.size] = value
        self.head += 1

    def pop(self):
        self.head -= 1
        temp = self.item[self.head % self.size]
        return temp

3.3 双端队列

from collections import deque


class Stack():
    def __init__(self):
        self.item = deque()

    def put(self, value):
        self.item.append(value)

    def pop(self):
        return self.item.pop()

    def pop_reverse(self):
        return self.item.popleft()

相关文章

网友评论

    本文标题:04-顺序

    本文链接:https://www.haomeiwen.com/subject/ruuzehtx.html