C++实现顺序栈相关操作代码
#include<iostream>
#include<cstdlib>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Elemtype;
typedef struct
{
Elemtype* base;//栈底指针
Elemtype* top;//栈顶指针
int stacksize;//栈可用的最大容量
}Sqstack;
Status Initstack(Sqstack& s);//初始化顺序栈
Status Creatstack(Sqstack& s);//创建顺序栈
Status Insertstack(Sqstack& s, int x);//向顺序栈中插入元素
Status Popstack(Sqstack& s);//删除栈顶元素
Status Getstack(Sqstack s);//获取栈顶元素
Status Lenstack(Sqstack s);//顺序栈的长度
Status Printstack(Sqstack s);//输出顺序栈
int main(void)
{
Sqstack s;
int x;
int k;
do {
cout << "\n*****顺序栈相关操作*****";
cout << "\n1.初始化一个空栈";
cout << "\n2.随机创建一个包含正整数值的栈";
cout << "\n3.将一个数x插入到栈顶";
cout << "\n4.将栈顶元素弹出,并输出元素的值";
cout << "\n5.输出栈顶元素";
cout << "\n6.求栈的长度";
cout << "\n7.输出从栈顶到栈底的元素";
cout << "\n0.结束相关操作";
cout << "\n输入想要进行相关操作的序号:";
cin >> k;
switch (k)
{
case 1:
{
if (Initstack(s))
cout << "初始化成功。\n" << endl;
else
cout << "初始化失败。\n" << endl;
break;
}
case 2:
{
if (Creatstack(s))
{
cout << "创建成功。\n";
}
else
{
cout << "创建失败。\n";
}
break;
}
case 3:
{
cout << "输入想要插入元素的数值x为:";
cin >> x;
if (Insertstack(s, x)) cout << "插入成功。\n";
else cout << "插入失败。\n";
break;
}
case 4:
{
if (Popstack(s)) cout << "删除成功。\n";
else cout << "删除失败。\n";
break;
}
case 5:
{
if (Getstack(s)) cout << "输出成功。\n";
else cout << "输出失败。\n";
break;
}
case 6:
{
if (Lenstack(s)) cout << "长度获取成功。\n";
else cout << "长度获取失败。\n";
break;
}
case 7:
{
if (Printstack(s)) cout << "全部输出成功。\n";
else cout << "全部输出失败。\n";
break;
}
}
} while (k != 0);
return OK;
}
Status Initstack(Sqstack& s)
{
s.base = new Elemtype[MAXSIZE];//为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
if (!s.base) exit(OVERFLOW);//存储分配失败
s.top = s.base;//top初始化为base,空栈
s.stacksize = MAXSIZE;//栈的最大容量为MXAXSIZE
return OK;
}
Status Creatstack(Sqstack& s)
{
int k = 0;
int len = 0;
cout << "\n栈包含的正整数len为:";
cin >> len;
cout << "\n输入正整数值为:";
for (int i = 0; i < len; i++)
{
cin >> k;
*(s.top) = k;
s.top++;//非空时,top始终是指向栈顶元素的上一个位置*s.top++
}
return OK;
}
Status Insertstack(Sqstack& s, int x)
{
if (s.top - s.base == s.stacksize) return ERROR;//判断栈是否满
*(s.top) = x;
s.top++;
cout << "插入元素为" << x << endl;
return OK;
}
Status Popstack(Sqstack& s)
{
if (s.base == s.top) return ERROR;//判断栈是否为空
s.top--;
int i = 0;
i = *(s.top);
cout << "删除元素为" << i << endl;
return OK;
}
Status Getstack(Sqstack s)
{
if (s.base == s.top) return ERROR;
int k = 0;
k = *(s.top - 1);
cout << "输出的栈顶元素为" << k << endl;
return OK;
}
Status Lenstack(Sqstack s)
{
int k = 0;
k = s.top - s.base;
cout << "栈的长度为" << k << endl;
return OK;
}
Status Printstack(Sqstack s)
{
if (s.base == s.top) return ERROR;//空栈
for (int k = 0; k < s.top - s.base; k++)
{
cout << *(s.top - k - 1) << " ";
}
cout << endl;
return OK;
}
C++实现顺序栈相关操作代码的更多相关文章
- 数据结构(C语言版)顺序栈相关算法的代码实现
这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...
- java虚拟机栈 相关操作
针对JVM虚拟栈 和栈帧的操作 虚拟机栈: 栈元素是栈帧.方法调用,栈帧入栈,反之出栈. 栈帧:一个方法的运行空间. 1.局部变量表:方法定义的局部变量.方法的参数存在该表. 实例方法中有个隐含参数“ ...
- java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作
项目源码下载:http://download.csdn.net/detail/liangrui1988/6720047 效果图: 相关代码: test1 package com.mail; impor ...
- 简单用数组模拟顺序栈(c++版)适合新手
**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...
- 简单用数组模拟顺序栈(c++)
**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...
- 栈(顺序栈)----C语言
栈 栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行插入和删除操作,允许操作的一端称为栈顶,不允许操作的称为栈底 顺序栈(顺序结构) 顺序栈:用一段连续的存储空间来存储栈中的数据 ...
- 顺序栈与两栈共享空间-C语言实现
栈是一种只能允许在栈顶插入数据与删除数据的数据结构,其实这就是一种特殊的线性表,特殊在 只能在表尾进行增减元素,上代码 #include <stdio.h> #define MAXSIZE ...
- 利用JAVA API远程进行HDFS的相关操作
学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...
- Java的顺序栈和链式栈
栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...
- HDFS文件目录操作代码
分布式文件系统HDFS中对文件/目录的相关操作代码,整理了一下,大概包括以下部分: 文件夹的新建.删除.重命名 文件夹中子文件和目录的统计 文件的新建及显示文件内容 文件在local和remote间的 ...
随机推荐
- Spark详解(09) - Spark调优
Spark详解(09) - Spark调优 Spark 性能调优 常规性能调优 常规性能调优一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的 ...
- Redis缓存何以一枝独秀?——从百变应用场景与热门面试题中感受下Redis的核心特性与使用注意点
大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 作为<深入理解缓存原理与实战设计 ...
- MySQL 索引的创建、删除
MySQL中索引的创建有三种方法,索引的删除有两种方法. 一.创建索引 (1)使用create index # 1.创建普通索引 create index 索引名 on 表名 (列名[(限制索引长度) ...
- 反射概述-获取字节码Class对象的三种方式
反射概述 判定结果∶*红色:失败*绿色:成功*一般我们会使用断言操作来处理结果*Assert.assertEquals(期望的结果,运算的结果);补充∶*Before:*修饰的方法会在测试方法之前被自 ...
- dapr本地托管的服务调用体验与Java SDK的Spring Boot整合
1 简介 之前在文章<dapr入门与本地托管模式尝试>中介绍了dapr和本地托管,本文我们来介绍如果在代码中使用dapr的服务调用功能,并把它整合到Spring Boot中. Dapr服务 ...
- 【分析笔记】LVGL v8.2.0 使用 freetype 概率性无显示的问题
使用目前最新的 Releases 版本 LVGL v8.2.0 ,移植好 freetype2 后测试,发现每次启动程序时会高概率出现屏幕显示全白色背景,无任何内容的问题. 打开日志开关,出现问题时会有 ...
- 手动计算ROC-AUC
ROC(全称为Receiver operating characteristic,意为受试者特征曲线)是一个二维平面空间中一条曲线,而AUC则是曲线下方面积(Area Under Curve)的计算结 ...
- ASP.NET Core - IStartupFilter 与 IHostingStartup
1. IStartupFilter 上面讲到的方式虽然能够根据不同环境将Startup中的启动逻辑进行分离,但是有些时候我们还会可以根据应用中的功能点将将一系列相关中间件的注册封装到一起,从 St ...
- vue3 ts遇到的问题
main.ts中的 createApp(App),只作用于一个,如果,有两个,则并不是一个对象,另一个会不生效
- spring in action day-06 JMS -ActiveMQ Artemi
JMS -ActiveMQ Artemi JMS:它是一个规范,类似于jdbctemplate Spring提供了jmstemplate来发送和接收消息. 搭建JMS环境 1.引入依赖 我们要使用的消 ...