Bootstrap

数据结构——栈区、栈结构(2025.2.10)

目录

一、栈区

1.定义

2.功能

二、栈结构 

 1.定义

 2.分类

(1)逻辑结构

(2)物理结构

 顺序栈

 链式栈

三、练习 

1.链式栈

(1)创建栈

(2)入栈

(3)出栈

(4)遍历打印

(5)获取栈顶元素

(6)清空栈

(7)销毁栈 


一、栈区


1.定义

        之前我们提到过的栈区,是一种系统栈,由操作系统对栈区进行操作处理。

2.功能

        栈区具有以下功能:

        1. 存储局部变量
        2. 函数的形参和返回值
        3. 函数调用关系(保护线程和恢复现场)

二、栈结构 


 1.定义

        今天我们提到的栈结构,是指一种线性的数据结构,由用户对栈区进行操作处理。

        栈:只允许从一端进行数据的插入和删除的线性存储结构。

        无论是栈结构与栈区,只要是栈均遵循FILO,即先进的后出后进的先出

 2.分类

(1)逻辑结构

        从逻辑结构上看,栈均为线性结构

(2)物理结构

        从物理结构上看,栈分为顺序栈链式栈

  • 顺序栈

        其中,顺序栈又分为四类:满增栈、空增栈、满减栈、空减栈

    ①满栈、空栈:栈顶所在位置是否存有元素

        满栈:栈顶有数据,入栈时栈顶先向上移,然后将数据装入栈顶;出栈时数据先移走,然后栈顶向下移。

        空栈:栈顶无数据,入栈时先将数据装入栈顶,再将栈顶向上移;出栈时栈顶先向下移,然后将数据移走。

    ②增栈、减栈:按照栈的生长方向区分

        增栈:内存低地址为栈底,数据入栈向高地址方向延伸存储,栈顶在内存高地址。

        减栈:内存高地址为栈底,数据入栈向低地址方向延伸存储,栈顶在内存低地址。

  •  链式栈

        链式栈即要求每个数据均有指针域,指向下一个元素。

        链式栈与顺序栈的时间复杂度均为O(1),但顺序栈需事先确定一个固定的长度,会造成内存浪费,而链式栈对长度无限制,使用起来更灵活

        如果栈的使用过程中元素变化不可预料,那么最好使用链式栈,反之,如果它的变化在可控范围内,建议使用顺序栈。

三、练习 


1.链式栈

(1)创建栈

(2)入栈(头插)

 (3)出栈(头删)

         出栈仅销毁链表结点,出栈的数据存储到数据变量中,以备调用

(4)遍历打印

 (5)获取栈顶元素

 (6)清空栈

(7)销毁栈 

        用valgrind工具查看销毁结果

;