栈—数据结构

news2025/1/10 10:52:43
一、系统栈
  1. 系统栈(System Stack)

    • 用途:系统栈通常指的是调用栈(Call Stack),它用于存储程序执行期间的函数调用信息。每当一个函数被调用时,系统栈会记录这个调用的状态,包括返回地址、局部变量、参数、函数之间的调用关系等。
    • 行为:系统栈是自动管理的,程序员通常不需要直接操作它。当函数执行完毕,系统栈会自动清理并返回到上一个函数调用的状态。
    • 作用域:系统栈通常与程序的执行流程紧密相关,它帮助维护程序的执行上下文。

注意

  • 保护现场的地址,是执行指令的下一条指令的地址
  • 先进后处,后进先出,FILO
  • 系统栈区是操作系统自己进行保护
二、数据结构中的栈
  1. 数据栈(Data Stack)

    • 用途:数据栈通常指的是用户定义的栈,用于存储数据元素。数据栈可以用于各种算法和数据结构的实现,如表达式求值、括号匹配、函数调用的参数传递等。
    • 行为:数据栈由程序员显式管理,需要程序员编写代码来执行push(入栈)和pop(出栈)操作。
    • 作用域:数据栈的作用域通常由程序员定义,它可以是全局的,也可以是局部的,取决于程序的设计。
  1. 数据结构栈:先进后出、后进先出
  2. 结构:只允许从一端进行数据的插入和删除的线性的存储结构
  3. 含有:栈顶(输入插入和删除的地方)和栈底
  4. 栈分为数据栈和链式栈
三、数据栈
3.1、满栈

1、入栈:先挪栈顶指针,再放入数据

2、出栈:先移出数据,再移动指针。

3.2、空栈

1、入栈:先放入输入,再移动栈顶指针

2、出栈:先移动栈顶指针,再数据弹出

3.3、增栈、减栈

栈的增长方向

入栈的方向

1、栈顶由内存高地址向低地址

2、栈顶从低地址向高地址

1、满增栈

入栈的方向是是增栈的方式,放入数据的是满栈的方式。

2、满减栈

入栈的方向是是减栈的方式,放入数据的是满栈的方式。

3、空增栈

入栈的方向是是增栈的方式,放入数据的是空栈的方式。

4、空减栈

入栈的方向是是减栈的方式,放入数据的是空栈的方式。

四、链式栈
4.1、操作

链式栈:

1、创建栈

Stack_t *create_stack()
{
    Stack_t *stack = malloc(sizeof(Stack_t));
    if(NULL == stack)
    {
        perror("fail stack");
        return NULL;
    }
    stack->ptop = NULL;
    stack->clen = 0;
    return stack;
}

2、入栈

int push_stack(Stack_t *stack,Datatype data)
{
    SNode_t *node = malloc(sizeof(SNode_t));
    if(node == NULL)
    {
        perror("fail error");
        return -1;
    }
    node->data = data;
    node->pnext = NULL;
    node->pnext = stack->ptop;
    stack->ptop = node;
    stack->clen++;
    return 0;
}

3、出栈(看一下,出去的元素,所以和6一样)

int pop_stack(Stack_t *stack,Datatype *data)
{
    if(stack->ptop == NULL)
    {
        return -1;
    }
    SNode_t *node = stack->ptop;
    *data = stack->ptop->data;
    stack->ptop = node->pnext;
    free(node);
    stack->clen--;
}

4、清空栈(把所有结点都删除)

void clear_stack(Stack_t *stack)
{
    if(stack->ptop == NULL)
    {
        return;
    }
    SNode_t *node = stack->ptop;
    while(stack->ptop != NULL)
    {
        SNode_t *node = stack->ptop;
        stack->ptop = node->pnext; 
        free(node);
        stack->clen--;
    }
}

5、判空(判断该栈)

int is_empty_stack(Stack_t *stack)
{
    if(stack->ptop == NULL)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

6、获取栈顶元素(获取栈顶元素,在外面开一个空间,将该空间的地址传过去,进行获取元素,以便于区分元素还是返回值)

int get_stack_top(Stack_t *stack,Datatype *data)
{
    if(stack->ptop == NULL)
    {
        return -1;
    }
    *data = stack->ptop->data;
    return 0;
}

7、销毁栈

void destory_stack(Stack_t *stack)
{
    clear_stack(stack);
    free(stack);
}
五、系统栈和数据结构中的区别
  • 控制方式:系统栈由操作系统或运行时环境自动管理,而数据栈由程序员控制。
  • 用途:系统栈主要用于跟踪函数调用和维护执行上下文,数据栈用于数据的临时存储和操作。
  • 可见性:系统栈对程序员通常是不可见的,而数据栈是程序员可以直接操作的。
  • 生命周期:系统栈的生命周期与函数调用的生命周期相关,而数据栈的生命周期由程序员定义。
  • 相同之处:都是先进后出的结构,只是管理用户不同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

notepad下载安装使用以及高级使用技巧

前言 Notepad是一款广受欢迎的文本编辑器,尤其受到开发者和编程人员的喜爱。它支持多种编程语言的语法高亮显示,并且提供了丰富的插件系统,使得功能可以轻松扩展。本文将详细介绍如何在Windows操作系统上下载、安装Notepad,以及基…

数据结构与算法 第11天 (查找)

一、概念 查找表 查找表是一个集合 静态查找表:查找完没变化 动态查找表:进行插入删除操作 主关键字 类似主键能唯一确定一个元素 平均查找长度ASL average search length 评价查找算法的指标 查找目的 1、查询某个“特定的”数据元素是…

Ifream实现微前端效果

记得有人曾问过我,老旧的项目内容很多,项目卡,想要改造成类似微前端,领导想要快速,又不想系统重构、而且是不同子系统的协同,要怎么做?对方不想做太大的改造,所以想用ifream的方式动…

图片隐写方法

1、常规隐写 思路: 1、文件头部被破坏;修复文件头部 2、16进制异或(1E) 3、宽高被修改;修复宽高;使用python脚本获取宽高或者使用tweakpng工具获取宽高 4、图片转化成base编码;让你还原图片 5、…

MySQL数据库的基本使用

目录 1.MySQL数据库中的用户管理与登录 1.1用户管理 root用户 其他用户 1.2MySQL数据库的登录 2.使用MySQL的前置知识 2.1SQL语言 SQL语言简介 SQL语句的分类 2.2编码集的认识 字符集 校验集 字符集和校验集的关系 如何查看和修改字符集与校验集 3.MySQL数据库的…

【Pyhton报错已解决】`AttributeError: ‘list‘ object has no attribute ‘text‘`

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言:一、问题描述:1.1 报错示例:1.2 报错分析:1.3 解决思路&#xff…

2024 年,数据中台引领企业走向何方?

2024 年,数据中台引领企业走向何方? 前言数据中台引领企业走向何方 前言 在当今数字化时代,数据已成为企业发展的核心资产。随着企业业务的不断扩展和数据量的急剧增长,如何有效地管理和利用数据,成为企业面临的重要挑…

计算机论文七种流程图画法,详细教程来袭!(导师都说我图画的标准)

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号:热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…

Linux学习~树莓派gpio控制(1)

git clone git://git.drogon.net/wiringPi cd wiringPi ./build build 脚本会帮助你编译和安装 wiringPi。 方案B——直接下载 tar xfz wiringPi-xx.tar.gz cd wiringPi-xx ./build wiringPi 包括一套 gpio 命令,使用 gpio 命令可以控制树莓派上的各种接口&…

【物理密度计工作原理图】密度大小与密度计浸没深度关系图

密度大小与密度计浸没深度关系图 绘制图像的好处: 直观展示数据:图形可以直观地展示数据之间的关系,使得理解和分析数据变得更加容易。 便于比较:通过图形可以快速比较不同液体密度下密度计的浸没深度变化。 科学验证&#xff…

我的私人助理 | 办公小浣熊

我的私人助理 | 办公小浣熊 办公小浣熊上手实操业务场景分析一(数据处理)demo 本地数据库操作业务场景分析二(数据处理)Excel 本地文件操作业务场景分析三(数据可视化)业务场景分析四(趋势判断&…

【B题第二套完整论文已出】2024数模国赛B题第二套完整论文+可运行代码参考(无偿分享)

2024数模国赛B题完整论文 摘要: 随着电子产品制造业的快速发展,质量控制与成本优化问题成为生产过程中亟待解决的核心挑战。为应对生产环节中的质量不确定性及成本控制需求,本文结合抽样检测理论和成本效益分析,通过构建数学模型…

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我…

【vulhub】thinkphp5 2-rce 5.0.23-rce 5-rce 漏洞复现

2-rec 1.启动环境 cd /.../vulhub/thinkphp/2-rce # cd进入2-rce靶场文件环境下 docker-compose up -d # docker-compose启动靶场 docker ps -a # 查看开启的靶场信息2.访问192.168.146.136:8080网页 3.构造payload http://192.168.146.136:80…

Openharmony 下载到rk3568实现横屏

前言: Openharmony 源码版本4.1 release 板子:rk3568 1.修改“abilities”中的“orientation”实现横竖屏 entyr->src->module.json5文件里面添加 "orientation": "landscape", 2.修改系统源码属性实现横竖屏切换 通过这…

IDEA取消自动选择光标所在行

今天出现了一个怪事: 当我使用IDEA编写代码的时候,单击下一行或者上一行的时候,莫名其妙它会自己选中一行,导致我要么是回车代码直接没了,要么是代码直接给我搞错位了,还得按ctrlz返回,十分的恶…

【C++】:模板初阶—函数模板|类模板

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山岗! 💫 欢迎来到我的学习笔记! 本文参考博客:一同感受C模版的所带来的魅力 一、泛型编程思想 首先…

代码随想录算法训练营第五十一天 | 99.岛屿数量-深搜 ,99.岛屿数量-广搜 ,100.岛屿的最大面积

目录 99.岛屿数量-深搜 思路 方法一: 深度优先搜索-先判断 方法二:深度优先搜索-终止条件 心得收获 99.岛屿数量-广搜 思路 广度优先搜索 方法一:广度优先搜索 100.岛屿的最大面积 思路 深度优先搜索 广度优先搜索 方法一&am…

c语言——用一维数组输出杨辉三角形

一.代码 #include <stdio.h> int Num[100]; int Hang; int Lie; int a; int Flag; int main() {Lie 1;Hang 1;a 0;while (1) {//列1为1if (Lie 1) {Num[1] 1;Lie;}//数据存到数组里面while (Hang > Lie && Hang ! 2) { if (Hang!Lie) {Flag Num[Lie] …

解锁Web3.0——Scaffold-eth打造以太坊DApp的终极指南

&#x1f680;本系列文章为个人学习笔记&#xff0c;目的是巩固知识并记录我的学习过程及理解。文笔和排版可能拙劣&#xff0c;望见谅。 目录 前言 一、快速部署 1、前期准备&#xff1a; 2、安装项目&#xff1a; ​ 二、配置部署运行环境 1、初始化本地链&#xff1a;…