数据结构学习篇之栈和队列
数据结构学习篇之栈和队列
概念理解
栈和队列是两种特殊的线性表,它们是限定只能在表的一端或两端进行插入、删除元素的线性表,因此,统称为限定性数据结构。
比较
共同点:
都是只能在线性表的端点插入和删除。
不同点:
栈的插入和删除都在线性表的同一个端点,该点通称栈顶,相应地,不能插入删除的另一个端点通称栈底,其特性是后进先出。
队列在线性表的表头插入,表尾删除,表头一般称队头,表尾一般称队尾,其特性是先进先出。
栈
栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,top)进行加入数据(push)和输出数据(pop)的运算。
栈是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征。
栈结构Python实现:
class Stack(object): """栈""" def __init__(self): self.items = [] def is_empty(self): """判断是否为空""" return self.items == [] def push(self, item): """加入元素""" self.items.append(item) def pop(self): """弹出元素""" return self.items.pop() def peek(self): """返回栈顶元素""" return self.items[len(self.items)-1] def size(self): """返回栈的大小""" return len(self.items) if __name__ == "__main__": stack = Stack() stack.push("one") stack.push("two") stack.push("three") print(stack.size()) print(stack.peek()) print(stack.pop()) print(stack.pop()) print(stack.pop())
队列
队列(queue)是一种具有先进先出特征的线性数据结构,元素的增加只能在一端进行,元素的删除只能在另一端进行。能够增加元素的队列一端称为队尾,可以删除元素的队列一端则称为队首。
队列Python实现
class Queue(object): """队列""" def __init__(self): self.items = [] def is_empty(self): """判断是否为空""" return self.items == [] def enqueue(self, item): """进队列""" self.items.insert(0,item) def dequeue(self): """出队列""" return self.items.pop() def size(self): """返回大小""" return len(self.items) if __name__ == "__main__": q = Queue() q.enqueue("one") q.enqueue("two") q.enqueue("three") print(q.size()) print(q.dequeue()) print(q.dequeue()) print(q.dequeue())
双端队列
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
class Deque(object): """双端队列""" def __init__(self): self.items = [] def is_empty(self): """判断队列是否为空""" return self.items == [] def add_front(self, item): """在队头添加元素""" self.items.insert(0,item) def add_rear(self, item): """在队尾添加元素""" self.items.append(item) def remove_front(self): """从队头删除元素""" return self.items.pop(0) def remove_rear(self): """从队尾删除元素""" return self.items.pop() def size(self): """返回队列大小""" return len(self.items) if __name__ == "__main__": deque = Deque() deque.add_front(1) deque.add_front(2) deque.add_rear(3) deque.add_rear(4) print(deque.size()) print(deque.remove_front()) print(deque.remove_front()) print(deque.remove_rear()) print(deque.remove_rear())
以上三种结构实现使用了python内置数据结构列表的操作,代码很简单主要是帮助自己理解概念。
有关python内置数据结构,大家可以去菜鸟教程看看,有详细的介绍 http://www.runoob.com/python3/python3-data-structure.html