本文不涉及栈和队列概念的详细讲解,而着重利用 python 实现栈和队列,其中穿插代码讲解。
目录
栈
栈实现数据的后进先出(LIFO)。栈可以输入数据,弹出数据,获取栈顶元素等操作。
构造栈
使用列表的方式实现栈。
class Stack():
def __init__(self):
self.__list = []
压栈
把新加的元素放到列表尾部。
def push(self, item):
"""压栈"""
self.__list.append(item)
出栈
删除掉列表尾部元素。
def pop(self):
"""出栈"""
return self.__list.pop()
栈顶
获得列表末尾的元素。
def peek(self):
"""获得栈顶元素"""
return self.__list[-1]
判空
判断列表是不是一个空列表。
def is_empty(self):
return self.__list == []
大小
直接获取列表的大小。
def size(self):
"""获取栈中元素个数"""
return len(self.__list)
栈的使用
if __name__ == "__main__":
s = Stack()
print(s.is_empty())
print(s.size())
s.push(100)
s.push(200)
s.push(300)
print(s.is_empty())
print(s.size())
print(s.peek())
print(s.pop())
print(s.peek())
print(s.size())
队列
队列实现数据的先进先出(FIFO)。在队列当中可以在队尾添加元素,从队头获取元素。
构造队列
同样使用列表的方式实现栈。
class Queue():
def __init__(self):
self.__list = []
入队
从列表尾部添加元素。
def enqueue(self, item):
"""在队尾插入元素"""
self.__list.append(item)
出队
删除列表的第一个元素。
def dequeue(self):
"""从队头删除元素"""
return self.__list.pop(0)
判空
判断队列是否为空与栈相同。
def is_empty(self):
"""判断队列是否为空"""
return self.__list == []
大小
通过获取列表长度得到队列长度。
def size(self):
"""获得队列中元素个数"""
return len(self.__list)
队列使用
if __name__ == "__main__":
q = Queue()
print(q.is_empty())
print(q.size())
q.enqueue(100)
q.enqueue(200)
q.enqueue(300)
print(q.is_empty())
print(q.size())
print(q.dequeue())
print(q.dequeue())
print(q.size())