简单用数组模拟顺序栈(c++)
**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构。
**今天我先记一下顺序存储结构,后面我会加上链式存储结构的。
**我看到别人的顺序栈都是用别的方式来写的,我现在这里用的是一维数组,也就是用数组模拟。由于要用到bool型,所以我直接用c++来写,大家可以相应改成C语言的版本,并不难。
**顺序栈的操作 无非是基本的八个,分别是初始化,出栈,入栈,是否为空,是否为满,取栈顶元素,取有效元素个数,遍历。
**如果用静态数组模拟的话,不需要销毁栈,(我个人觉得 如果有误,请指正) 清空的话,直接初始化就行。顺序栈的示意图如下:
不多说了,直接给代码参考:
在这里我用拼音来代替函数,让新手看得明白一点,我这里用的是结构体来生成一个栈,这个栈有一百个格子,还有一个top指针,大家结合示意图来看就会很形象的。
# include<iostream>
using namespace std;
typedef struct
{
int d[100];//定义一个长度为100的一维数组这里可以随便设置长度
int top;//栈顶指针
} Stack;
void chushihua(Stack * s);//初始化一个栈
bool em(Stack * s);//判断是否为空
bool full(Stack * s);//判断是否为满
bool push(Stack * s,int a);//入栈
bool pop(Stack * s,int *a);//出栈
bool ding(Stack * s,int *a);//取栈顶元素
int len(Stack * s);//取有效元素个数
void bianli(Stack * s);//遍历
*****************************************************************
函数部分:
*****初始化一个栈*****
void chushihua(Stack * s);
{
s->top=-1; //结合示意图让top为-1 就是初始化这个栈
}
*****判断是否为空 *****
bool em(Stack * s)
{
if(-1==s->top)
return true;
else
return false;
}
*****判断是否为满 *****
bool full(Stack * s)
{
if(99==s->top)//这里是因为数组的下标为零 所以对于一百来说 99就是最后一个“格子”
return true;
else
return false;
}
*****入栈*****
bool push(Stack * s,int a)
{
if(full(s)) //满了就不能入栈
return false;
else
{
s->top++; //结合图 指针先加
s->d[s->top]=a;// 再把数据存进对应的“格子”
return true;
}
}
*****出栈*****
bool pop(Stack * s,int *a)
{
if(em(s))// 空的当然不能出栈
return false;
else
{
*a=s->d[s->top]; //把栈顶元素 付给 变量
s->top--; //指针减一
return true;
}
}
*****取栈顶元素*****
这里只是取栈顶元素 不对栈有任何操作
bool ding(Stack * s,int *a)
{
if(em(s)) //同理 空栈没有元素 就不行
return false;
else
{
*a=s->d[s->top]; // 把栈顶的元素赋值即可
return true;
}
}
*****取有效元素长度*****
由图我们可知,指针+1就是有效元素长度了
int len(Stack * s)
{
return s->top+1;
}
*****遍历*****
void bianli(Stack * s)
{
int i;
while(!em(s))//当不为空栈
{
pop(s,&i); //我们就出栈并赋值
cout<<i<<" "; // 打印
}
cout<<endl;//这是相当于C语言中的换行
}
*****************************************************************
主函数部分(测试)
int main(void)
{
Stack s;
int a,c;
chushihua(&s);
push(&s,1);
push(&s,2);
push(&s,3);
push(&s,4);
push(&s,5);
ding(&s,&a);
cout<<"有效长度为:"<<len(&s)<<" 栈顶元素为 "<<a<<endl;
bianli(&s);
return 0;
}
如图:
以上就是用数组模拟顺序栈的过程,如果有什么问题或者bug,请在下方评论,我目前会天天上论坛的。
简单用数组模拟顺序栈(c++)的更多相关文章
- 简单用数组模拟顺序栈(c++版)适合新手
**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...
- php模拟顺序栈基本操作
php模拟顺序栈基本操作 一.总结 写函数什么永远记住边界情况:比如 echo "栈已满!<br/>" ; 栈已空这种,那就能多考虑几种情况,代码就很正宗了 1.对象 ...
- java学习笔记(基础篇)—数组模拟实现栈
栈的概念 先进后出策略(LIFO) 是一种基本数据结构 栈的分类有两种:1.静态栈(数组实现) 2.动态栈(链表实现) 栈的模型图如下: 需求分析 在编写代码之前,我习惯先对要实现的程序进行需求分析, ...
- 使用JAVA数组实现顺序栈
1,首先总结一下线性表(分为顺序表和链接表,[即顺序存储结构和链式存储结构的区别])和栈(顺序栈和链接栈)还有队列(顺序队列和链接队列)的JAVA类库中的实现: java.util.ArrayList ...
- salesforce零基础学习(七十六)顺序栈的实现以及应用
数据结构中,针对线性表包含两种结构,一种是顺序线性表,一种是链表.顺序线性表适用于查询,时间复杂度为O(1),增删的时间复杂度为O(n).链表适用于增删,时间复杂度为O(1),查询的时间复杂度为O(n ...
- php中数组模拟队列、栈的函数以及数组指针操作
1,数组指针,current表示当前指针,输出其指向的元素:next表示指针移动到下一个元素:prev指针移动到上一个元素:end表示指针移动到最后一个元素:reset表示指针移动到第一个元素: &l ...
- JavaScript数组模拟栈和队列
*栈和队列:js中没有真正的栈和队列的类型 一切都是用数组对象模拟的 栈:只能从一端进出的数组,另一端封闭 FILO 何时使用:今后只要仅希望数组只能从一端进 ...
- 数据结构之【栈】+十进制转d进制(堆栈数组模拟)
其实这篇文章开出来主要是水文章%% %% 栈--后进先出的婊 特点:只能在某一端插入和删除的特殊的线性表 操作:进栈--PUSH->向栈顶插入元素 出栈--POP-->将栈顶元素删除 实现 ...
- 数组模拟栈(C语言)
用数组模拟栈的实现: #include <stdio.h> #include <stdlib.h> #define STACK_SIZE 100 typedef struct ...
随机推荐
- Linux命令之sftp - 安全文件传输命令行工具
用途说明 sftp命令可以通过ssh来上传和下载文件,是常用的文件传输工具,它的使用方式与ftp类似,但它使用ssh作为底层传输协议,所以安全性比ftp要好得多. 常用方式 格式:sftp <h ...
- PV UV QPS 并发数
TPS(Transactions Per Second):每秒事务数 QPS(Query Per Second):每秒请求数,QPS其实是衡量吞吐量的一个常用指标,就是说服务器在一秒的时间内处理了多少 ...
- 关于ML.NET v0.6的发布说明
ML.NET 0.6版本提供了几项令人兴奋的新增功能: 用于构建和使用机器学习模型的新API 我们主要关注的是发布用于构建和使用模型的新ML.NET API的第一次迭代.这些新的,更灵活的API支持新 ...
- spring boot MySQL极简封装
摒弃繁琐配置,采用极简方式,源码简单,调用丰富,无污染,易携带,工作量减半,java操作mysql居家旅行升职加薪登上人生巅峰迎娶白富美必备object! 项目地址:https://gitee.com ...
- java nginx等代理或网关转发请求后获取客户端的ip地址,原理
在没有网关或者反向代理软件情况下,java里获取客户端ip地址的方法是request.getRemoteAddr() 先解释下http协议和TCP协议: 网页默认是进行http连接了,http协议即超 ...
- 十一之买一台 vps搭建 玩玩
直接上大家都熟悉的banwangong的网址买一台最便宜的机器,毕竟是试着玩么,买了一个月的,如果直接买还是冲年费的吧. 第一步,注册会员么,结果就出问题了,显示图片不符合标准 ,我就很纳闷,我填几个 ...
- 深度学习入门实战(一):像Prisma一样算法生成梵高风格画像
本文由云+社区发表 作者:董超 导语:现在人工智能是个大热点,而人工智能离不开机器学习,机器学习中深度学习又是比较热门的方向,本系列文章就从实战出发,介绍下如何使用MXnet进行深度学习~ 既然是实战 ...
- Qt实现半透明遮罩效果
本文索引: 需求 原理 实现遮罩控件 遮罩的使用 需求 我们在显示一些模态对话框的时候,往往需要将对话框的背景颜色调暗以达到突出当前对话框的效果,例如: 对话框的父窗口除了标题栏以外的部分都变暗了,在 ...
- 从零开始学安全(三十五)●mysql 盲注手工自定义python脚本
import requests import string #mysql 手动注入 通用脚本 适用盲注 可以跟具自己的需求更改 def home(): url="url" list ...
- php-fpm 的优化
pid = /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/php/var/log/php-fpm.log log_level = ...