**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构。

**今天我先记一下顺序存储结构,后面我会加上链式存储结构的。

**我看到别人的顺序栈都是用别的方式来写的,我现在这里用的是一维数组,也就是用数组模拟。由于要用到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++)的更多相关文章

  1. 简单用数组模拟顺序栈(c++版)适合新手

    **栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...

  2. php模拟顺序栈基本操作

    php模拟顺序栈基本操作 一.总结 写函数什么永远记住边界情况:比如 echo "栈已满!<br/>" ;  栈已空这种,那就能多考虑几种情况,代码就很正宗了 1.对象 ...

  3. java学习笔记(基础篇)—数组模拟实现栈

    栈的概念 先进后出策略(LIFO) 是一种基本数据结构 栈的分类有两种:1.静态栈(数组实现) 2.动态栈(链表实现) 栈的模型图如下: 需求分析 在编写代码之前,我习惯先对要实现的程序进行需求分析, ...

  4. 使用JAVA数组实现顺序栈

    1,首先总结一下线性表(分为顺序表和链接表,[即顺序存储结构和链式存储结构的区别])和栈(顺序栈和链接栈)还有队列(顺序队列和链接队列)的JAVA类库中的实现: java.util.ArrayList ...

  5. salesforce零基础学习(七十六)顺序栈的实现以及应用

    数据结构中,针对线性表包含两种结构,一种是顺序线性表,一种是链表.顺序线性表适用于查询,时间复杂度为O(1),增删的时间复杂度为O(n).链表适用于增删,时间复杂度为O(1),查询的时间复杂度为O(n ...

  6. php中数组模拟队列、栈的函数以及数组指针操作

    1,数组指针,current表示当前指针,输出其指向的元素:next表示指针移动到下一个元素:prev指针移动到上一个元素:end表示指针移动到最后一个元素:reset表示指针移动到第一个元素: &l ...

  7. JavaScript数组模拟栈和队列

    *栈和队列:js中没有真正的栈和队列的类型              一切都是用数组对象模拟的 栈:只能从一端进出的数组,另一端封闭       FILO   何时使用:今后只要仅希望数组只能从一端进 ...

  8. 数据结构之【栈】+十进制转d进制(堆栈数组模拟)

    其实这篇文章开出来主要是水文章%% %% 栈--后进先出的婊 特点:只能在某一端插入和删除的特殊的线性表 操作:进栈--PUSH->向栈顶插入元素 出栈--POP-->将栈顶元素删除 实现 ...

  9. 数组模拟栈(C语言)

    用数组模拟栈的实现: #include <stdio.h> #include <stdlib.h> #define STACK_SIZE 100 typedef struct ...

随机推荐

  1. JVM基础系列开篇:为什么要学虚拟机?

    跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看.所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试.但我经过了几年的学习和实战,我发现其实学习虚拟机并 ...

  2. 【Docker】(4)搭建私有镜像仓库

    [Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先 ...

  3. oauth2.0通过JdbcClientDetailsService从数据库读取相应的配置

    oauth2.0通过JdbcClientDetailsService从数据库读取相应的配置 在上一节我们讲述的配置是把授权码存储在redis中,把相应的请求的路径用使用in-memory存储 ,这个是 ...

  4. Python爬虫入门教程 20-100 慕课网免费课程抓取

    写在前面 美好的一天又开始了,今天咱继续爬取IT在线教育类网站,慕课网,这个平台的数据量并不是很多,所以爬取起来还是比较简单的 准备爬取 打开我们要爬取的页面,寻找分页点和查看是否是异步加载的数据. ...

  5. Python爬虫入门教程 7-100 蜂鸟网图片爬取之二

    蜂鸟网图片--简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度. 安装模块常规套路 pip install aiohttp 运行之后等待,安装完毕,想要深造,那么官方文 ...

  6. 前端笔记之JavaScript(一)初识JavaScript

    一.JavaScript简介 1.1网页分层 web前端一共分三层: 结构层 HTML         : 负责搭建页面结构 样式层 CSS          : 负责页面的美观 行为层 JavaSc ...

  7. iOS逆向开发(6):微信伪造位置

    仍然以微信为例,实战地练习一下使用Reveal.iOSOpenDev等工具注入APP的流程,积累经验.这一系列的文章都是学习过程的总结,不带任何商业目的. 本文解决一个问题:如何伪造一个经纬度,在微信 ...

  8. mongos-sharding连接池配置

    ShardingTaskExecutorPoolMaxSize Maximum number of outbound connections each TaskExecutor connection ...

  9. Java开发笔记(七十一)容器工具Collections

    清单作为一组数据的有序队列,它在组织形式上与数组有着某些异曲同工之处,数组有专门的数组工具Arrays来进行加工操作,照理清单也应该配备对应的清单工具.当然容器这个大家族确实拥有自己的容器工具Coll ...

  10. rocketmq 发送时异常:system busy 和 broker busy 解决方案

    记一次 rocketmq 使用时的异常. 这里就不说什么rocketmq 源码啥的了,因为没看过.网上一搜这两个异常 大部分都是什么源码解读,也没说出现后的解决办法(蓝瘦香菇). 大量测试发现: 1. ...