什么是“堆”,"栈","堆栈","队列",它们的区别?
1、堆:通俗的理解就是一个特殊的数据结构。在c、c++等程序中。堆的内存是交给你去控制的。你分配了内存不去释放。就内存泄露了。比如下面的代码:
int main()
{
char *a = new char[1024];
return 1;
}
这就是在堆上申请内存。这里没有delete,就内存泄露了。

2、栈:也叫堆栈。这个数据结构很好理解。就是一个单向的链表。先入后出。栈的内存的分配是编辑器搞定的。函数执行完成。栈上的内存就会释放掉。我们看下面的代码:
int main()
{
char a[1024] = {0};
return 1;
}
这个就是栈上的内存。你不去管他,main函数执行玩,内存「自动」释放。

3、队列就是一个标准的数据结构,先入先出。我们看下面的代码:
#include <iostream>
#include <string>
#include <queue>
using namespace std;
int main()
{
queue<int> m_list;
m_list.push(1);
m_list.push(2);
m_list.push(3);
for(int i = 0; i < m_list.size(); i++)
{
cout << m_list.front() << endl;
m_list.pop();
}
return 1;
}

4、与之对应堆栈,正好相反,他是先入后出。我们看下面的代码:
#include <iostream>
#include <string>
#include <queue>
#include <stack>
using namespace std;
int main()
{
stack<int> m_list;
m_list.push(1);
m_list.push(2);
m_list.push(3);
for(int i = 0; i < m_list.size(); i++)
{
cout << m_list.top() << endl;
m_list.pop();
}
return 1;
}

5、队列更为常用,尤其是异步的程序。线程间的通信都是通过「消息队列」来完成。所以队列的用法还是要多关注下。
