栈的特点是先进后出以及只能在栈顶进行插入和删除操作

本次实现的栈的基本操作:

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模板的更多相关文章

  1. 简单的Verilog测试模板结构

    这里记录一下曾经用到的简单的测试模板,如下所示: //timescale `timescale 1ns/1ns module tb_module(); //the Internal motivatio ...

  2. 从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

    一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...

  3. 缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

    一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...

  4. 简单的html渲染模板引擎

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. 一个LaTeX 中文文档的简单而实用的模板

    网上找的一个latex中文模板,感觉很简单,在我机器上有点小问题,完善记录一下. %要运行该模板,LaTex需要安装CJK库以支持汉字. %字体大小为12像素,文档类型为article %如果你要写论 ...

  6. C++之Stack模板类

    假设有这样一种情况:某人将一车文件交给小王.倘若小王的抽屉是空的,那么小王从车上取出最上面的文件将其放入抽屉:倘若抽屉是满的,小王从抽屉中取出最上面的文件,放入垃圾篓:倘若抽屉即不空也未满,那么小王抛 ...

  7. 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)

    An easy problem A Time Limit: 1000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...

  8. 一个简单的inno setup模板

    一.模板代码 基本功能包括多路径安装.多语言.自定义图标. [Setup] ShowLanguageDialog=yes AppCopyright=Copyright Reserved(C) , 36 ...

  9. Infix to postfix 用stack模板,表达式没有括号

    #include<stack> #include<iostream> #include<string> using namespace std; //优先级判断 c ...

随机推荐

  1. 微服务迁移记(五):WEB层搭建(2)-SpringSecurity集成

    一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 接下来,集成SpringSecruity,实现用户 ...

  2. 架构师写的BUG,非比寻常

    部门新来了个架构师,BAT背景,住在三环,开宝马上班,有车位. 小伙话不多,但一旦说话斩钉截铁,带着无法撼动的自信.原因就是,有他着数亿高并发经验,每一秒钟的请求,都是其他企业运行一年也无法企及的.这 ...

  3. Ubuntu chmod 命令修改文件chmod读写权限

    Ubuntu chmod 命令可以用来修改文件或文件夹的读写权限 chmod 命令有两种使用方式 一. chmod [u/g/o/a] [+/-/=] [r/w/x] filename [ ]里都代表 ...

  4. bzoj 1515 [POI2006]Lis-The Postman 有向图欧拉回路

    LINK:Lis-The Postman 看完题觉得 虽然容易发现是有向图欧拉回路 但是觉得很难解决这个问题. 先分析一下有向图的欧拉回路:充要条件 图中每个点的入度-出度=0且整张图是一个强连通分量 ...

  5. bzoj 2780 [Spoj]8093 Sevenk Love Oimaster

    LINK:Sevenk Love Oimaster 询问一个模式串在多少个文本串中出现过. 考虑广义SAM 统计这种数量问题一般有三种做法. 一种 暴力bitset 这道题可能可以过? 一种 暴力跳p ...

  6. x86架构: 硬件启动过程分析(附引导启动代码)

    用户按下开机键,几秒的时间,都经历了啥? 1.cpu各个寄存器赋初始值,cs.base=0xffff0000, eip=0xfff0,其他寄存器都是0,这时cs:ip得到的物理地址:0xfffffff ...

  7. 【机器学习的Tricks】随机权值平均优化器swa与pseudo-label伪标签

    文章来自公众号[机器学习炼丹术] 1 stochastic weight averaging(swa) 随机权值平均 这是一种全新的优化器,目前常见的有SGB,ADAM, [概述]:这是一种通过梯度下 ...

  8. Linux的VMWare中Centos7文件权限管理chown 和 chmod

    文件管理 chown  chmod 1./根目录下目录功能划分 /boot/  存放系统启动程序菜单及核心   --可以单独使用文件系统     /etc/   存放系统中所有配置文件 /bin/   ...

  9. day9.关于文件的操作

    一.文件操作 """ fp = open("文件名",mode="模式",encoding="utf-8") ...

  10. JVM进行篇

                                              结合字节码指令理解Java虚拟机栈和栈帧          栈帧:每个栈帧对应一个被调用的方法,可以理解为一个方法的 ...