2020-11-01栈的顺序栈实现
今天是栈类的实现,是顺序栈的实现(今天的不是链栈的实现),即使用一段连续的内存对栈进行存储,这里使用的是动态数组对栈进行存储,不使用静态数组对栈进行存储,原因在代码中已经说明。静态数组维护栈时,当要扩展时,静态数组的数组名是一个常指针,是一个不可修改的值,不可以当左值,所以采用动态数组的方式,用时间换效率。博主今天写的少,老师论文下来了,所以只能粗糙实现下基本功能。代码粗糙,望海涵。
#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栈的顺序栈实现相关推荐
- java栈实现--顺序栈
顺序栈 一.实现过程 1.提供栈接口:IStack 2.提供顺序栈的实现:ShunxuStack 3.提供判空(isEmpty).栈深度(length)等计算方法. 4.提供清空栈的方法:clear( ...
- 【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现
灵魂拷问:为什么要学数据结构? 数据结构,直白地理解,就是研究数据的存储方式.数据存储只有一个目的,即为了方便后期对数据的再利用.因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好 ...
- 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)
目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...
- c语言顺序栈完整程序,顺序栈的基本操作(C语言)
由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址 但是这种用法好像C并不 ...
- 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)
目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...
- c语言建立栈(顺序栈、双栈和链式栈)
c语言建立栈 顺序存储 栈的顺序存储定义 初始化栈 入栈操作 出栈操作 其余操作 读取栈顶元素 栈中元素个数 栈是否为空 双栈 双栈的顺序存储结构定义 建立双栈 判断栈为空 进栈操作 出栈操作 链式栈 ...
- 数据结构--栈--共享顺序栈
共享顺序栈:内部也是一个数组 将两个栈放在数组的两端,一个从数组首端开始压栈,一个从数组尾部开始压栈,等到两边栈顶在中间相遇时,栈满. 共享顺序栈在某些情况下可以节省空间. 头文件 sharingSt ...
- java顺序栈_顺序栈的基本操作(入栈和出栈)
顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...
- 卜若的代码笔记-数据结构系列-第十章:栈一.顺序栈(数组栈)
1.栈有两种写法,一种是以数组为躯干的顺序栈,一种是以链表为躯干的链式栈. 1.1栈的操作 1.1.1 出栈pop()函数 允许栈出,栈出之后,顶数据有移除操作. 时间复杂度o(1) 1.1.2 入栈 ...
- 数据结构栈(顺序栈、链栈、插入push、删除pop)、队(循环队,链队、入队push,出队pop)知识点梳理
数据结构栈知识点梳理 一 栈的定义 栈(stack)是限定仅在表尾进行插入和删除操作的线性表 不含任何元素的栈称为空栈 允许插入和删除的一端成为栈顶(top),另一端称为栈底(bottom) 具有LI ...
最新文章
- 2021-2027全球与中国奶牛冻精市场现状及未来发展趋势
- pytorch lstm crf 代码理解 重点
- 独家 | Python利用深度学习进行文本摘要的综合指南(附教程)
- oracle 新建TNS监听,oracle for windows 监听问题之TNS-12545
- jQuery.noop()方法
- Top 10 Digital Transformation Trends For 2020
- orbslam算法框架
- java 调用 libsvm_请问该如何调用libsvm 的java 库函数?
- vim实用技巧总结 [Linux]
- Adjoin the Networks
- github上比较好用的第三方库
- 计算机毕业设计-基于springboot的社区志愿者管理系统
- 未来是现在的将来时,在社科院杜兰金融管理硕士项目酝酿灿烂的明天
- Linux 安装 rar 解压
- MOSFET管应用总结
- PP-ShiTu: A Practical Lightweight Image Recognition System
- Elasticsearch 压测方案之 es rally 简介
- python中保留字的含义_Python中的变量之保留字与标识符
- 服务器控件之asp:Button的onClick属性
- IT人员求职招聘网站