队列是一种特殊的线性表,它只容许在表的前端(front)进行删除(出队)操做,而在表的后端(rear)进行插入(入队)操做。html
栈又名堆栈,它和队列同样也是一种运算受限的线性表。限定仅在表尾进行插入和删除操做的线性表。这一端被称为栈顶,相对地,把另外一端称为栈底。与先进先出队列相比,栈的运做模式是后进先出。前端
栈和链表属于线性表,意味着它能够基于数组和链表来实现,它们和普通线性表相比只是在增长和删除元素时只能在首尾操做,咱们只用提供push和pop接口,实现起来十分简单。后端
在这里咱们使用原生列表来实现,实际上使用咱们前面实现的动态数组和链表也是彻底没有问题的。数据结构
Python:app
class Stack: def __init__(self,*args): self.data = [] def push(self,item): self.data.append(item) def pop(self): item = self.data.pop() return item class Queue: def __init__(self,*args): self.data = [] def push(self,item): self.data.append(item) def pop(self): item = self.data.pop(0) return item
C#:spa
class Queue<T> { private List<T> data; public Queue() { data = new List<T>(); } public void push(T item) { data.Add(item); } public T pop() { T res = data[0]; data.RemoveAt(0); return res; } } class Stack<T> { private List<T> data; public Stack() { data = new List<T>(); } public void push(T item) { data.Add(item); } public T pop() { T res = data[data.Count - 1]; data.RemoveAt(data.Count - 1); return res; } }
队列除了先进先出外,也有循环队列、后进先出队列和优先队列。code
循环队列通常基于循环数组,它能够节省增删元素时没必要要的空间和时间浪费。htm
后进先出队列其实就和栈实现方式同样,从这个角度来看栈无疑也是队列的一种。blog
优先队列则是实现了根据入队时的权重,出队永远是队列中权重最大的那个元素,优先队列能够基于最大堆来实现,在数据结构这系列博文的后续,我也会专门再写一篇最大最小堆的博文。