04-顺序

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

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()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 栈和队列都可以通过通过顺序表和链表来实现,本文以顺序表为例,下一篇为链表。 1. 什么是栈 栈(stack),有些...
    NWPU_HaiboWu阅读 1,781评论 0 1
  • 元素内置顺序表   顺序表中存放的基本是数据类型相同的元素。因此存储每个元素所用的内存空间是相同。可以在顺序表里等...
    无忧_c063阅读 1,755评论 0 0
  • 栈 栈的英文单词是Stack,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入,...
    Jack921阅读 5,416评论 0 5
  • 在儿子的最后一个六一儿童节,动情地给他写了一封信,把自己感动哭了,儿子读了也表示“很感动”。参加了他学校的“告别童...
    虾米育儿和孩子一起成长阅读 8,921评论 6 7
  • 这个世界上,等着看你笑话的人往往比关心你的人多的多。你出事了,最好不要与人分享心情,大多数假闺蜜都是“哎呀,抱抱你...
    粉色滴泪鱼阅读 1,085评论 0 1