堆,栈,队列的区别;
从内存分配上来说
栈是操作系统在建立某个进程或者线程时建立的一个存储区域,是线程私有的,栈中存的是局部变量之类,
函数参数。由操作系统自动分配。
堆是程序运行时,向操作系统申请某大小的内存空间,所有new 出来的对象和数组都是存储在堆中的。
从数据结构来说
堆是完全二叉树;
栈是线性表。栈是先进后出的而堆没有这一特性。栈的插入与删除都是在表尾进行,队列的插入在队尾,删除在队头;
如何用两个栈实现一个队列?
栈是先进后出的,队列是先进后出,例如abcd入栈后pop出来即是dcba,入队列则是abcd。
所以让abcd先入一个栈被pop出再入另一个栈变成dcba的顺序再pop出即可,负负得正。