简单实现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 ...
随机推荐
- 设置x 轴斜体(每次我都百度,这次单独为它发一个)
plt.xticks(rotation = 45) 2020-06-07
- WPF 半透明 模糊效果 Aero效果(1)
先看看效果图 目前网上找到了2种实现方式,一种是 .NET Framework4.5及以后有自带的 WindowChrome 效果,一种是 WindowsAPI dwmapi.dll ,但这两种在 ...
- Python time ctime()方法
描述 Python time ctime() 函数把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式.高佣联盟 www.cgewang.com 如果参数未给或者为None的时候, ...
- Skill 脚本演示 ycCommonCenterMos.skl
https://www.cnblogs.com/yeungchie/ ycCommonCenterMos.skl 自动生成一个共质心差分对 Mos ,可以自定布局类型. 回到目录
- TearmQuery()
lucene 中的 TearmQuery() 在.search( tearmQuery, q)查询时 比较矫情 q只能是小写
- 求解最长递增子序列(LIS) | 动态规划(DP)+ 二分法
1.题目描述 给定数组arr,返回arr的最长递增子序列. 2.举例 arr={2,1,5,3,6,4,8,9,7},返回的最长递增子序列为{1,3,4,8,9}. 3.解答 ...
- Python爬虫的经典多线程方式,生产者与消费者模型
在之前的文章当中我们曾经说道,在多线程并发的场景当中,如果我们需要感知线程之间的状态,交换线程之间的信息是一件非常复杂和困难的事情.因为我们没有更高级的系统权限,也没有上帝视角,很难知道目前运行的状态 ...
- WebService简单Demo
看了网上好多关于webservice的例子,基本上对初学者来说都是模棱两可云里雾里,现在,我将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webserv ...
- Linux学习笔记之如何在图形界面旁边把终端添加显示出来
首先旁边无终端,我们可以点击ctrl+alt+t,可以把终端显示出来 右键点击终端,然后点击Lock to Launcher,然后完成 PS:不想显示也可以点击其右键,选择Unlock from La ...
- 6、单例模式 Singleton模式 只有一个实例 创建型模式
1.了解Singleton模式 程序在运行时,通常都会生成很多实例.例如,表示字符串的java . lang . string类的实例与字符串是- -对- -的关系,所以当有1000个字符串的时候,会 ...