简单实现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 ...
随机推荐
- Android中Activity启动模式探索
Android中启动模式(launchMode)分为standard, singleTop, singleTask, singleInstance四种,可通过AndroidManifest.xml文件 ...
- Idea快捷生成serialVersionUID
Java对象实现了Serializable接口,是需要创建serialVersionUID,避免此对象在序列化.反序列化时出现问题.但idea默认没有生成serialVersionUID的设置,需要手 ...
- C 语言学习 --2
memset Declaration: void *memset(void *str, int c, size_t n); Copies the character c (an unsigned ch ...
- jmeter如何设置全局变量
场景:性能测试或者接口测试,如果想跨线程引用(案例:A线程组里面的一个输出,是B线程组里面的一个输入,这个时候如果要引用),这个时候你就必须要设置全局变量;全链路压测也需要分不同场景,通常情况,一个场 ...
- 当Django模型迁移时,报No migrations to apply 问题时
前言:当更改model时在次迁移是不是经常报此类错误,解决以下两点便可以更新成功 1. 删除修改模型对应的app应用下的migrations中的生成文件 2. 进入数据库,找到django_migra ...
- IDEA使用GsonFormat
安装GsonFormat插件 因为下载了最新版的idea2020.1.3发现GsonFormat在Idea商店不见了,所以去jetbrains官网下载jar包来安装插件https://plugins. ...
- Android 进度条(ProgressBar)和拖动条(Seekbar)补充“自定义组件”(总结)
这周结束了,我也码了一周的字,感觉还是很有种脚踏实地的感觉的,有时间就可以看看自己的总结再查漏补缺,一步一个脚印,做出自己最理想的项目. 今天我们讲两点: 1.ProgressBar: 其实前面也稍微 ...
- 009_go语言中的slices分片
代码演示 package main import "fmt" func main() { s := make([]string, 3) fmt.Println("emp: ...
- JS 动画笔记
动画实现原理 核心原理:通过定时器setInterval()不断地移动盒子的位置 缓动动画原理 缓动的核心算法~~~~~~~~~~(目标值-现在的位置)/10 停止的条件是~~ ...
- Java基础高级篇 NIO
nio模型与io模型的对比 netty 是什么 怎么使用