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

【数据结构】栈与队列

一、栈

1.基本概念

栈是只能在一段进行插入或者删除的线性表

出栈进栈 只能在栈顶进行

三个术语:栈底,空栈,栈顶   字面理解即可 

栈的基本操作:

创 销 增 删 查

2.顺序栈的实现

(1)初始化

#define max 10
typedef struct 
{int data[max];int top;  //记录数组下标
}sqstack;
//初始化
void inite(sqstack& s)
{s.top = -1;
}  

2.入栈

//入栈
bool push(sqstack& s, int x)
{if (s.top == max - 1)  //栈满 报错return false;s.top = s.top + 1;  //指针加一s.data[s.top] = x;return true;
}

3.出栈

//出栈
bool pop(sqstack& s, int& x)
{if (s.top == -1)return false;x = s.data[s.top]; //栈顶元素先出栈s.top = s.top - 1;return true;
}

4.读取栈顶元素

//读取栈顶元素
bool getpop(sqstack& s, int& x)
{if (s.top == -1)return false;x = s.data[s.top];return true;
}

【数据结构】栈的链式实现和操作(创建栈,入栈,出栈,获取栈顶元素)_任务分析:链式栈的入栈操作先创建新结点node,再将新结点node指向栈顶指针,最-CSDN博客

s.empty();         //如果栈为空则返回true, 否则返回false;
s.size();          //返回栈中元素的个数
s.top();           //返回栈顶元素, 但不删除该元素
s.pop();           //弹出栈顶元素, 但不返回其值
s.push();          //将元素压入栈顶

针对这题

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false
class Solution {
public:bool isValid(string s) {stack<char> buffer;for (int i=0;i<s.size();i++){if (buffer.empty()){buffer.push(s[i]);continue;}char top=buffer.top();if (s[i]=='}'&&top=='{'){buffer.pop();continue;}else if (s[i]==']'&&top=='['){buffer.pop();continue;}else if (s[i]==')'&&top=='('){buffer.pop();continue;}buffer.push(s[i]);}return (buffer.empty());}
};

二、队列 

队列是前段插入,后端删除的线性表

看成一种循环线性表

判断元素个数:
(rear+max-front)%max 

1.初始化

#define max 10
typedef struct
{int data[max];int front; int rear;
}sq;

2.入队

//入队
bool enq(sq& q, int x)
{if ((q.rear + 1) % max == q.front)  //队列已满return false;q.data[q.rear] = x;q.rear = (q.rear + 1)%max;return true;
}

3.出队

//出队
bool deq(sq& q, int &x)
{if (q.rear=q.front)  //队列为空return false;x = q.data[q.front];q.front = (q.front + 1) % max;  //队头指针向后移一位return true;
}

4.查

//查 获取队头元素的值
bool get(sq& q, int& x)
{if (q.rear = q.front)  //队列为空return false;x = q.data[q.front];return true;
}

相关文章:

  • transfomer知识点梳理
  • 工业相机采图方式、图像格式(BYTE、HObject和Mat)转换
  • 队列的实现(C语言链表实现队列)
  • JS+CSS3点击粒子烟花动画js特效
  • Spark与flink计算引擎工作原理
  • MySQL存储引擎的区别与选择
  • 【数据可视化】使用Python + Gephi,构建中医方剂关系网络图!
  • 微服务鉴权的几种实现方案
  • 记录解决问题--activiti8.2 流程图图片由png改为svg前端不显示图片问题
  • 20240323
  • 算法 之 排序算法
  • LeetCode第一天(495.提莫攻击)
  • 史上最详细的CrossOver24激活和使用教程(附网盘激活码)
  • excel 破解 保护工作簿及保护工作表
  • 树,二叉树与堆
  • 收藏网友的 源程序下载网
  • 30天自制操作系统-2
  • dva中组件的懒加载
  • HTTP--网络协议分层,http历史(二)
  • vue-cli3搭建项目
  • windows下mongoDB的环境配置
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 创建一个Struts2项目maven 方式
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • ​人工智能书单(数学基础篇)
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (C++17) std算法之执行策略 execution
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (接口自动化)Python3操作MySQL数据库
  • (九)One-Wire总线-DS18B20
  • (十六)一篇文章学会Java的常用API
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 使用 XPath 来读写 XML 文件
  • .NET框架
  • /proc/vmstat 详解
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @JoinTable会自动删除关联表的数据
  • [ C++ ] STL---string类的模拟实现
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [2023-年度总结]凡是过往,皆为序章
  • [Android Pro] AndroidX重构和映射
  • [Android Studio 权威教程]断点调试和高级调试
  • [Angular] 笔记 21:@ViewChild
  • [asp.net core]project.json(2)
  • [bzoj1912]异象石(set)
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [Contiki系列论文之2]WSN的自适应通信架构
  • [CQOI 2010]扑克牌
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • [EFI]Atermiter X99 Turbo D4 E5-2630v3电脑 Hackintosh 黑苹果efi引导文件
  • [HackMyVM]靶场Boxing
  • [HDOJ4911]Inversion
  • [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句