作为小白,堆和栈的概念是不是总觉得朦胧?他们认识你,但你们只是偶尔见面,彼此并不深入了解。在本文中,请听作者简要描述堆和栈的区别和联系。
堆和栈的区别和联系:
在计算机领域,栈是一个不可忽视的概念。栈是两种数据结构。栈是数据项按顺序排列的数据结构,数据项只能在一端插入和删除(称为top)。在单片机应用中,栈是一种特殊的存储区域,其主要功能是临时存储数据和地址,通常用于保护断点和站点。
堆和栈的要点:
堆,队列优先,先进先出。
堆栈,先进先出(filo-先进先出/后进先出)。
通常,如果有人把堆栈放在一起,这意味着堆栈,而不是堆。
堆和栈的对比分析:
1、堆栈空间分配
栈(操作系统):由操作系统自动分配和释放,用于存储函数的参数值和局部变量的值。它像数据结构中的堆栈一样运行。
堆(操作系统):一般由程序员发布。如果程序员不发布它,它可能会在程序结束时被操作系统回收。分配方法类似于链表
2、堆栈缓存方式
堆栈使用一级缓存,通常在调用时位于存储空间中,并在调用后立即释放。
堆存储在二级缓存中,其生命周期由虚拟机的垃圾回收算法决定(一旦成为孤儿对象就无法回收)。所以调用这些对象的速度相对较低。
3、堆栈数据结构区别
堆(数据结构):堆可以看作一棵树,比如堆排序。
堆栈(数据结构):先进先出的数据结构。
例如:
顺序堆栈的类定义
01模板类T
02类AStack {
03private:
04int大小;//数组的大小
05T * stackArray//存储堆栈元素的数组
06int top//堆栈顶部所在的数组元素的下标
07public:
08AStack (int MaxStackSize) //构造函数
09 { size=MaxStackSizestack array=new T[MaxStackSize];top=-1;}
10 ~ AStack(){ delete[]stack array;}//析构函数
11bool Push(常量项);//将元素按到堆栈顶部
12bool Pop (T项);//从堆栈顶部弹出一个元素
13bool Peek (T项)常量;//访问堆栈的顶部元素
14 int IsEmpty(void)const { return top==-1;}
15//检查堆栈是否为空
16 int IsFull(void)const { return top } size-1;}
17//检查堆栈是否已满
18 void clear(void){ top-1;}//清空堆栈
19} ;
复制代码
模板类T
类AStack {
私人:
int大小;//数组的大小
T * stackArray//存储堆栈元素的数组
int top//堆栈顶部所在的数组元素的下标
公众号:
AStack (int MaxStackSize) //构造函数
{ size=MaxStackSizestack array=new T[MaxStackSize];top=-1;}
~ AStack(){ delete[]stack array;}//析构函数
布尔推送(常量项目);//将元素按到堆栈顶部
bool Pop (T项目);//从堆栈顶部弹出一个元素
bool Peek (T项)常量;//访问堆栈的顶部元素
int IsEmpty(void)const { return top==-1;}
//检查堆栈是否为空
int IsFull(void)const { return top } size-1;}
//检查堆栈是否已满
void clear(void){ top-1;}//清空堆栈
} ;