栈--顺序栈的基本操作(对小白友好)

文章目录

  • 栈的基本操作
  • 栈的定义
  • 栈的初始化
  • 栈的判空
  • 进栈
  • 出栈
  • 读取栈顶元素
  • 销毁栈
  • 全部源码

栈的基本操作

  以下代码中,默认初始化的top为-1。

栈的定义

#define MaxSize 50 //定义栈中元素最大个数

typedef struct {
	int data[MaxSize]; //存放栈中元素
	int top;         //栈顶指针
}SqStack;

栈的初始化

  将top指指针指向-1.

void InitStack(SqStack &s)
{
	s.top = -1;
}

在这里插入图片描述

栈的判空

bool StackEmpty(SqStack s)
{
	if (s.top == -1)
		return true;
	cout << "栈不为空";
	return false;
}

进栈

  理解这里的指针先加1,在入栈。

bool Push(SqStack& s,int e)
{
	if (s.top == MaxSize - 1)
		return false;   //栈满
	s.data[++s.top] = e; //指针先加1,在入栈
	return true;
}

在这里插入图片描述

出栈

  先出栈,指针在减1。

bool Pop(SqStack& s, int &e)
{
	if (s.top == -1)
		return false; //栈空,报错
	e = s.data[s.top--]; //数据e先出栈,指针在减1
	return false;
}

在这里插入图片描述

读取栈顶元素

bool GetTop(SqStack s, int &e)
{
    //判断栈是否为空
	if (s.top == -1)
		return false;
	e = s.data[s.top];
	return true;
}

销毁栈

bool DestoryStack(SqStack& s)
{
	s.top == -1;
	return true;
}

全部源码

#include<iostream>
using namespace std;

#define MaxSize 50 //定义栈中元素最大个数

typedef struct {
	int data[MaxSize]; //存放栈中元素
	int top;         //栈顶指针
}SqStack;

//初始化
void InitStack(SqStack &s)
{
	s.top = -1;
}

//判断栈是否为空
bool StackEmpty(SqStack s)
{
	if (s.top == -1)
		return true;
	cout << "栈不为空";
	return false;
}


//进栈
bool Push(SqStack& s,int e)
{
	if (s.top == MaxSize - 1)
		return false;   //栈满
	s.data[++s.top] = e;
	return true;
}

//出栈
//数据还残留在栈中,只是在逻辑上被删除
bool Pop(SqStack& s, int &e)
{
	if (s.top == -1)
		return false; //栈空,报错
	e = s.data[s.top--]; //数据e先出栈,指针在减1
	return false;
}

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

//栈的遍历
void PrintStack(SqStack s)
{
	if (s.top == -1)
		return;
	for (int i = 0; i <= s.top; ++i)
	{
		cout << s.data[i]<<" ";
	}
}

//销毁栈
bool DestoryStack(SqStack& s)
{
	s.top == -1;
	return true;
}
int main()
{
	SqStack s;

	//初始化
	InitStack(s);

	//判断栈是否为空
	StackEmpty(s);

	//进栈
	cout << "输入进栈的元素:";
	int e = 0;
	cin >> e;
	while (e != 9999)
	{
		Push(s, e);
		cout << "输入进栈的元素:";
		cin >> e;
	}

	//出栈
	Pop(s, e);
	cout << "出栈的元素为:" << e<<endl;

	//读取栈顶元素
	GetTop(s, e);
	cout << "栈顶的元素为:" << e << endl;

	//打印全部元素
	PrintStack(s);
	//销毁栈
	DestoryStack(s);
	return 0;
}

在这里插入图片描述

对你有帮助,点个关注吧!!!

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

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

相关文章

Linux基本常用命令大全(二)

五、查找命令 5.1 grep grep命令是一种强大的文本搜索工具 使用实例&#xff1a; ps -ef | grep sshd 查找指定ssh服务进程 ps -ef | grep sshd | grep -v grep 查找指定服务进程&#xff0c;排除gerp身 ps -ef | grep sshd -c 查找指定进程个数 5.2 find find命令在目录…

IOS-生命周期-Swift

目录 App生命周期应用状态未运行——Not running未激活——Inactive激活——Active后台——Backgroud挂起——Suspended 关系图生命周期方法相关方法注意在其他地方监听 ViewController生命周期UIView生命周期 App生命周期 应用状态 App主要有五种状态&#xff0c;分别是&…

从CNN ,LSTM 到Transformer的综述

前情提要&#xff1a;文本大量参照了以下的博客&#xff0c;本文创作的初衷是为了分享博主自己的学习和理解。对于刚开始接触NLP的同学来说&#xff0c;可以结合唐宇迪老师的B站视频【【NLP精华版教程】强推&#xff01;不愧是的最完整的NLP教程和学习路线图从原理构成开始学&a…

【C++杂货铺】三分钟彻底搞懂函数重载

目录 &#x1f308;前言 &#x1f4c1; 缺省参数 &#x1f4c2;概念 &#x1f4c2;分类 &#x1f4c2; 注意事项 &#x1f4c1; 函数重载 &#x1f4c2;概念 &#x1f4c2;实现原理 &#x1f4c1; 总结 &#x1f308;前言 欢迎收看本期【C杂货铺】&#xff0c;这期内容…

[亲测有效]CentOS7下安装mysql5.7

前言 近期项目需要搭配mysql一起存储相关数据&#xff0c;但对mysql的版本有要求&#xff0c;于是在服务器搭建了mysql5.7&#xff0c;顺便记录一下搭建步骤和踩坑解决步骤。 目录 前言 一、清除旧安装包 二、安装YUM 三、使用yum命令即可完成安装 四、重新设置密码 五、…

gradle打包分离依赖jar

正常打包的jar是包含项目所依赖的jar包资源&#xff0c;而且大多数场景下的依赖资源是不会频繁的变更的&#xff0c;所以实际把项目自身jar和其所依赖的资源分离可以实现jar包瘦身&#xff0c;减小上传的jar包总大小&#xff0c;能实现加速部署的效果 一 原本结构 二 配置buil…

基于Python实现人脸识别相似度对比

目录 引言背景介绍目的和意义 人脸识别的原理人脸图像获取人脸检测与定位人脸特征提取相似度计算 基于Python的人脸相似度对比实现数据集准备人脸图像预处理特征提取相似度计算 引言 背景介绍 人脸识别技术是一种通过计算机对人脸图像进行分析和处理&#xff0c;从而实现自动识…

UML中的实现关系

在UML&#xff08;统一建模语言&#xff09;中&#xff0c;“实现”关系是指一个类&#xff08;实现类&#xff09;实现一个接口或抽象类的方法的情况。这种关系通常用于指定类如何实现某个特定的接口规范。 UML中的实现关系 在UML类图中&#xff0c;实现关系用一条带有空心箭…

学生公寓智能控电管理的功能和管理意义

石家庄光大远通电气有限公司学生公寓智能控电管理系统是由硬件和软件组成的系统&#xff0c;用于控制和管理学生公寓中的电力使用。 一、用户管理 智能控电管理系统具备用户管理功能&#xff0c;可以对学生的个人信息进行统一管理。系统会记录学生的姓名、学号、宿舍号等基本信…

MySQL InnoDB 底层数据存储

InnoDB 页记录Page Directory记录迁移 页 是内存与磁盘交互的基本单位&#xff0c;16kb。 比如&#xff0c;查询的时候&#xff0c;并不是只从磁盘读取某条记录&#xff0c;而是记录所在的页 记录 记录的物理插入是随机的&#xff0c;就是在磁盘上的位置是无序的。但是在页中…

Yuliverse:引领区块链游戏新篇章!

数据源&#xff1a;Yuliverse Dashboard 作者&#xff1a;lesleyfootprint.network 什么是 Yuliverse Yuliverse 是一款元宇宙游戏的先锋&#xff0c;是一款主打 Explore to earn 和 Social to earn 的链游。 这是一款能让你边玩边赚钱的免费区块链游戏&#xff0c;得到 LI…

前端开发如何在自己项目中引用iconfont图标

前端开发如何在自己项目中引用iconfont图标&#xff01;下面展示一下&#xff0c;详细的引入步骤。 第一步&#xff0c;您需要注册一个会员账号登录进入。创建一个项目。 可以使用其他的平台账号登录&#xff0c;我选了是微信登录&#xff0c;不过他们还会要求你输入手机号&am…

牛客网-----跳石头

题目描述&#xff1a; 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行&#xff0c;河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间&#xff0c;有N块岩石(不含起点和终点的岩石)。在比赛过程中&#xff0…

网络防御保护1

网络防御保护 第一章 网络安全概述 网络安全&#xff08;Cyber Security&#xff09;是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断 随着数…

Oracle Linux 8.9 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

Linux下软件安装的命令【RPM,YUM】及常用服务安装【JDK,Tomcat,MySQL】

Linux下软件安装的命令 源码安装 以源代码安装软件&#xff0c;每次都需要配置操作系统、配置编译参数、实际编译&#xff0c;最后还要依据个人喜好的方式来安装软件。这个过程很麻烦很累人。 RPM软件包管理 RPM安装软件的默认路径: 注意&#xff1a; /etc 配置文件放置目录…

精益生产咨询背后的秘密:企业如何实现价值最大化

精益生产&#xff0c;起源于丰田生产系统&#xff0c;是一种集中于削减浪费、优化流程、提升顾客价值的生产方法。它的核心在于确保每一步生产过程都能为顾客创造价值。以下是实现精益生产咨询的详细步骤&#xff1a; 1.确定客户价值 一切从顾客需求出发。企业需深入理解顾客…

x-cmd pkg | dasel - JSON、YAML、TOML、XML、CSV 数据的查询和修改工具

目录 简介首次用户快速实验指南基本功能性能特点竞品进一步探索 简介 dasel&#xff0c;是数据&#xff08;data&#xff09;和 选择器&#xff08;selector&#xff09;的简写&#xff0c;该工具使用选择器查询和修改数据结构。 支持 JSON&#xff0c;YAML&#xff0c;TOML&…

如何正确利用点对点传输工具来传输文件

P2P技术作为一种创新的数据交换机制&#xff0c;近年来已经获得了广泛的关注和应用。这种技术通过直接在用户之间建立连接&#xff0c;绕过了传统的中心服务器架构&#xff0c;从而在数据传输效率和速度上实现了显著提升。然而&#xff0c;正如硬币有两面&#xff0c;P2P技术同…

Leetcode—23.合并 K 个升序链表【困难】

2023每日刷题&#xff08;八十三&#xff09; Leetcode—23.合并 K 个升序链表 算法思想 用容量为K的最小堆优先队列&#xff0c;把链表的头结点都放进去&#xff0c;然后出队当前优先队列中最小的&#xff0c;挂上链表&#xff0c;&#xff0c;然后让出队的那个节点的下一个…
最新文章