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

栈的顺序存储实现(C语言)(数据结构与算法)

在这里插入图片描述

  • 栈的顺序存储实现通常使用数组来完成。实现方法包括定义一个固定大小的数组,以及一个指向栈顶的指针。当元素入栈时,指针加一并将元素存储在相应位置;当元素出栈时,指针减一并返回相应位置的元素。

1. 顺序栈定义

#define MaxSize 10 	//定义栈中元素的最大个数
typedef struct
{ElemType data[MaxSize] 	//静态数组存放栈中元素int top;			//栈顶指针
}SqStack;//初始化栈
void InitStack(SqStack &S)
{S.top = -1;  //初始化栈顶指针
}//判断栈空
bool StackEmpty(SqStack S)
{if(S.top == 1) 	//栈空return true;else			//不空return false; 
}void testStack()
{SqStack S;		//声明一个顺序栈(分配空间)//.....后续操作......(增删改查)
}

1.1 进栈操作

#define MaxSize 10 	//定义栈中元素的最大个数
typedef struct
{ElemType data[MaxSize] 	//静态数组存放栈中元素int top;			//栈顶指针
}SqStack;//新元素入栈
bool Push(SqStack &S, ElemType x)
{if(S.top == MaxSize-1)  //栈满 报错  S.top = 9 栈满return false;//下面两句等价于:S.data[++S.top] = x;S.top = S.top+1;     //栈顶指针先+1 , 让指针从-1变为0S.data[S.top] = x;   //新元素入栈 return true;
}

1.2 出栈操作

#define MaxSize 10 	//定义栈中元素的最大个数
typedef struct
{ElemType data[MaxSize] 	//静态数组存放栈中元素int top;			//栈顶指针
}SqStack;//出栈操作
bool Pop(SqStack &S, ElemType &x)
{if(S.top = -1)		//栈空, 报错return false;x = S.data[S.top];   //栈顶元素先出栈, 存储在x中,然后栈顶指针下移一位S.top = S.top -1;	//指针减一,其实只是逻辑上被删除了,栈顶指针向下移动了一位而已return true;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/e67e95eade364b7a8bd1867876ba0045.png)

1.3 读取栈顶元素

//出栈操作
bool Pop(SqStack &S, ElemType &x)
{if(S.top = -1)		//栈空, 报错return false;//以下两行,等价于x = S.data[S.top--];  //先出栈,指针再减一x = S.data[S.top];   //栈顶元素先出栈, 存储在x中,然后栈顶指针下移一位S.top = S.top -1;	//指针减一,其实只是逻辑上被删除了,栈顶指针向下移动了一位而已    与出栈操作的唯一区别return true;
}//读栈操作
bool GetTop(SqStack S, ELemType &x)
{if(S.top == -1)return false;x = S.data[S.top];  //x纪录栈顶元素  只是将此时top指针指向的数据元素,用x返回,并没有top--操作return true;
}

2. 另一种方式

让top刚开始指向 0,判断栈是否为空,就变成了看S.top是否为0

#define MaxSize 10 	//定义栈中元素的最大个数
typedef struct
{ElemType data[MaxSize] 	//静态数组存放栈中元素int top;			//栈顶指针
}SqStack;//初始化栈
void InitStack(SqStack &S)
{S.top = 0;		//初始化栈顶指针
}void testStck()
{SqStack S; //声明一个顺序栈 InitStack(S);//后续操作.......
}//判空操作
bool StackEmpty(SqStack S)
{if(S.top == 0)   //栈空 return true;else		//不空return false;
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关文章:

栈的顺序存储实现(C语言)(数据结构与算法)

栈的顺序存储实现通常使用数组来完成。实现方法包括定义一个固定大小的数组,以及一个指向栈顶的指针。当元素入栈时,指针加一并将元素存储在相应位置;当元素出栈时,指针减一并返回相应位置的元素。 1. 顺序栈定义 #define MaxSi…...

设计模式 -- 观察者模式

说明 author blog.jellyfishmix.com / JellyfishMIX - githubLICENSE GPL-2.0 定义 观察者模式(Observer Design Pattern) 也被称为发布订阅模式(Publish-Subscribe Design Pattern)。在 GoF 的《设计模式》一书中,它的定义是这样的: Define a one-to-many depe…...

Go RabbitMQ简介 使用

RabbitMQ简介 RabbitMQ 是一个广泛使用的开源消息队列系统,它实现了高级消息队列协议(AMQP)标准,为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的,具有高度的可扩展性和可靠性,…...

【面经】Spring框架中用了哪些设计模式

在Spring框架中,主要运用了以下几种设计模式: 工厂模式: Spring beanFactory使用工厂模式在应用程序中管理对象的创建。 通过使用工厂模式,Spring可以将对象的创建与使用分离,降低耦合度。 单例模式: Spr…...

SpringBoot自动配置的原理篇,剖析自动配置原理;实现自定义启动类!附有代码及截图详细讲解

SpringBoot 自动配置 Condition Condition 是在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操作 思考:SpringBoot是如何知道要创建哪个Bean的?比如SpringBoot是如何知道要创建RedisTemplate的?…...

苹果Ios系统app应用程序开发者如何获取IPA文件签名证书时需要注意什么?

今天呢想和大家介绍介绍苹果App开发者如何获取IPA文件签名证书的步骤和注意事项。对于苹果应用程序开发者而言,获取IPA文件签名证书是发布应用程序至App Store的重要步骤之一。签名证书能够确保应用程序的安全性和可信度,并使其能够在设备上正确运行。 …...

算法通关村第七关-黄金挑战二叉树迭代遍历

大家好我是苏麟 , 今天带来二叉树的迭代遍历 . 二叉树的迭代遍历 前序编列 描述 : 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 题目 : LeetCode 二叉树的前序遍历 : 144. 二叉树的前序遍历 分析 : 前序遍历是中左右,如果还有左子树就一…...

2023-11-Rust

学习方案:Rust程序设计指南 1、变量和可变性 声明变量:let 变量、const 常量 rust 默认变量一旦声明,就不可变(immutable)。当想改变 加 mut(mutable) 。 const 不允许用mut ,只能声明常量,…...

iOS代码混淆----自动

先大致解释一下“编译"、"反编译": 编译:就是把千千万万行字符串(也叫代码,或者源文件),变成010101010101(机器码,也叫目标代码) 编译过程:预处理-编译-汇编-链接 我的脚本运行在预处理阶段。 反编…...

对Mysql和应用微服务做TPS压力测试

1.对Mysql 使用工具:mysqlslap工具 使用命令: mysqlslap -uroot pGG8697000!#--auto generate sql -auto generate sql-load typemixed-concurrency100,200 - number of queries1000-iterations10 - number-int-cols7 - number-charcols13auto genera…...

将程序添加至右键菜单

将程序添加至右键菜单 手动导入 如果要将cmder添加至右键菜单。可以通过编写reg注册表方式添加 也可以在路径HKEY_CLASSES_ROOT\Directory\Background\shell中右击添加 创建项commadn 编写reg注册表 [HKEY_CLASSES_ROOT\Directory\Background\shell\cmder]为注册表地址 Wi…...

三板斧的使用、全局配置文件、静态文件的配置、orm介绍

三板斧的使用 【1】HttpResponse 返回字符串类型 【2】render 返回html页面,并且在返回给浏览器之前还可以给html页面传值 【3】redirect 重定向页面 视图函数必须返回一个 HttpResponse 对象 def index(request):print(request)# return HttpResponse("r…...

【编程实践】黑框框里的打字小游戏,但是汇编语言

开始: 在学习王爽的《汇编语言》的过程中,我就真切地体会到编程实践对于理解的帮助。起初我没有安装书中的实验环境,看到100页左右就开始感觉无趣、吃力,看了后面忘前面,差点就要放弃这本书的学习。好在我后来还是装好…...

ElasticSearch的集群、节点、索引、分片和副本

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将Elasticsearch里存储文档数据和关系型数据库MySQL存储数据的概念进行一个类比 ES里的Index可以看做一个库,而Types相当于表,Documents则相当…...

std::cout无法打印uint8_t类型的数据

std::cout在处理uint8_t变量类型的时候默认输出字符&#xff0c;刚好数字0-10对应的ascii字符都是不可打印的 解决&#xff1a; 使用static_cast std::cout << static_cast<int>(time) << std::endl;参考文章&#xff1a;https://blog.csdn.net/weixin_459…...

浅谈泛在电力物联网在智能配电系统应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;在社会经济和科学技术不断发展中&#xff0c;配电网实现了角色转变&#xff0c;传统的单向供电服务形式已经被双向能流服务形式取代&#xff0c;社会多样化的用电需求也得以有效满足。随着物联网技术的发展&am…...

已解决:云原生领域的超时挂载Bug — Kubernetes深度剖析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

概念解析 | 高光谱图像:揭开自然世界的神秘面纱

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:高光谱图像 高光谱图像:揭开自然世界的神秘面纱 Hyperspectral imaging - Wikipedia 背景介绍 我们生活的世界充满了丰富多彩的颜色。这些颜色来源于各种物体反射或吸收不同波长…...

Java类和对象(1)

&#x1f435;本篇文章将会开始对类和对象的第一部分讲解 一、简单描述类和对象 对象可以理解为一个实体&#xff0c;在现实生活中&#xff0c;比如在创建一个建筑之前&#xff0c;要先有一个蓝图&#xff0c;这个蓝图用来描述这个建筑的各种属性&#xff1b;此时蓝图就是类&a…...

百度上海智能研发中心一面

Prometheus告警机制原理 介绍hashmap和concurrentHashmap concurrentHashmap和hashmap如果线程1在遍历 另一个线程对这个map进行修改操作 会发生什么现象 对线程安全的理解 通过什么方法解决线程安全 除了上锁 CAS等还有其他手段 不用锁的话 &#xff08;集合的类设计成一…...

智慧树刷课插件终极指南:三步实现自动播放与智能学习

智慧树刷课插件终极指南&#xff1a;三步实现自动播放与智能学习 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线学习平台设计的Ch…...

DamaiHelper终极指南:如何用Python+Selenium实现大麦网抢票自动化300%效率提升

DamaiHelper终极指南&#xff1a;如何用PythonSelenium实现大麦网抢票自动化300%效率提升 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 在热门演唱会、话剧和体育赛事门票开售的瞬间&#xff0…...

一颗0.89元的芯片,干翻了Intel和飞利浦,这个“51单片机教父“让全球80%的8051都姓了STC

大家好&#xff0c;我是写代码的篮球球痴。之前聊了 Fabrice Bellard、求伯君和瑞芯微的励民&#xff0c;今天换个画风&#xff0c;聊一个搞嵌入式的同学100%接触过的人物——姚永平&#xff0c;STC单片机的创始人。你可能没听过这个名字&#xff0c;但你一定用过他的芯片。STC…...

深度学习图像增强实战:Keras方案与性能优化

1. 图像增强在深度学习中的核心价值当你用500张猫咪图片训练卷积神经网络时&#xff0c;前200个epoch模型表现良好&#xff0c;验证准确率稳步提升到85%——然后突然停滞不前。这不是代码错误&#xff0c;而是典型的数据饥饿症状。图像增强技术就像厨师的调味料&#xff0c;能把…...

AI短剧制作工具源码部署教程,从环境搭建到SAAS多开

温馨提示&#xff1a;文末有资源获取方式随着AI生成技术的快速迭代&#xff0c;短剧创作的门槛正在急剧下降。最近有不少朋友咨询如何搭建一套属于自己的AI短剧创作平台&#xff0c;今天就简单记录一下从环境准备到SAAS多开的完整过程。源码获取方式在源码闪购网。一、环境准备…...

别再只会用Wi-Fi放大器了!手把手教你用COCO天线DIY一个覆盖全屋的高增益全向天线(附材料清单)

别再只会用Wi-Fi放大器了&#xff01;手把手教你用COCO天线DIY一个覆盖全屋的高增益全向天线&#xff08;附材料清单&#xff09; 你是否经历过这样的场景&#xff1a;在卧室刷视频突然卡顿&#xff0c;走到阳台接电话信号断断续续&#xff0c;书房开视频会议总被同事吐槽"…...

Spring Loaded:Java热更新原理与开发效率提升实践

1. 项目概述&#xff1a;一个改变Java开发体验的“热”工具如果你是一个Java开发者&#xff0c;尤其是使用Spring框架的开发者&#xff0c;那么你一定经历过这样的场景&#xff1a;修改了一行业务逻辑代码&#xff0c;满怀期待地刷新浏览器&#xff0c;结果看到的还是旧逻辑。无…...

2026 网络安全全指南:基础防护→实战进阶,新手快速上手

2026网络安全全指南&#xff1a;从基础防护到实战进阶&#xff0c;新手也能快速上手 数字化时代&#xff0c;网络安全已成为企业、个人不可或缺的“安全屏障”&#xff0c;APT攻击、勒索软件、钓鱼攻击等威胁频发&#xff0c;小到个人信息泄露&#xff0c;大到企业核心数据被盗…...

写给做审批系统的你:状态和权限一旦没分层,后面一定越来越乱

Activiti/Flowable 工作流实战&#xff1a;业务状态和流程状态怎么保持一致&#xff1f;再讲清 RBAC 数据权限 工作流项目真正难的地方&#xff0c;往往不是“怎么发起流程”&#xff0c;而是“流程跑起来之后&#xff0c;状态别乱、权限别乱、数据别乱”。 这个项目里我能明显…...

别再只会用kafka-topics.sh了!这5个Kafka命令行实战场景,运维和开发都得会

别再只会用kafka-topics.sh了&#xff01;这5个Kafka命令行实战场景&#xff0c;运维和开发都得会 Kafka作为现代数据管道的核心组件&#xff0c;其命令行工具远不止于基础的topic管理。真正的高手往往能在故障排查、性能调优等关键时刻&#xff0c;通过命令行组合拳快速定位问…...