简单实现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 ...
随机推荐
- 第三章 Java面向对象(上)
3.1.概述 概述:面向对象是相对面向过程而言,面向对象和面向过程都是一种思想,面向过程强调的是功能行为,面向对象则是将功能封装进对象,强调具备功能的对象,面向对象是基于面向过程的.面向对象的三大特征 ...
- PHP strncasecmp() 函数
实例 比较两个字符串(不区分大小写): <?php高佣联盟 www.cgewang.comecho strncasecmp("Hello world!","hell ...
- 4.12 省选模拟赛 LCA on tree 树链剖分 树状数组 分析答案变化量
LINK:duoxiao OJ LCA on Tree 题目: 一道树链剖分+树状数组的神题. (直接nQ的暴力有50. 其实对于树随机的时候不难想到一个算法 对于x的修改 暴力修改到根. 对于儿子的 ...
- 【python接口自动化】- logging日志模块
前言:我们之前运行代码时都是将日志直接输出到控制台,而实际项目中常常需要把日志存储到文件,便于查阅,如运行时间.描述信息以及错误或者异常发生时候的特定上下文信息. logging模块介绍 Pyth ...
- Pytorch Autograd (自动求导机制)
Pytorch Autograd (自动求导机制) Introduce Pytorch Autograd库 (自动求导机制) 是训练神经网络时,反向误差传播(BP)算法的核心. 本文通过logisti ...
- Go:内存管理与内存清理
Illustration created for "A Journey With Go", made from the original Go Gopher, created by ...
- 009_go语言中的slices分片
代码演示 package main import "fmt" func main() { s := make([]string, 3) fmt.Println("emp: ...
- MapReduce之自定义OutputFormat
@ 目录 OutputFormat接口实现类 自定义OutputFormat使用场景及步骤 使用场景 自定义OutputFormat 案例实操 OutputFormat接口实现类 OutputForm ...
- spring boot 中使用spring security阶段小结
1 项目结构图 2 AnyUserDetailsService package com.fengyntec.config; import com.fengyntec.entity.UserEntity ...
- SSH安全免密码登录:ssh key
ssh key 使用非对称加密方式生成公钥和私钥 私钥存放在本地~/.ssh目录 公钥可以对外公开,放在服务器的~/.ssh/authorized_keys 1.linux平台生成ssh key ss ...