堆栈
堆(heap)
堆是先进先出
性质
堆的实现通过构造二叉堆(binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。
- 任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。
- 堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。
实现
- 堆的主要操作是插入和删除最小元素(元素值本身为优先级键值,小元素享有高优先级)
- 在插入或者删除操作之后,我们必须保持该实现应有的性质: 1. 完全二叉树 2. 每个节点值都小于或等于它的子节点
栈(Stack)
栈:先进后出的数据结构。先进去的数据在底部,最后取出,后进去的数据在顶部,最先被取出。
栈常用操作:
Stack() 创建栈
push(item) 将数据item放在栈的顶部
pop() 返回栈顶部数据,并从栈中移除该数据
peek() 返回栈顶部数据,但不移除
size() 返回栈的大小
is_empty() 返回栈是否为空
堆和栈的区别
- 堆栈空间分配区别:
1.栈(操作系统):由操作系统自du动分配释放 ,存放函zhi数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2.堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
- 堆栈缓存方式区别:
1.栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2.堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
- 堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
队列的实现
在这里,我们用顺序表来实现队列
相关操作:
Queue() 创建一个空的队列
enqueue(item) 往队列中添加一个item
dequeue() 从队列头部删除一个元素
is_empty() 判断一个队列是否为空
size() 返回队列的大小
程序实现:
class Queue:
def __init__(self):
self.items = []
def is_empty():
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__':
queue = Queue()