【数据结构】栈与队列

一、栈

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博客

stack<char> buffer;

buffer.empty()  看是否为空

buffer.push(s[i])将s[i] 插入到栈顶

buffer.pop();  删除栈顶元素

针对这题

给定一个只包括 '('')''{''}''['']' 的字符串 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

玩转C语言——数组初探

一、前言 通过前面的学习&#xff0c;我们已了解C语言的结构变量、分支结构和循环结构。今天&#xff0c;我们一起来认识C语言的另一知识点——数组。先赞后看&#xff0c;养成习惯。 二、数组概念 学习数组&#xff0c;我们要明白数组是什么。在我看来&#xff1a;数组是⼀组…

Linux提权!!

本来是想更新PTH的&#xff0c;但我鸽了&#xff0c;那就来讲讲Linux的提权吧&#xff01;&#xff01;主要是下周我就要学免杀了啦&#xff01;&#xff01;&#xff01; 对于内网&#xff0c;什么难学&#xff1f;&#xff1f;&#xff1f; 是的&#xff0c;确实呢&#xff0…

ISIS默认层级实验简述

ISIS被划分为三个层级&#xff1a;Level 1、Level 2和Level 1-2。 默认情况下&#xff0c;ISIS路由器属于level 1-2,是指同时支持Level 1和Level 2的路由器。路由器既可以在同一个自治系统内部进行路由选择&#xff0c;也可以将路由信息传递到其他自治系统。 实验拓扑图&#…

Redis实战——优惠券秒杀:超卖问题一人一单问题

目录 优惠券秒杀Redis实现全局唯一ID业务场景代码实现&#xff1a; 添加优惠券业务场景新增普通券新增秒杀券测试添加秒杀券 实现秒杀下单业务分析流程代码编写 超卖问题超买场景分析解决方案使用乐观锁 一人一单业务场景解决步骤 集群环境下的并发问题 优惠券秒杀 Redis实现全…

AntV L7深圳智慧城市

本案例使用L7库和Mapbox GL JS构建深圳智慧城市。 文章目录 1. 引入 CDN 链接2. 引入组件3. 创建地图4. 创建场景5. 获取数据6. 创建面图层7. 演示效果8. 代码实现 1. 引入 CDN 链接 <!-- 1.引入CDN链接 --> <script src"https://unpkg.com/antv/l7"><…

Transformer的前世今生 day02(神经网络语言模型

神经网络语言模型 使用神经网络的方法&#xff0c;去完成语言模型的两个问题&#xff0c;下图为两层感知机的神经网络语言模型&#xff1a; 以下为预备概念 感知机 线性模型可以用下图来表示&#xff1a;输入经过线性层得到输出 线性层 / 全连接层 / 稠密层&#xff1a;假…

odoo17开发教程(8):设置界面UI的字段属性

目录 添加字段 给字段设置只读和不可拷贝 给字段添加默认值 保留字段 本节目标&#xff1a;在本文末尾&#xff0c;售价(selling price)应为只读值&#xff0c;卧室数量(bedrooms)和可用日期(availability date)应为默认值。此外&#xff0c;在复制记录时&#xff0c;售价和…

Langchain-chatchat+ChatGlm3-6b部署

我的环境 台式机 内存&#xff1a;16GB 显卡&#xff1a;GTX1060-6G 1. 基础环境准备 1.1. 安装anaconda&#xff0c;创建环境python版本3.11 conda create -n chatglm3 python3.11 conda activate chatglm3 1.2. 搭建cuda环境 # 查看cuda版本&#xff0c;版本是CUDA V…

cmd常用指令

cmd全称Command Prompt&#xff0c;中文译为命令提示符。 命令提示符是在操作系统中&#xff0c;提示进行命令输入的一种工作提示符。 在不同的操作系统环境下&#xff0c;命令提示符各不相同。 在windows环境下&#xff0c;命令行程序为cmd.exe&#xff0c;是一个32位的命令…

sqlite 常见命令 表结构

在 SQLite 中&#xff0c;将表结构保存为 SQL 具有一定的便捷性和重要性&#xff0c;原因如下 便捷性&#xff1a; 备份和恢复&#xff1a;将表结构保存为 SQL 可以方便地进行备份。如果需要还原或迁移数据库&#xff0c;只需执行保存的 SQL 脚本&#xff0c;就可以重新创建表…

Mybatis-xml映射文件与动态SQL

xml映射文件 动态SQL <where><if test"name!null">name like concat(%,#{name},%)</if><if test"username!null">and username#{username}</if></where> <!-- collection&#xff1a;遍历的集合--> <!-- …

问题解决:关于tomcat无法连接问题的解决

安装tomcat并配置环境变量 下载tomcat并安装 首先去tomcat官方网站,下载tomcat 进入tomcat官方网站之后&#xff0c;查看jdk应该对应的tomcat版本&#xff0c;点击图示的按钮 点击完毕之后&#xff0c;可以看到下述的页面 图中的表格可以看到对应的jdk版本与tomcat的版本之…

基于sortablejs实现拖拽element-ui el-table表格行进行排序

可以用原生的dragstart、drag、dragend、dragover、drop、dragleave实现这个效果&#xff0c;但是有现成的轮子就不要重复造了&#xff0c;看效果&#xff1a; <template><el-table :class"$options.name" :data"tableData" ref"table"…

【数据结构入门】顺序表详解(增删查改)

目录 顺序表的基本概念 动态顺序表的实现 初始化 插入 尾插法 头插法 指定位置之前插入 删除 尾删法 头删法 指定位置删除 查找 销毁 顺序表的基本概念 什么是顺序表&#xff1f; 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般…

树与二叉树(数据结构)

本篇博客讲解 树与二叉树&#xff0c;后续会继续讲解堆 —————————————————————— 1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看…

浅谈C++的函数重载

今天我们来谈谈C的函数重载&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;对于函数重载&#xff0c;我们首先需要理解几个问题&#xff1a; 1、什么是函数重载 &#xff1f;2、函数重载需要注意什么 &#xff1f;3、为什么C语言不支持函数重载&#xff0c;而C支持 &…

Unity在UGUI上通过绘制网格顶点自由画线

该插件的实现是使用UI组件的绘图API来动态生成和修改几何形状&#xff0c;可自由动态更改画线的粗细、拐角圆滑度、颜色&#xff0c;自由增减节点&#xff0c;不额外增加gameobject&#xff0c;并且在原生的UGUI上以ScreenSpace-Overlay的状态下&#xff0c;显示效果如下所示 …

【PyTorch】基础学习:一文详细介绍 load_state_dict() 的用法和应用

【PyTorch】基础学习&#xff1a;一文详细介绍 load_state_dict() 的用法和应用 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#…

【AI】Ubuntu系统深度学习框架的神经网络图绘制

一、Graphviz 在Ubuntu上安装Graphviz&#xff0c;可以使用命令行工具apt进行安装。 安装Graphviz的步骤相对简单。打开终端&#xff0c;输入以下命令更新软件包列表&#xff1a;sudo apt update。之后&#xff0c;使用命令sudo apt install graphviz来安装Graphviz软件包。为…

使用 GitHub Actions 通过 CI/CD 简化 Flutter 应用程序开发

在快节奏的移动应用程序开发世界中&#xff0c;速度、可靠性和效率是决定项目成功或失败的关键因素。持续集成和持续部署 (CI/CD) 实践已成为确保满足这些方面的强大工具。当与流行的跨平台框架 Flutter 和 GitHub Actions 的自动化功能相结合时&#xff0c;开发人员可以创建无…