栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行插入和删除操作,允许操作的一端称为栈顶,不允许操作的称为栈底

因此需要的成员变量如下

int  *_stack;    //指向申请的空间的首地址
int top; //记录栈顶的位置
int size; //记录申请空间的大小

具体如下封装在类中

#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
class SeqStack
{
public:
SeqStack(int size=) //构造函数 初始化
{
_stack=new int[size];
_top=;
_size=size;
}
SeqStack(const SeqStack &src) // 拷贝构造函数(防止浅拷贝)
{
_stack=new int[src._size];
int i=;
for(;i<src._top;i++)
{
_stack[i]=src._stack[i];
}
_size=src._size;
_top=src._top;
}
SeqStack(SeqStack &&src) //右值拷贝函数 防止临时量的空间时间的浪费
{
_stack=src._stack;
_size=src._size;
_top=src._top;
src._stack=nullptr;
}
SeqStack & operator=(const SeqStack &src) //赋值构造函数 返回地址 实现连续赋值
{
if(this==&src)
{
return *this;
}
delete[]_stack;
_stack=new int[src._size];
int i=;
for(;i<src._top;i++)
{
_stack[i]=src._stack[i]; }
_size=src._size;
_top=src._top;
return *this;
}
SeqStack & operator=( SeqStack &&src) // 右值赋值构造函数 防止临时量对空间时间的浪费
{
delete []_stack;
_stack=src._stack;
_size=src._size;
_top=src._top;
src._stack=nullptr;
return *this;
}
~SeqStack() // 析构函数
{
delete[]_stack;
_stack=nullptr;
}
void push(int val) // 栈顶插入
{
if(full())
{
resize(); // 调用2倍扩容
}
_stack[_top]=val;
_top++;
}
void pop() // 栈顶删除
{
if(empty())
{
return; }
_top--;
}
int top() //返回栈顶元素
{
return mpstack[_top-];
}
bool empty() // 是否为空
{
return _top==;
}
bool full() // 是否为满
{
return _top==_size;
}
private:
int *_stack;
int _top;
int _size;
void resize() // 2倍扩容函数
{
int *s=new int[_size*];
int i=;
for(;i<_size;i++)
{
s[i]= _stack[i];
}
delete []_stack;
_stack=s;
_size=*_size;
}
};
int main()
{
SeqStack st1();
SeqStack st2(st1);
SeqStack st3=st1;
st2=st1;
st1.push();
cout<<st1.top()<<endl;
cout<<endl;
return ;
}

最新文章

  1. Python 生成器与迭代器 yield 案例分析
  2. python脚本后台运行
  3. PhotoSwipe - 移动开发必备的 iOS 风格相册
  4. matlab 非平稳变化时域分析
  5. 第91讲:Akka第一个案例动手实战架构设计
  6. &lt;转&gt;python version 2.7 required,which was not found in the registry
  7. Substrings(hd1238)
  8. Mschart应用之曲线图表spline
  9. C# 汉语转拼音
  10. 末学者笔记——SAMBA服务、FTP服务讲解
  11. hdu 1372 BFS
  12. Spring Boot 特性以及代码模板实例
  13. 【python】——购物车
  14. centos7下安装docker(9.1容器对资源的使用限制-CPU)
  15. JS 去除重复元素的方法
  16. Cloud Native Weekly | Kubernetes 1.13发布
  17. Mybatis知识(4)
  18. Redis学习一:Nosql入门和概述
  19. java map遍历并删除特定值
  20. jvm载入过程

热门文章

  1. [编码解码] 关于AES加解密中CBC模式的IV初始化向量的安全性问题
  2. 手写HashMap实践
  3. face morhper
  4. Problems with Localtime
  5. blaze advisor模型部署工具
  6. Flutter ------- WebView加载网页
  7. MYSQL双主模式,触发器(trigger)不可见问题
  8. 查看Oracle中是否有锁表
  9. ES6深入浅出-6 ES 6 模块-2.babel webpack parcel
  10. 虚拟机的Vmtools