栈分为顺序栈和链栈,顺序栈用数组实现,因为栈的先进后出特性,一般只考虑顺序栈。


代码1(自己写的):

#include <iostream>
#include <stdio.h>
#define ERR -9999999
const int maxn = 1000;using namespace std;typedef struct Stack{int data[maxn];int top;        //top指的是下一个要放入的元素位置
}Stack;bool Is_empty(Stack &s) //判断栈是否为空
{if(s.top == 1) return 0;else return 1;
}void top(Stack &s)      //获取栈顶元素
{int x = 0;if(!Is_empty(s)) printf("NO element!\n");else{x = s.data[s.top-1];printf("top = %d",x);}
}void pop(Stack &s)      //弹出或删除栈顶元素
{int x;if(!Is_empty(s)) printf("EMPTY!\n");else{x = s.data[s.top--];printf("pop is = %d",x);}
}void push(Stack &s,int x)    //压入一个元素为x
{if(s.top>(maxn-1)) printf("FULL!");else{s.data[s.top++] = x;}
}int main()
{Stack st;st.top = 1;     //当前栈为空int X;      //X为每次读入的值int n=5;      //n为输入元素的个数for(int i=1;i<=n;i++){scanf("%d",&X);push(st,X);}pop(st);top(st);return 0;
}

代码2(西交wrong):

#include <iostream>
#include <stdio.h>
const int maxn = 1000;typedef struct Stack{int st[maxn];int top;
}Stack;Stack s;bool IS_empty(){                //判断栈是否为空if(s.top <= 1) return 1;return 0;
}bool pop(){                     //出栈操作if(s.top <= 1) return 0;s.top--;return 1;
}bool push(int x){               //入栈操作if(s.top > (maxn-1)) return 0;s.st[s.top++] = x;return 1;
}int top(){                     //获得栈顶元素if(s.top <= 1) return 0;return s.st[s.top-1];
}int main()
{int n;                      //n为操作个数char op[10];                //判断输入操作int ret;                    //ret保存返回值s.top = 1;                  //栈初始化为空scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",&op);if(op[0] == 't'){ret = top();if(ret != 0)printf("top is %d\n",ret);elseprintf("top isn't exist\n");}else if(op[0] == 'p' && op[1] == 'o'){ret =pop();if(ret) printf("success pop\n");else printf("fail pop\n");}else if((op[0] == 'p') && (op[1] == 'u')){int x;scanf("%d",&x);ret = push(x);if(ret) printf("success push\n");else printf("fail push\n");}else{ret = IS_empty();if(ret) printf("YES\n");else printf("NO\n");}}
/*直接用stack实现stack<int> st2;st2.push(1);int x = st2.top();    //注意此时x保存的是值,pop改变的是指针,所以下面pop后并没有改变x的值st2.pop();cout<<x<<endl;
*/return 0;
}

(感谢西交wrong学长提供以上题目练习)

10-C++实现栈的常见操作相关推荐

  1. 在单链表写入一组数据代码_链表常见操作和15道常见面试题

    什么是单链表 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer),简单来说链表并不像数组那样 ...

  2. 路径,文件,目录,I/O常见操作汇总

    摘要:    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案 ...

  3. python基础实例-Python基础之字符串常见操作经典实例详解

    本文实例讲述了Python基础之字符串常见操作.分享给大家供大家参考,具体如下: 字符串基本操作 切片 # str[beg:end] # (下标从 0 开始)从下标为beg开始算起,切取到下标为 en ...

  4. 数据结构——栈与队列操作(用栈模拟队列)

    [栈与队列操作] 问题描述:假设有两个长度相同的栈 S1,S2,已知以下入栈.出栈.判栈满和判栈空操作: void Push(S,x); Elemtype Pop(S); bool StackFull ...

  5. C#路径/文件/目录/I/O常见操作汇总(一)

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题, 尽量提供一些解决方案,即使没有你想要的答案,也希望能提 ...

  6. Java数组常见操作

    Java数组常见操作 文章目录 Java数组常见操作 7.0 数组的遍历 1.使用foreach循环访问数组中每个元素. 2.使用简单的for循环(多层循环嵌套)来遍历数组. 7.1 数组长度 7.2 ...

  7. python实战经典例子_Python基础之列表常见操作经典实例详解

    本文实例讲述了Python基础之列表常见操作.分享给大家供大家参考,具体如下: Python中的列表操作 列表是Python中使用最频繁的数据类型[可以说没有之一] 一组有序项目的集合 可变的数据类型 ...

  8. Python基础day04【字典(介绍、定义与访问、操作数据、常见操作)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]    目录 1. 复习反馈 判断一个方法是否有返回值 列表中的删除操作 新建day04项目 2. ...

  9. python列表可以删除和修改吗_Python列表常见操作详解(获取,增加,删除,修改,排序等)...

    本文实例讲述了Python列表常见操作.分享给大家供大家参考,具体如下: 列表是由一系列按特定顺序排列的元素组成的对象.因为列表通常包含多个元素, 所以建议给列表指定一个表示复数的名称. 我们用方括号 ...

最新文章

  1. json字符串的理解
  2. Spring IoC容器总结(未完)
  3. 学计算机学的想死,“我不是学习机器,真的好想死”
  4. mysql merge查询速度_MySQL 查询优化之 Index Merge
  5. JavaScript 获取小数任一小数点后的位数的小数
  6. 尝试加载Crystal Reports 运行时时出错
  7. Linux尖角号符号怎么打出来,六角星号怎么打出来
  8. 被公司解雇怎么维护自己的权益看看这几部法《劳动法》《劳动合同法》及《劳动合同法实施条例》
  9. Mybatis学习文档
  10. TypeException: Could not resolve type alias******
  11. 主要搜索引擎(Google和百度、雅虎)的站内搜索代码
  12. 微信小程序 获取formId
  13. 智慧树课程问答怎么得分
  14. 用python创建微信机器人_手把手教你用Python创建微信机器人
  15. Java 阿里云图片添加水印
  16. mysql 季度统计_mysql 按年度、季度、月度、周、日SQL统计查询
  17. 软件测试之 对朋友圈点赞功能进行测试
  18. 非因推荐 | 肿瘤微环境研究大剖析——肿瘤相关巨噬细胞
  19. Android 模拟串口通信过程
  20. k8s搭建 rabbitmq集群

热门文章

  1. JAVA面试要点007---equals和==的区别小结
  2. java异常总结---1.java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.support.OpenSessio
  3. 在实验室服务器毫无阻拦的安装pip3
  4. c++ assert() 使用方法
  5. std::lexicographical_compare
  6. 随想录(OllyDbg和IDA Pro的配合使用)
  7. 退出页面 数据保留_IOS保留数据换appid教程(副号暂时无法解锁登录看这里)
  8. php同学录网站设计_基于PHP的校友录系统的设计与实现
  9. 桌面版应用_类Jupyter notebook编辑器桌面版应用nteract
  10. BUUCTF Web [极客大挑战 2019]Havefun