当前位置: 首页 > news >正文

【数据结构入门训练DAY-19】总结数据结构中的栈

文章目录

  • 前言
  • 一、栈的思想
  • 二、栈的解题思路
  • 结语

前言

本次训练内容:

  1. 栈的复习。
  2. 总结栈的基本操作

一、栈的思想

        在数据结构中,栈是一种很常见的算法。栈——就像你往桶里放东西似的,要取出桶内的物体就得先把桶顶的物品取出来,再依次取到桶底,所以它遵循的原则是“先进后出”;而后栈的使用也非常广泛,例如在函数调用中用于保存局部变量、在表达式求值中用于保存操作数等。

二、栈的解题思路

        栈的操作有:创建新的栈,栈的入栈操作,栈的出栈操作,判断栈空等。下面我将一一分享我对栈操作的“公式”。

        我喜欢先建立一个栈的结构体。例如下面的代码:

typedef long long SElemType;
typedef struct SqStack {//创建栈的结构体SElemType e;struct SqStack *next;
} SqStack;

        建立栈的结构体后,我就开始创建空的新栈。例如下面的代码:

void InitStack(SqStack* &S) {//创建空栈S = nullptr;
}

        创建好空栈后意味着我们可以对它进行添加和删除操作了。首先我先写入栈操作;栈未满时,则可以插入元素,将栈顶指针上移,并再将需要插入的元素赋值给栈顶。例如下面的代码:

bool Push(SqStack &S, SElemType e) {//入栈操作S.next++;S.data[S.next] = e;return true;
}

        写完入栈操作接着的就是出栈操作。它的思想就是,先判断非空,栈在非空的情况下,栈顶指针依次下移,栈内元素不断被弹出,直到栈空。例如下面的代码:

bool Pop(SqStack* &S, SElemType &e) {//出栈操作if (S == nullptr) {return false;}SqStack* temp = S;e = temp->e;S = S->next;delete temp;return true;
}

        紧接的我们跟上判断栈空的操作。它的操作书写就更简单,只需要判断栈是否等于null即可。例如下面的代码:

bool SqStackEmpty(SqStack* S) {//判断是否为空栈return S == nullptr;
}

        然后还有一个就是判断栈顶元素的。它的思想就是让栈指针保持指向栈顶即可。

int Top(SqStack* &S )
{int t; //为判断是否为栈顶元素做准备 if (s.top == -1) return -1; //栈空t= s.data[s.top]; //栈非空,不断更新指针位置return t; //返回栈顶的值
}

结语

        今晚算是对这段时间写栈的题目进行的一次总结。在复习使用栈的操作时,我也经常使用STL里的类似逻辑进行拓展学习。STL的使用效率往往比原理快,但是原理是对栈概念的理解和支撑。所以我在使用高效率的代码时,就也会把原理逻辑补充上去,方便往后复习能更好的理解。

http://www.xdnf.cn/news/70579.html

相关文章:

  • 柔和的风光人像静物摄影Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • LX2-编译及下载程序
  • shardingsphere启动报mode错误
  • 软考中级数据库系统工程师学习资料分享
  • 控制系统的结构和关键指标
  • 02_Flask是什么?
  • 【大模型】Browser-Use AI驱动的浏览器自动化工具
  • ORB-SLAM_地图点优化_固定位姿_g2o定义_雅可比矩阵推导
  • Vscode开发STM32标准库
  • 实践项目开发-hbmV4V20250407-项目架构设计
  • 多线程累加探索思考
  • 在统信UOS 1060上实现自动关机
  • Java并发:资源共享
  • 在CSDN的1095天(创作纪念日)
  • ECMAScript
  • 网络结构及安全科普
  • 【MySQL】表的约束(主键、唯一键、外键等约束类型详解)、表的设计
  • 前端工程化:构建高质量 Web 项目的现代方法论
  • Keil5没有stm32的芯片库
  • 反转字符串
  • 【CUDA 】第5章 共享内存和常量内存——5.2 共享内存的数据分布(2)
  • Nacos 客户端 SDK 的核心功能是什么?是如何与服务端通信的?
  • 【集群IP管理分配技术_DHCP】二、DHCP核心功能与技术实现
  • Openwrt 编译树莓派4B固件
  • 【C++】入门基础知识(下)
  • JAVA实战开源项目:医院资源管理系统 (Vue+SpringBoot) 附源码
  • leetcode day 35 01背包问题 416+1049
  • buildadmin 自定义单元格渲染
  • 【STM32单片机】#10.5 串口数据包
  • 在线打开查看cad免费工具dwg, dxf格式工具网站