今天是栈类的实现,是顺序栈的实现(今天的不是链栈的实现),即使用一段连续的内存对栈进行存储,这里使用的是动态数组对栈进行存储,不使用静态数组对栈进行存储,原因在代码中已经说明。静态数组维护栈时,当要扩展时,静态数组的数组名是一个常指针,是一个不可修改的值,不可以当左值,所以采用动态数组的方式,用时间换效率。博主今天写的少,老师论文下来了,所以只能粗糙实现下基本功能。代码粗糙,望海涵。

#include<iostream>
using namespace std;
//首先是顺序栈的实现,里面有个顺序数组维护栈,静态开在栈区,动态开在堆区,静态不能扩展,简直“鸡肋”,哈哈开个玩笑。
//栈和队列不允许有遍历行为
//class My_stack1
//{//public:
//  My_stack1()
//  {//      this->Max_size_static = 50;
//      this->top = -1;
//      this->My_stack=new int[this->Max_size_static];
//  }
//  ~My_stack1()
//  {//      ;//由于开辟与栈区,所以不需要什么手动释放的操作
//  }
//
//  //由于开辟于栈区,会自动回收,那我用动态数组的好处体现于那里?
//  //对啊?动态数组的优势体现在哪里?
//  //1.不会造成内存浪费。废话,除了这个呢?
//  //2.可以自由的扩展数组,难道静态数组就不行吗?你别说好像还真的不好搞,静态的怎么扩展?重新申请更大de?那也不好弄哦噶
//  void Push(int e)//压栈
//  {//      if (this->top== this->Max_size_static-1)
//      {//          this->Big_stack();//先扩大空间
//          this->top++;
//          My_stack[top] = e;
//      }
//      //如果栈满,则返回,不插入,静态数组
//      this->top++;
//      My_stack[top]=e;
//  }
//  //弹栈,并显示数据
//  void Pop()
//  {//      if (this->top == -1)//空栈
//      {//          return;
//      }
//      cout << this->My_stack[top] << endl;
//      My_stack[top] = 0;a
//      this->top--;
//  }
//  //扩展,hahah,Big_stack,我真的没有替换词了,哈哈哈
//  void Big_stack()
//  {//      //先将原本的保存下来,你要是不保存,直接申请增大后的空间,原本的就会被栈回收。
//      int* ggboy=NULL;//这里在堆区开辟一个出来,记得等会释放哦
//      for (int i = 0; i <=this->top;i++)
//      {//          ggboy[i]=this->My_stack[i];
//      }
//      this->Max_size_static += 10;//最大值加10
//      this->My_stack[this->Max_size_static] = {};
//      for (int j = 0; j <= this->top; j++)//将原本的赋值过去
//      {//          this->My_stack[j] = ggboy[j];
//      }
//      //此时已经申请到达空间,并将原本元素赋值到大空间了。
//      delete[] ggboy;//释放堆区数据
//  }
//  int top;//栈顶指针
//  int My_stack[50];//这就为什么静态数组不好的原因,每一个对象再被创建时就有一个50长度的数组,非常浪费空间
//  int Max_size_static;//静态数组的最大值
//  //这里不采取动态数组的方式,而实施直接静态创建,动态的栈等会就会看到
//  //动态的有很多优势,但是要自己释放
//};//存储于堆区的数据不会随着函数的结束而释放,如果你不自己释放,则会到main函数结束时才会释放,这样就有可能造成内存泄露的危险
class My_stack2
{public:My_stack2()//构造函数{this->top = 0;this->Max_size_dynamic =50;this->My_stack = new int[this->Max_size_dynamic];}    ~My_stack2()//析构函数{     delete[] this->My_stack;}void Big()//扩展函数{//首先保存原本数据int* temp=NULL;for (int i = 0; i <= top; i++){temp[i] = this->My_stack[i];}delete this->My_stack;this->Max_size_dynamic += 10;this->My_stack = new int[this->Max_size_dynamic];//重新申请for (int i = 0; i <= this->top; i++){this->My_stack[i] = temp[i];}delete temp;}void Push(int e){if (this->top == this->Max_size_dynamic - 1){this->Big();//先扩大空间this->top++;My_stack[top] = e;}this->top++;My_stack[top]=e;}void Pop(){if (this->top == -1)//空栈{return ;}cout << this->My_stack[top] << endl;My_stack[top] = 0;this->top--;}int top;int* My_stack;int Max_size_dynamic;
};void test01()
{My_stack2 s1;s1.Push(1);s1.Push(2);s1.Push(3);s1.Push(4);s1.Push(5);s1.Pop();s1.Pop();s1.Pop();s1.Pop();s1.Pop();
}
int main()
{test01();return 0;
}

2020-11-01栈的顺序栈实现相关推荐

  1. java栈实现--顺序栈

    顺序栈 一.实现过程 1.提供栈接口:IStack 2.提供顺序栈的实现:ShunxuStack 3.提供判空(isEmpty).栈深度(length)等计算方法. 4.提供清空栈的方法:clear( ...

  2. 【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现

    灵魂拷问:为什么要学数据结构? 数据结构,直白地理解,就是研究数据的存储方式.数据存储只有一个目的,即为了方便后期对数据的再利用.因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好 ...

  3. 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)

    目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...

  4. c语言顺序栈完整程序,顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  5. 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)

    目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...

  6. c语言建立栈(顺序栈、双栈和链式栈)

    c语言建立栈 顺序存储 栈的顺序存储定义 初始化栈 入栈操作 出栈操作 其余操作 读取栈顶元素 栈中元素个数 栈是否为空 双栈 双栈的顺序存储结构定义 建立双栈 判断栈为空 进栈操作 出栈操作 链式栈 ...

  7. 数据结构--栈--共享顺序栈

    共享顺序栈:内部也是一个数组 将两个栈放在数组的两端,一个从数组首端开始压栈,一个从数组尾部开始压栈,等到两边栈顶在中间相遇时,栈满. 共享顺序栈在某些情况下可以节省空间. 头文件 sharingSt ...

  8. java顺序栈_顺序栈的基本操作(入栈和出栈)

    顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...

  9. 卜若的代码笔记-数据结构系列-第十章:栈一.顺序栈(数组栈)

    1.栈有两种写法,一种是以数组为躯干的顺序栈,一种是以链表为躯干的链式栈. 1.1栈的操作 1.1.1 出栈pop()函数 允许栈出,栈出之后,顶数据有移除操作. 时间复杂度o(1) 1.1.2 入栈 ...

  10. 数据结构栈(顺序栈、链栈、插入push、删除pop)、队(循环队,链队、入队push,出队pop)知识点梳理

    数据结构栈知识点梳理 一 栈的定义 栈(stack)是限定仅在表尾进行插入和删除操作的线性表 不含任何元素的栈称为空栈 允许插入和删除的一端成为栈顶(top),另一端称为栈底(bottom) 具有LI ...

最新文章

  1. 2021-2027全球与中国奶牛冻精市场现状及未来发展趋势
  2. pytorch lstm crf 代码理解 重点
  3. 独家 | Python利用深度学习进行文本摘要的综合指南(附教程)
  4. oracle 新建TNS监听,oracle for windows 监听问题之TNS-12545
  5. jQuery.noop()方法
  6. Top 10 Digital Transformation Trends For 2020
  7. orbslam算法框架
  8. java 调用 libsvm_请问该如何调用libsvm 的java 库函数?
  9. vim实用技巧总结 [Linux]
  10. Adjoin the Networks
  11. github上比较好用的第三方库
  12. 计算机毕业设计-基于springboot的社区志愿者管理系统
  13. 未来是现在的将来时,在社科院杜兰金融管理硕士项目酝酿灿烂的明天
  14. Linux 安装 rar 解压
  15. MOSFET管应用总结
  16. PP-ShiTu: A Practical Lightweight Image Recognition System
  17. Elasticsearch 压测方案之 es rally 简介
  18. python中保留字的含义_Python中的变量之保留字与标识符
  19. 服务器控件之asp:Button的onClick属性
  20. IT人员求职招聘网站

热门文章

  1. hwclock command usage
  2. 盛夏七月,一起见证AI升级新高度
  3. 近千万播放量,却一单不出,TikTok带货常见思维误区
  4. 猎豹移动Q3工具业务收入达8.36亿元 豹来电个性化玩法异军突起
  5. 程序与生活的一点反思(常看而反思)
  6. 手机号码(验证,所在地查询)
  7. 光模块和光纤收发器相比,它的优势是什么?
  8. Dev-C++下载与安装(中文汉化版)
  9. 不一样的角度 解读微信小程序
  10. 什么是云大使及如何成为云大使