数据结构之单向队列和双向队列python版

2019-08-18  本文已影响0人  stay丶gold

单向队列:队列是只允许在一端进行插入操作,在另外一段进行删除操作的线性表,队列不允许在中间部位进行操作,先进先出(First In First Out)

python代码实现单向队列如下:

# coding:utf-8

class Deque(object):
    """
    队列:先进先出(FIFO)
    """

    def __init__(self):
        self._list = []

    def put(self, item):
        """
        添加一个元素到队列
        """
        self._list.append(item)

    def get(self):
        """
        从队列取出一个元素
        """
        return self._list.pop(0)


    def is_empty(self):
        """
        判断队列是否为空
        """
        return not self._list

    def size(self):
        """
        返回队列的大小
        """
        return len(self._list)

if __name__ == '__main__':
    s = Deque()
    print(s.is_empty())
    s.put(1)
    s.put(2)
    s.put(3)
    print(s.size())
    print(s.get())
    print(s.get())
    print(s.is_empty())

双向队列:双向队列中的元素可以从两端弹出,限定插入和删除操作在表的两端进行。双向队列可以在队列任意一端入队和出队,实际由左右两个栈组成。

python代码实现双向队列如下:

# coding:utf-8

class Deque(object):
    """
    双向队列:队列两边都可以取放元素
    实际由左右两个栈组成
    """

    def __init__(self):
        self._list = []

    def put_left(self, item):
        """
        队列左边放一个元素
        """
        self._list.insert(0, item)

    def put_right(self, item):
        """
        队列右边放一个元素
        """
        self._list.append(item)

    def get_left(self):
        """
        从队列左边取出一个元素
        """
        return self._list.pop(0)

    def get_right(self):
        """
        从队列右边取出一个元素
        """
        return self._list.pop()

    def is_empty(self):
        """
        判断队列是否为空
        """
        return not self._list

    def size(self):
        """
        返回队列的大小
        """
        return len(self._list)

if __name__ == '__main__':
    s = Deque()
    print(s.is_empty())
    s.put_left(1)
    s.put_left(2)
    s.put_right(3)
    s.put_right(4)
    print(s.size())
    print(s.get_left())
    print(s.get_right())
    print(s.is_empty())

上一篇 下一篇

猜你喜欢

热点阅读