[Python] 用list模拟栈和队列

来源:互联网 发布:知乎 收入 安排 编辑:程序博客网 时间:2024/06/10 09:49

栈和队列是数据结构中两个基本的概念,在算法中经常用到。
-栈(stack):只能在一端进行数据操作,遵循后进先出(LIFO)原则
-队列(queue):可以在两端进行数据操作,遵循先进先出(FIFO)原则,出队列的一端称为队首,入队列的一端称为队尾

Python中可以用list来模拟栈和队列

栈的代码实现

class Stack(object):    def __init__(self):        self.l = []    def empty(self):        """        判断栈是否为空        :return:        """        return len(self.l) == 0    def peek(self):        """        查看栈顶的对象,但不移除        :return:        """        if not self.empty():            return self.l[-1]        return None    def pop(self):        """        移除栈顶对象,并返回该对象的值        :return:        """        if not self.empty():            return self.l.pop()        return None    def push(self, obj):        """        把对象压入栈顶        :return:        """        self.l.append(obj)    def search(self, obj):        """        返回对象在栈中的位置,以1为基数        :param obj:        :return:        """        if not self.empty():            return self.l.index(obj) + 1        return -1

队列的代码实现

class Queue(object):    def __init__(self):        self.l = []    def empty(self):        """        判断队列是否为空        :return:        """        return len(self.l) == 0    def add(self, obj):        """        将指定元素加入队列的尾部        :param obj:        :return:        """        self.l.append(obj)    def peek(self):        """        查看队首的对象,但不移除        :return:        """        if not self.empty():            return self.l[0]        return None    def poll(self):        """        移除队首对象,并返回该对象的值        :return:        """        if not self.empty():            return self.l.pop(0)        return None