转自:http://jingyan.baidu.com/article/6c67b1d6a09f9a2786bb1e4a.html
博主总结: 栈=堆栈(栈的别名)!=堆
栈(堆栈)(Stack) :先进后出
队列(Queue): 先进先出
堆(Heap):二叉树
堆:什么是堆?又该怎么理解呢?
①堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
·堆中某个节点的值总是不大于或不小于其父节点的值;
·堆总是一棵完全二叉树。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
②堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。
③堆是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。
④堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。
相关操作:
队列:
!q.empty() 队列非空返回ture
q.push() 入队
q.front() 取队头元素
q.pop() 出队
数组:
p.push_back() 压入数组
栈:
a.push() 入栈
a.top() 取栈顶元素
a.pop() 出栈
优先队列用堆实现的,要会堆的白板编程