顺序栈

首先让我们来了解什么是栈?
栈是存放数据对象的一种特殊容器,栈中的元素始终遵循后进先出的顺序
利用这个特点我们就能解决许多实际生活中的问题.
博主在这篇博客中打算利用栈来解决生活中的打字问题.

让我们来假设这样一个场景 :
你正在修改你自己的QQ签名(最多保存50个字),但是打着打着打错了一个字,这时候你就需要将打错的一个或者几个字删掉
这就要用到我们的栈了,利用这种后进先出的特点就能 实现我们签名修改.
实验目的:
(1) 实现栈的存储结构设计;
(2) 实现栈的操作算法设计;
(3) 利用栈实现应用问题的解决;
实验内容:
栈的初始化
打印栈内所有元素
获取栈顶元素且栈顶元素不出站
判断栈空(栈满不需要进行判断在入栈时就已经杜绝了这种情况)
入栈和出栈算法设计;

#include<iostream>
#include<Windows.h>using namespace std;
#define MaxSize 50typedef struct _SqStack {int  *base;  //栈底指针int  *top;    //栈顶指针
}SqStack;//初始化栈
bool InitSq(SqStack &Sq) {Sq.base = new int[MaxSize];if (!Sq.base) return false;Sq.top = Sq.base;return true;
}
//入栈
bool PushStack(SqStack &Sq,int Element) {*Sq.top = Element;Sq.top++;return true;
}
//获取栈顶元素栈顶元素不出栈
void GetTopSq(SqStack &Sq) {cout << "打印栈顶元素!" << endl;cout << "栈顶元素是: " << *(Sq.top - 1) << endl;
}
//打印栈内所有元素
void    Print(SqStack &Sq) {//利用临时的打印所有元素,不改变以前的栈的结构!!!SqStack tmp = Sq;cout << "栈内元素分别是: ";while (tmp.top > tmp.base) {cout << *(--tmp.top) << " ";}
}
//出栈
bool PopStack(SqStack &Sq, int &Element) {if (Sq.top == Sq.base) {cout << "这是个空栈!! ";return false;} else {Element = *(--Sq.top);}return true;}int main(void) {SqStack Sq ;//实现栈的初始化if (InitSq(Sq)) {cout << "初始化栈成功! " << endl;} else {cout << "初始化栈失败! " << endl;}int num;  //获取用户想要入栈或者出栈的个数,不得超过栈的最大容量!!!int Element; //入栈或者出栈的元素值cout << "请输入你想要入栈的个数,不得超过本栈的最大容量(50) " << endl;cin >> num;//目的是让用户输入正确的入栈个数!!!!while (1) {if (num > MaxSize) {cout << "****************************";cout << "对不起,您输入的入栈个数超过了本栈的最大容量!!!    请重新输入!!!   " << endl;cout << "请输入你想要入栈的个数,不得超过本栈的最大容量(50)!!!" << endl;cin >> num;} else {break;}}for (int i = 0; i < num; i++) {cout << "请输入你想要入栈的元素: ";cin >> Element;//实现入栈if (PushStack(Sq,Element)) {cout << "元素 " << Element << " 入栈成功! " << endl;} else {cout << "入栈失败! " << endl;}}//打印刚刚入栈的元素的栈顶元素元素不出栈GetTopSq(Sq);//打印所有栈内元素!!!Print(Sq);//出栈cout << endl;cout << "请输入你想要出栈的个数,不得超过现在本栈的最大容量: " <<Sq.top-Sq.base<< endl;cin >> num;//目的是让用户输入正确的出栈个数!!!!while (1) {if (num > Sq.top - Sq.base) {cout << "****************************";cout << "对不起,您输入的入栈个数超过了本栈的最大容量!!!    请重新输入!!!   " << endl;cout << "请输入你想要入栈的个数,不得超过本栈的最大容量: !!!!" << Sq.top - Sq.base<< endl;cin >> num;} else {break;}}for (int i = 0; i < num; i++) {//实现出栈if (PopStack(Sq, Element)) {cout << "元素 " << Element << " 出栈成功! " << endl;} else {cout << "出栈失败! " << endl;}}Print(Sq);cout << "现在再入栈一个元素吧!,然后我们的程序就结束了!!!!  " << endl;cout << "***************************";cout << "请输入你想要入栈的元素: ";cin >> Element;//实现入栈if (PushStack(Sq, Element)) {cout << "元素 " << Element << " 入栈成功! " << endl;} else {cout << "入栈失败! " << endl;}Print(Sq);system("pause");return 0;
}

数据结构与算法之栈的用法相关推荐

  1. 数据结构与算法之栈入门题目

    数据结构与算法之栈题目 目录 用数组实现大小固定的队列和栈 实现一个特殊的栈,在实现栈的基础功能上,再实现返回栈中最小元素的操作 如果仅用栈结构实现队列结构和如何仅用队列结构实现栈结构 1. 用数组实 ...

  2. 数据结构与算法--利用栈实现队列

    利用栈实现队列 上一节中说明了栈的特点 后进先出,我们用数组的方式实现了栈的基本操作api,因此我们对栈的操作是不考虑排序的,每个api的操作基本都是O(1)的世界,因为不考虑顺序,所以找最大,最小值 ...

  3. 数据结构与算法--简单栈实现及其应用

    栈 栈(Stack)是一种限制插入和删除只能在一个位置上进行的表,改位置是表的末端,叫做栈顶top.栈的基本操作有push (进栈)pop(出栈) 栈又叫做LIFO(后进先出)表,下图展示普通push ...

  4. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  5. 新星计划Day7【数据结构与算法】 栈Part1

    新星计划Day7[数据结构与算法] 栈Part1

  6. java stack 从1.5开始?_java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 栈是一种用于存储数据的简单数据结构,有点类似链表或者顺序表(统称线性表),栈与线 ...

  7. 数据结构与算法(2)——栈和队列

    前言:题图无关,只是好看,接下来就来复习一下栈和队列的相关知识 前序文章: 数据结构与算法(1)--数组与链表(https://www.jianshu.com/p/7b93b3570875) 栈 什么 ...

  8. 【数据结构与算法】栈与队列

    栈 一.什么是栈? 1.后进者先出,先进者后出,这就是典型的"栈"结构. 2.从栈的操作特性来看,是一种"操作受限"的线性表,只允许在端插入和删除数据. 二.为 ...

  9. 数据结构与算法之-----栈的应用(三)

    [ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己 ...

最新文章

  1. pix2pix tensorflow试验(GAN之图像转图像的操作)
  2. Git和Repo管理使用简要介绍
  3. unity3d 鼠标延各个方向拖拽物体
  4. 阿里巴巴:万亿级数据洪峰下的分布式消息引擎
  5. 解决AngularJS在IE下取数据总是缓存的问题
  6. 基于MATLAB的发票识别系统
  7. NetSuite Saved Search不是啥都能查
  8. 苹果计算机散热维修,手把手教你拆机MacBook Pro,作清灰散热处理,助你的Mac在夏天火力全开!...
  9. Python 第二十八章 网络初识+五层协议+三次握手四次挥手
  10. 计算机网络期末复习:第一章概念
  11. zblog采集教程无需写入zblog采集规则
  12. Delphi 2006(DeXter) VS.NET 2005[原创]
  13. access课程均不及格_二级ACCESS上机总结重点,小抄
  14. 160个CrackMe之108 mfc程序 寻找按钮事件,代码还原(上)
  15. echarts 地图上边画柱状图
  16. oracle begin exception end,Oracle Exception异常处理
  17. 高通平台TP和LCD 驱动Porting流程
  18. Helm部署rancher 高可用集群
  19. 倍福---MC_ReadParameter读取参数
  20. 光子神经网络登上nature,图像识别速度降至1纳秒

热门文章

  1. 2021-2025年中国灯光调光开关行业市场供需与战略研究报告
  2. 计算机中的基础元素,数据结构基础
  3. SQL注入学习part01:(结合sqli-libs学习:1-10关)
  4. Python菜鸟入门:day03运算符
  5. JAVA Swing GUI设计 WindowBuilder Pro Container使用大全2——JPanel使用
  6. CSDN招人啦!快来看看,有你想要的职位吗?
  7. 在 GitHub 上提交代码必备指南!
  8. 微软:Excel 正成为开发者的终极武器!
  9. Docker、CentOS 8遭弃用,GPT-3、M1芯片撼动技术圈,盘点2020影响开发者的十大事件!
  10. 启智社区亮相2020全球智博会,千万奖金悬赏优秀开发者