数据结构遍历顺序栈_[C++]数据结构:栈之顺序栈
0 栈的基本概念
栈,根据存储结构的不同,可分为:链栈和顺序栈。
1 顺序栈的知识概览
2 编程复现
2.1 定义基本数据结构
typedef char DataType; // 基本数据类型
enum Status { ERROR, OK, OVERFLOW };// 状态(码) : 枚举类型
#define MAXSIZE_STACK 100 //栈内最大元素数
typedef struct { // 顺序栈
DataType *base; // 栈底指针 (NULL:栈结构不存在;【重点】 初始化后,始终指向栈底)
DataType *top; //栈顶指针 【重点】(初始时:top==base; top所指处无任何元素)
int stackSize; //栈可用的最大容量
}SeqStack;
2.2 基本操作
Status InitStack(SeqStack &S); //初始化
Status Push(SeqStack &S, DataType e); //入栈
Status Pop(SeqStack &S, DataType &e); //出栈
bool StackEmpty(SeqStack S); //判定栈空
bool StackFull(SeqStack S); //判定栈满
Status GetTop(SeqStack S, DataType &e); //取得栈顶元素
int StackLength(SeqStack &S); //栈的长度
Status StackTraverse(SeqStack S); //栈的遍历
0> 初始化
Status InitStack(SeqStack &S){
S.base = new DataType [MAXSIZE_STACK];
if(S.base==NULL){
exit(OVERFLOW);
}
S.top = S.base;
S.stackSize = MAXSIZE_STACK; // 设置栈的可用最大容量
return OK;
}
1> 入栈
Status Push(SeqStack &S, DataType e){//入栈
if(S.top - S.base == S.stackSize){ // 栈满
return ERROR;
}
*S.top = e;
S.top++;
StackTraverse(S);
return OK;
}
2> 出栈
Status Pop(SeqStack &S, DataType &e){//出栈
if(S.top==S.base){//栈空
return ERROR;
}
e = *(S.top-1); //返回栈顶元素的值 【易错】top所指处系栈顶元素的后一位,而非直接指向栈顶元素
S.top--; //【易混】要么,是先自减1,再取栈顶元素(*(S.top-1)),最后降top的位置(top--);要么,先自降top位置(top-1),再直接取当前栈顶top位置的元素(即 S.top即为栈顶元素真值)
return OK;
}
3> 判定栈空
bool StackEmpty(SeqStack S){ // 栈空?
if(S.base==S.top){ // 栈空
return true;
}
return false; //栈不为空
}
3> 判定栈满
bool StackFull(SeqStack S){ //栈满?
if(S.top-S.base == S.stackSize){
return true;//栈满
}
return false; //栈未满
}
4> 取栈顶元素
Status GetTop(SeqStack S, DataType &e){//取栈顶元素
if(S.top==S.base){//栈空
return ERROR;
}
e = *(S.top-1); //【易错】
return OK;
}
5> 栈的长度
int StackLength(SeqStack &S){
if(S.base==NULL){
return -1;
}
return S.top-S.base;
}
6> 栈的遍历
Status StackTraverse(SeqStack S){//遍历
if(S.base == NULL){ // 栈结构不存在
return ERROR;
}
if(S.base == S.top){//栈空
return ERROR;
}
DataType *p = S.top;
while(p!=S.base){
cout<
p--;
}
cout<
return OK;
}
7> 执行:Main函数
#include
#include
#include"base.h" // 引入 基本数据类型 以及 表函数处理结果的状态码结构体 Status
#include // main函数中需要测试调用 (string类)
using namespace std;
int main(){
SeqStack S;
InitStack(S);
string instruction="-"; // string 在 cmd | 标准I/O 模式中输入时,将会以空格隔断字符串
DataType data;
cout<
cout
while(instruction!= "#"){
cout<
cin>>instruction;
if(instruction=="PUSH"){
if(!StackFull(S)){
cout<
cin>>data;
//cout<
Push(S, data);
} else {
cout<"<
}
} else if(instruction=="POP"){
Status status = Pop(S, data);
if(status==OK){
cout<
} else {
cout<"<
}
} else {
cout<"<
}
cout<
}
StackTraverse(S);
return 0;
}
8> Output For Test
Please Input Your Instructions:
[INSTRUCTION]PUSH
[PUSH DATA]8
(length:1)
[INSTRUCTION]PUSH
[PUSH DATA]7
(length:2)
[INSTRUCTION]PUSH
[PUSH DATA]3
(length:3)
[INSTRUCTION]PUSH
[PUSH DATA]1
(length:4)
[INSTRUCTION]PUSH
[PUSH DATA]K
(length:5)
[INSTRUCTION]PUSH
[PUSH DATA]M
(length:6)
[INSTRUCTION]POP
[POP DATA]M
(length:5)
[INSTRUCTION]%
(length:5)
[INSTRUCTION]#
(length:5)
M KM 1KM 31KM 731KM 8731KM
参考文献
《数据结构(C语言版 / 严蔚敏 李冬梅 吴伟民 编)》
数据结构遍历顺序栈_[C++]数据结构:栈之顺序栈相关推荐
- java集合框架栈_自己实现集合框架(九):栈接口
这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...
- arm64入栈出栈_使用 ARM64 汇编实现共享栈式协程
# 简述 大约在半年以前,我曾经了解过协程的相关实现,也看过腾讯后台开源的协程库`libco`,对其中实现协程相关的汇编有很深的印象(`libco`适配的是 x86 平台).接受了这样的思想,我在自己 ...
- 数据结构树的基本操作_《数据结构》树的基本操作.doc
<数据结构>树的基本操作 实验四 课程名称:完成日期:姓名:学号:指导教师:实验名称:实验序号:实验成绩:一.实验目的及要求 二.实验环境.实验内容 求出它的深度. .调试过程及实验结果 ...
- 微信小程序页面栈_微信小程序使用页面栈改变上一页面的数据
微信小程序中如果从一个页面中进入下一个页面,如果下个页面的数据有删除或者增加再返回上一个页面的时候,就会导致页面不刷新(数据加载函数在onload中),从而造成数据不一致的情况.其实在微信小程序中是可 ...
- 数据结构python吕云翔_《数据结构》吕云翔编著第1章绪论习题解答
数据结构第一章绪论习题 一. [单选题] 1. ( A )是数据的基本单位. A.数据元素 B.数据对象 C.数据项 D.数据结构 2. ( C )是数据的不可分割的最小单位. A.数据元素 B.数据 ...
- 汇编自动出栈_汇编自学 (12) 重温进出栈指令PUSH POP 和双循环
微软的masm5.0是8位平台的,6.0是16位平台的,还有其他32位平台的.现在编程一般用32位平台,8位和16位都可以在保护模式运行. 最简单的一个程序 assume cs: codesg cod ...
- javascript 全栈_什么是JavaScript? 全栈编程语言
javascript 全栈 JavaScript是一种流行的解释性脚本语言,在2019年初成为开发人员最常学习的语言 . JavaScript是一种开放标准,不受任何单一供应商的控制,具有多种实现方式 ...
- java数据结构博客园_常见数据结构的Java实现
单链表的Java实现 首先参考wiki上的单链表说明,单链表每个节点包含数据和指向链表中下一个节点的指针或引用.然后看代码 import java.lang.*; public class Singl ...
- 合并的数组会有顺序么_咱就别按顺序刷题了,看看大佬怎么刷
1. 碎碎念 今天完成了体育测试,大学生活真的就快要将近了,未来什么时候还能和这些可爱的同学们聚一聚呢?祝大家都好吧!比较让我高兴的是,公众号终于有了一个粉丝,哈哈哈,非常感谢关注哇!每天都要好好敲代 ...
- java三个线程 顺序执行_如何确保三个线程顺序执行
三个线程t1.t2.t3.确保三个线程,t1执行完后t2执行,t2执行完后t3执行. 一.使用join thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. ...
最新文章
- 强势推荐一位 Python 原创自动化大佬!
- 幽门螺杆菌感染会增加代谢综合征和糖尿病风险,竟然“男女有别”?
- MySQL之SQL优化详解(二)
- Memcache存储大数据的问题(大于1m)
- EntityFramework 学习: Console中初见
- HDU 1520 Anniversary party(树形dp)
- 数据结构与算法--数组:二维数组中查找
- 2020牛客暑期多校训练营(第四场)
- 【LeetCode】【HOT】301. 删除无效的括号(递归)
- ES6新特性_ES6中模块暴露数据语法汇总---JavaScript_ECMAScript_ES6-ES11新特性工作笔记043
- 获取实体类属性值为null的属性名
- 特斯拉全自动驾驶硬件发布!马斯克明年推RoboTaxi:傻瓜才用激光雷达
- mapxtreme2008 7.0错误
- 云优CMS插件不需要云优CMS授权码的插件
- 小程序 微信统计表格_用微信快速收集自定义报名统计,这款小程序做到了
- c语言频谱图,c-实时绘制频谱图?
- shel文件生成和执行
- [Unity3D]Unity3D官方案例SpaceShooter开发教程
- 2021年茶艺师(初级)模拟考试及茶艺师(初级)实操考试视频
- Python之Excel图片处理(将excel chart另存为图片)
热门文章
- 奔图打印机显示未连接_奔图打印机常见故障及解决方法
- 【20保研】厦门大学信息学院2019年全国优秀大学生暑期夏令营招生简章
- Python数据结构与算法视频教程-王宁宁-专题视频课程
- rapidminer java,rapidminer 数据导入及几个算子简单应用
- Unity3D Editor Undo回退效果实现3 Odin相关
- SQL Server 2017 安装AdventureWorks示例数据库出现的问题
- win7我的计算机无法搜索,win7搜索功能无法正常使用的有效解决方法
- android电容触摸屏的驱动及其上层工作原理,电容触摸屏驱动原理
- 世界三大统计分析软件sas splus spss
- 计算机硬件故障的相关知识,电脑常见硬件故障大全