简单实现C++Stack模板
栈的特点是先进后出以及只能在栈顶进行插入和删除操作
本次实现的栈的基本操作:
1)弹栈
2)压栈
3)求栈大小
4)求栈容量
5)判断栈空
6)获取栈顶元素
1、用数组的方式实现栈基本操作
/**
*
*作者:Ycute
*时间:2019-11-15-09.55.27
*题目题意简单描述:用C++模板实现栈
*/ #include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std; template<typename T>
class Stack{
public:
Stack();
~Stack();
public:
T top();//获得栈顶元素
void push(T t);//入栈
T pop();//出栈
bool is_empty();//判断栈是否为空
int size();//栈大小
int capa();//栈容量
private:
int count;//栈元素数量
int capacity;//栈容量
T *array;//底层为数组
}; template<typename T>
Stack<T>::Stack(){
capacity=;
array=new T[capacity];
count=;
} template<typename T>
Stack<T>::~Stack(){
delete []array;
} /*栈空判断*/
template<typename T>
bool Stack<T>::is_empty(){
return count==;
}
/*获得栈顶元素*/
template<typename T>
T Stack<T>::top(){
if(count!=){
return array[count-];
}
return -;
}
/*入栈*/
template<typename T>
void Stack<T>::push(T t){
if(count!=capacity){
array[count++]=t;
}
}
/*出栈*/
template<typename T>
T Stack<T>::pop(){
if(count!=){
return array[--count];
}
return -;
} /*获得栈大小*/
template<typename T>
int Stack<T>::size(){
return count;
} template<typename T>
int Stack<T>::capa(){
return capacity;
} int main(){
Stack<int> s1;
cout<<"栈大小"<<s1.size()<<endl;
cout<<"栈容量"<<s1.capa()<<endl;
s1.push();
s1.push();
s1.push();
cout<<"栈是否为空"<<s1.is_empty()<<endl;
cout<<"出栈"<<s1.pop()<<endl;
cout<<"栈顶"<<s1.top()<<endl;
cout<<"栈大小"<<s1.size()<<endl;
cout<<"栈容量"<<s1.capa()<<endl;
return ;
}
2、用单链表的方式实现栈基本操作
用一个指针,采用头插法,实现的入栈出栈。
/**
*
*作者:YCute
*时间:2019-11-15-10.40.56
*题目题意简单描述:用单链表实现栈
*/ #include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std; /*栈数据节点*/
template<typename T>
struct Node{
Node(T t):value(t),next(NULL){};
Node():next(NULL){};
T value;
Node<T> *next;
}; template<typename T>
class Stack{
public:
Stack();
~Stack();
public:
T top();//获得栈顶元素
T pop();//出栈
void push(T t);//入栈
int size();//栈大小
bool is_empty();//判断栈空
private:
int count;
Node<T>* head;
}; template<typename T>
Stack<T>::Stack(){
count=;
head = new Node<T>();
head->next = nullptr;
} template<typename T>
Stack<T>::~Stack(){
while(head->next!=nullptr){
Node<T> *nodeDel=head->next;
head->next=head->next->next;
delete nodeDel;
}
} /*获得栈顶元素*/
template<typename T>
T Stack<T>::top(){
if(head->next!=nullptr){
return head->next->value;
}
} /*出栈*/
template<typename T>
T Stack<T>::pop(){
if(head->next!=nullptr){
Node<T> *nodeDel=head->next;
head->next=head->next->next;
T value=nodeDel->value;
delete nodeDel;
--count;
return value;
}
} /*入栈*/
template<typename T>
void Stack<T>::push(T t){
Node <T> *subNode=new Node<T>(t);
subNode->next=head->next;
head->next=subNode;
++count;
} /*获得栈元素*/
template<typename T>
int Stack<T>::size(){
return count;
} /*判断栈空*/
template<typename T>
bool Stack<T>::is_empty(){
return count==;
} int main(){
Stack<int> s1;
s1.push();
s1.push();
s1.push();
s1.push();
cout<<"栈大小"<<s1.size()<<endl;
cout<<"栈顶元素"<<s1.top()<<endl;
while(!s1.is_empty()){
cout<<" "<<s1.pop();
}
cout<<"栈大小"<<s1.size()<<endl;
return ;
}
简单实现C++Stack模板的更多相关文章
- 简单的Verilog测试模板结构
这里记录一下曾经用到的简单的测试模板,如下所示: //timescale `timescale 1ns/1ns module tb_module(); //the Internal motivatio ...
- 从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...
- 缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...
- 简单的html渲染模板引擎
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 一个LaTeX 中文文档的简单而实用的模板
网上找的一个latex中文模板,感觉很简单,在我机器上有点小问题,完善记录一下. %要运行该模板,LaTex需要安装CJK库以支持汉字. %字体大小为12像素,文档类型为article %如果你要写论 ...
- C++之Stack模板类
假设有这样一种情况:某人将一车文件交给小王.倘若小王的抽屉是空的,那么小王从车上取出最上面的文件将其放入抽屉:倘若抽屉是满的,小王从抽屉中取出最上面的文件,放入垃圾篓:倘若抽屉即不空也未满,那么小王抛 ...
- 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)
An easy problem A Time Limit: 1000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...
- 一个简单的inno setup模板
一.模板代码 基本功能包括多路径安装.多语言.自定义图标. [Setup] ShowLanguageDialog=yes AppCopyright=Copyright Reserved(C) , 36 ...
- Infix to postfix 用stack模板,表达式没有括号
#include<stack> #include<iostream> #include<string> using namespace std; //优先级判断 c ...
随机推荐
- 微服务迁移记(五):WEB层搭建(2)-SpringSecurity集成
一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 接下来,集成SpringSecruity,实现用户 ...
- 架构师写的BUG,非比寻常
部门新来了个架构师,BAT背景,住在三环,开宝马上班,有车位. 小伙话不多,但一旦说话斩钉截铁,带着无法撼动的自信.原因就是,有他着数亿高并发经验,每一秒钟的请求,都是其他企业运行一年也无法企及的.这 ...
- Ubuntu chmod 命令修改文件chmod读写权限
Ubuntu chmod 命令可以用来修改文件或文件夹的读写权限 chmod 命令有两种使用方式 一. chmod [u/g/o/a] [+/-/=] [r/w/x] filename [ ]里都代表 ...
- bzoj 1515 [POI2006]Lis-The Postman 有向图欧拉回路
LINK:Lis-The Postman 看完题觉得 虽然容易发现是有向图欧拉回路 但是觉得很难解决这个问题. 先分析一下有向图的欧拉回路:充要条件 图中每个点的入度-出度=0且整张图是一个强连通分量 ...
- bzoj 2780 [Spoj]8093 Sevenk Love Oimaster
LINK:Sevenk Love Oimaster 询问一个模式串在多少个文本串中出现过. 考虑广义SAM 统计这种数量问题一般有三种做法. 一种 暴力bitset 这道题可能可以过? 一种 暴力跳p ...
- x86架构: 硬件启动过程分析(附引导启动代码)
用户按下开机键,几秒的时间,都经历了啥? 1.cpu各个寄存器赋初始值,cs.base=0xffff0000, eip=0xfff0,其他寄存器都是0,这时cs:ip得到的物理地址:0xfffffff ...
- 【机器学习的Tricks】随机权值平均优化器swa与pseudo-label伪标签
文章来自公众号[机器学习炼丹术] 1 stochastic weight averaging(swa) 随机权值平均 这是一种全新的优化器,目前常见的有SGB,ADAM, [概述]:这是一种通过梯度下 ...
- Linux的VMWare中Centos7文件权限管理chown 和 chmod
文件管理 chown chmod 1./根目录下目录功能划分 /boot/ 存放系统启动程序菜单及核心 --可以单独使用文件系统 /etc/ 存放系统中所有配置文件 /bin/ ...
- day9.关于文件的操作
一.文件操作 """ fp = open("文件名",mode="模式",encoding="utf-8") ...
- JVM进行篇
结合字节码指令理解Java虚拟机栈和栈帧 栈帧:每个栈帧对应一个被调用的方法,可以理解为一个方法的 ...