顺序栈

一:基本概念

1、栈的功能:从某种数据元素序列得到另一种数据元素序列的改变。
2、特点:先进后出
3、栈的其他存储形式:链栈、共享栈
4、栈内存:

  • 栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。
二:栈的存储表示方法

1、顺序栈(顺序存储结构)

  • 利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。(top = 0 表示空栈)

2、栈的设计思路

  • 设计过程中初始化空栈,是先为栈分配一个基本容量,然后在应用过程中逐渐扩大。因此可以为此设定两个常量
STACK_INIT_SIZE  (存储空间初始分配量) 
STACKINCREMENT  (存储空间分配增量)
  • 初始化栈

    按设定的初始分配量进行第一次存储分配,base为栈底指针,顺序栈中,它始终指向栈底的位置,若base的值为NULL,则表明栈结构不存在。称top为栈顶指针,其初值指向栈底,即top=base表示栈空。当插入新的栈顶元素时,top增1;删除栈顶元素时,指针top减1,因此,非空栈中的栈顶指针始终在栈顶元素的下一个位置上(以倒过来看,栈顶指针指向栈顶元素的上方位置,而以存储结构来看,栈顶指针指向元素存储位置的下一个元素的位置)。

  • 栈顶指针和栈中元素的关系
    这里写图片描述

3、堆与栈的区别

1.栈内存存储的是局部变量而堆内存存储的是实体;

2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

4、堆内存:

存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。

猜你喜欢

转载自blog.csdn.net/m0_37925202/article/details/79672955