1.基本概念

  栈中的元素遵守“先进后出”的原则(LIFO,Last In First Out)

  只能在栈顶进行插入和删除操作

  压栈(或推入、进栈)即push,将数据放入栈顶并将栈顶指针加一

  出栈(或弹出)即pop,将数据从栈顶删除并将栈顶指针减一

  栈的基本操作有:poppush判断空获取栈顶元素求栈大小

  

2.构造栈

  可以使用数组构造栈,也可以使用单向链表构造,我觉得使用单向链表更加灵活方便,下面的例子我使用单向链表来构造栈。

  单向链表的头插法比较适合,链表头作为栈顶:

  节点的数据结构:

template<class T>
struct node
{
T value; //储存的值
node<T>* next; node() :next(nullptr){} //构造函数
node(T t) :value(t), next(nullptr){}
};

  用模板类构造一个简单的stack类:

template<class T>
class myStack
{
int cnts; //入栈数量
node<T> *head; //栈的头部
public: myStack(){ cnts = ; head = new node<T>; }
void stackPush(T arg); //入栈
T stackPop(); //出栈
T stackTop(); //获取栈顶元素 void printStack(); //打印栈
int counts(); //获取栈内元素个数
bool isEmpty(); //判断空
};
template<class T>
void myStack<T>::stackPush(T arg)
{
node<T> *pnode = new node<T>(arg); //申请入栈元素的空间
pnode->next = head->next;
head->next = pnode;
cnts++;
}
template<class T>
T myStack<T>::stackPop()
{
if (head->next!=nullptr)
{
node<T>* temp = head->next;
head->next = head->next->next;
T popVal = temp->value;
delete temp;
return popVal;
}
}
template<class T>
T myStack<T>::stackTop()
{
if (head->next!=nullptr)
{
return head->next->value;
}
}
template<class T>
void myStack<T>::printStack()
{
if (head->next != nullptr)
{
node<T>* temp = head;
while (temp->next != nullptr)
{
temp = temp->next;
cout << temp->value << endl;
}
}
}
template<class T>
int myStack<T>::counts()
{
return cnts;
}
template<class T>
bool myStack<T>::isEmpty()
{
if (cnts)
return false;
else
return true;
}

GitHub:https://github.com/whlook/stackTemplate

   

C++:栈(stack)的模板类实现的更多相关文章

  1. 栈(stack),C++模板实现

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  2. C++模板类[初步]

    /* * stacktp.h * * Created on: 2014年3月29日 * Author: */ /** * - 模板类的概念,与使用 * -# export template <c ...

  3. 使用js栈stack类的实现

    使用js栈stack类的实现 /*使用栈stack类的实现*/ function stack() { this.dataStore = [];//保存栈内元素,初始化为一个空数组 this.top = ...

  4. C++之Stack模板类

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

  5. STL(标准模板库) 中栈(stack)的使用方法

    STL 中栈的使用方法(stack) 基本操作: stack.push(x)  将x加入栈stack中,即入栈操作 stack.pop()  出栈操作(删除栈顶),只是出栈,没有返回值 stack.t ...

  6. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  7. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

  8. STL标准模板类

    STL,中文名标准模板库,是一套C++的标准模板类(是类!),包含一些模板类和函数,提供常用的算法和数据结构. STL分为:迭代器,容器,适配器,算法以及函数对象. --迭代器是一种检查容器内元素并遍 ...

  9. c++中队列queue和栈stack的基本操作

    1.queue 模板类的定义在<queue>头文件中. 定义queue 对象的示例代码如下:queue<int> q1;queue<double> q2; queu ...

随机推荐

  1. PKU 1201 Intervals(差分约束系统+Spfa)

    题目大意:原题链接 构造一个集合,这个集合内的数字满足所给的n个条件,每个条件都是指在区间[a,b]内至少有c个数在集合内.问集合最少包含多少个点.即求至少有多少个元素在区间[a,b]内. 解题思路: ...

  2. dubbo总结

     一 .Dubbo产生背景 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键. 垂直应用架构当访 ...

  3. c++之旅:函数模板

    函数模板 函数模板主要是泛型在函数的中的应用,通过泛型可以让函数处理各种各样的数据类型 简单的列子 #include <iostream> using namespace std; tem ...

  4. [转]关于Navicat和MYSQL字符集不统一出现的中文乱码问题

    原文链接:关于Navicat和MYSQL字符集不统一出现的中文乱码问题 最近遇到一串关于MYSQL中文乱码的问题,问题背景是这样的: 在此之前,服务器上安装好MySQL之后就立马重新配置了字符集为ut ...

  5. java之继承中的构造方法

    继承中的构造方法  1.子类的构造过程中必须调用其基类的构造方法. 2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法. 2.1.使用this(argumen ...

  6. 【C#】枚举和字符串以及数字之间的互相转换

    准备条件: ①枚举类型: public enum enumColor { Red = , Yellow, Green, Blue, White, Black } ②以下状态都是理想状态,并未对错误数据 ...

  7. [随记][asp.net基础]Page_Load和OnLoad

    标题:[随记][asp.net基础]Page_Load和OnLoad 一.前言 东西好久不用.不想,就会忘,所以没办法,只好记下来. 二.正文 aspx页面加载的时候会自动执行Page_Load,也会 ...

  8. 20135302魏静静——linux课程第五周实验及总结

    linux课程第五周实验及总结 一.学习总结 给MenuOS增加time和time-asm命令(四步操作命令) rm menu -rf 强制删除git clone http://github.com/ ...

  9. C++实现最基本的LRUCache服务器缓存

    目录: 一.介绍: 二.数据结构: 三.主要的两个函数接口Put()和Get(): 四.C++代码实现: 后台开发必备知识,不过我不是搞这个的,只是因为很久以前就想写这些东西,事情多,拖到现在.写的过 ...

  10. 1.1_Django简介及安装

    Django的安装 Django安装 文档:https://docs.djangoproject.com/en/1.8/ pip install django 可以到这个网站查看可用的django版本 ...