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

文章目录

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

栈的基本操作

  以下代码中,默认初始化的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先出栈,指针在减1return 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先出栈,指针在减1return 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.hqwc.cn/news/424475.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++多态语法剖析

C的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。这三个特性中&#xff0c;我认为最难理解和最难学习的就是多态。这篇文章总结下多态的一些概念和语法。 多态顾名思义就是多种形态的表现手法。也就是让我们的功能能够因人而异的变化。 一.多态的两种类型 多态…

TortoiseSVN源码安装与迁移全攻略

一、前言 随着版本控制系统的普及&#xff0c;越来越多的开发者和团队开始使用SVN&#xff08;Subversion&#xff09;来管理代码。本文将详细介绍TortoiseSVN的源码安装及迁移过程&#xff0c;帮助您轻松掌握这一版本控制工具。 二、TortoiseSVN源码安装 依赖环境安装&…

【C语言进阶】预处理详解

引言 对预处理的相关知识进行详细的介绍 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言 预定义符号 #define定义常量 #define定义宏 带有副作用的宏参数 宏替换的规则 …

京东数据分析:2023年度厨房小电行业分析(厨房小电市场未来发展趋势)

酸奶机、煮蛋器、豆浆机、空气炸锅、养生壶……这些外观小巧、功能丰富、价格相对便宜的小家电&#xff0c;在过去几年间一度掀起一股“种草”风潮&#xff0c;很多年轻人认为这是精致“懒人生活”的代名词。 而在后疫情时代&#xff0c;人们的各类消费明显渐趋理性&#xff0…

深入理解多线程编程和 JVM 内存模型

目录 一、什么是多线程编程 二、JVM介绍 三、 JVM 内存模型 一、什么是多线程编程 多线程编程是一种编程方式&#xff0c;它允许程序在同一时间内执行多个线程或任务。线程是程序执行的最小单位&#xff0c;多线程编程可以将任务拆分为多个线程&#xff0c;每个线程独立执行…

如何查找设备的公共IP地址?这里提供三种方法

每个以某种方式连接到互联网的设备都有一个IP地址。这是你的设备使用的唯一标识符,可以被互联网或本地网络上的其他设备识别。 如果你使用的是直接连接到互联网的智能手机或平板电脑等设备,你的公共IP地址将由你的移动运营商直接分配。 另一方面,如果你使用的是连接到本地…

C++: vector

目录 1.vector的介绍 2.vector常用的接口 1.vector构造 2.迭代器iterator的使用 3.vector空间增长 4.vector的增删改查 3.vector模拟实现 如果在reverse时使用memcpy会怎么样&#xff1f; 1.vector的介绍 C中的vector是一个动态数组容器&#xff0c;可以存储任意类型的…

数据库安装

数据库相关概念 在这一部分&#xff0c;我们先来讲解三个概念&#xff1a;数据库、数据库管理系统、SQL。 数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase&#xff08;DB&#xff09;数据库管 理系统操纵和管理数据库的大型软件DataBase Management System…

【MATLAB基础绘图第20棒】云雨图

MATLAB绘制云雨图 云雨图(Raincloud plots)MATLAB绘制云雨图横向云雨图竖向云雨图 参考 云雨图(Raincloud plots) 云雨图&#xff08;Raincloud plots&#xff09;其实是可以看成核密度估计曲线图、箱形图和抖动散点图的组合图&#xff0c;清晰、完整、美观地展示了所有数据信…

jdk的安装和Tomcat的安装

jdk的安装 双击jdk&#xff0c;然后一路下一步 公共JRE可以关闭&#xff0c;没多大用&#xff0c;反而会占用内存 计算机–>属性–>高级系统设置–>环境变量 系统变量–新建 JAVA_HOMEjdk的存放路径 修改path 在path的最后面添加&#xff08;&#xff1b;%JAVA_H…

云原生全栈监控解决方案(全面详解)

【作者】JasonXu 前言 当前全球企业云化、数字化进程持续加速&#xff0c;容器、微服务等云原生技术在软件架构中快速渗透&#xff0c;IT 架构云化、复杂化持续驱动性能监控市场。企业云化、数字化持续转型&#xff0c;以及为了考虑系统的弹性、效率&#xff0c;企业软件开发中…

开源的测试平台快2千星了,能带来多少收益呢

最近看了下自己去年初开源的测试平台&#xff0c;star一起算的话也到1.7k了&#xff1a; 做开源的初心一方面是想把自己的理解和思想展示出来&#xff0c;另一方面是想进一步打造个人IP&#xff0c;提升影响力&#xff08;其实这个想法很早之前就有了&#xff0c;计划过无数次但…