栈(链式存储) C++模板实现

时间:2022-09-14 09:48:35
#include <iostream>
using namespace std; //栈结点类
template <typename T>
class stackNode{
private:
T data; //结点数据部分
stackNode<T> *next; //指向下一个结点
public:
//构造函数,初始化成员变量
stackNode(T d = 0 , stackNode<T> * n=NULL){
data = d;
next = n;
}
//设置成员变量data
void setData(T d){
data = d;
}
//设置成员变量next
void setNext(stackNode<T> * n){
next = n;
}
//返回成员变量data
T getData() const{
return data;
}
//返回成员变量next
stackNode<T> *getNext() const{
return next;
}
}; //栈类
template <typename T>
class stackList{
private:
stackNode<T> *top; //指向栈顶结点,也是链表的头指针
int num; //栈结点个数
public:
//构造函数
stackList(){
top=NULL;
num=0;
}
//析构函数,释放栈中所有结点,其实也就是释放整个链表
~stackList(){
while(top){
stackNode<T> * p = top;
top = top->getNext();
delete p;
}
}
//将结点x压入栈
void push(stackNode<T> & x);
//弹出栈顶结点
void pop();
//获得栈顶结点
stackNode<T> & getPeek()const;
//栈是否为空
bool isEmpty() const;
//返回栈中元素个数
int getNum() const{
return num;
}
//打印栈中元素
void printAll()const;
}; //将结点x压入栈,实现部分
template <typename T>
void stackList<T>::push(stackNode<T> & x){
stackNode<T> *p = top;
top = &x;
x.setNext(p);
num++;
} //弹出栈顶结点,实现部分
template <typename T>
void stackList<T>::pop(){
if(isEmpty()){
cerr<<"栈为空,弹出失败"<<endl;
exit(1);
}
stackNode<T> *p = top;
top=top->getNext();
delete p;
num--;
} //获得栈顶结点,实现部分
template <typename T>
stackNode<T> & stackList<T>::getPeek() const{
if(isEmpty()){
cerr<<"栈为空"<<endl;
exit(1);
}
return *top;
} //栈是否为空,实现部分
template <typename T>
bool stackList<T>::isEmpty() const{
return top==NULL;
} //打印栈中元素,实现部分
template <typename T>
void stackList<T>::printAll() const{
stackNode<T> *p = top;
while(p){
cout<<p->getData()<<endl;
p=p->getNext();
}
} void main(){
stackNode<int> *p1 = new stackNode<int>(1); //创建第一个结点,值为1
stackNode<int> *p2 = new stackNode<int>(2); //创建第一个结点,值为2
stackNode<int> *p3 = new stackNode<int>(3); //创建第一个结点,值为3
stackNode<int> *p4 = new stackNode<int>(4); //创建第一个结点,值为4
stackNode<int> *p5 = new stackNode<int>(5); //创建第一个结点,值为5
stackList<int> a; //创建栈
a.push(*p1); //压入第一个结点
a.push(*p2); //压入第二个结点
a.push(*p3); //压入第三个结点
a.push(*p4); //压入第四个结点
a.push(*p5); //压入第五个结点
a.pop(); //弹出栈顶元素
a.printAll(); //打印栈中元素
}

栈(链式存储) C++模板实现

栈(链式存储) C++模板实现的更多相关文章

  1. 基于链式链表的栈链式存储的C风格实现

    链式链表的头文件与CPP文件见前文 头文件: #ifndef _LINKSTACK_H_ #define _LINKSTACK_H_ typedef void LinkStack; //创建一个栈 L ...

  2. C 栈 链式存储

    #ifndef _MY_LINKSTACK_H_ #define _MY_LINKSTACK_H_ typedef void LinkStack; LinkStack* LinkStack_Creat ...

  3. 栈的链式存储 - API实现

    基本概念 其它概念详情參看前一篇博文:栈的顺序存储 - 设计与实现 - API实现 这里也是运用了链表的链式存储API高速实现了栈的API. 代码: // linkstack.h // 链式存储栈的A ...

  4. C&plus;&plus;编程练习&lpar;4&rpar;----&OpenCurlyDoubleQuote;实现简单的栈的链式存储结构&OpenCurlyDoubleQuote;

    如果栈的使用过程中元素数目变化不可预测,有时很小,有时很大,则最好使用链栈:反之,如果它的变化在可控范围内,使用顺序栈会好一些. 简单的栈的链式存储结构代码如下: /*LinkStack.h*/ #i ...

  5. 【Java】 大话数据结构&lpar;6&rpar; 栈的顺序与链式存储

    本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...

  6. 栈的顺序存储和链式存储c语言实现

    一. 栈 栈的定义:栈是只允许在一端进行插入或删除操作的线性表. 1.栈的顺序存储 栈顶指针:S.top,初始设为-1 栈顶元素:S.data[S.top] 进栈操作:栈不满时,栈顶指针先加1,再到栈 ...

  7. &lbrack;置顶&rsqb; ※数据结构※&srarr;&star;线性表结构(queue)&star;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;优先队列 链式存储结构(queue priority list)(十二)

    优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...

  8. Java实现链式存储的二叉树

    二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...

  9. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

  10. C&plus;&plus;编程练习&lpar;6&rpar;----&OpenCurlyDoubleQuote;实现简单的队列的链式存储结构&OpenCurlyDoubleQuote;

    队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出.简称链队列. 实现代码如下: /* LinkQueue.h 头文件 */ #include<iostream> #defi ...

随机推荐

  1. Sqlite 管理工具收藏

    1.SQLite Administrator   http://download.orbmu2k.de/files/sqliteadmin.zip 2.SQLite2009Pro-v3.8.3.1 h ...

  2. QC学习三:Excel数据导入导出QC操作流程

    环境: QC9 WindowsXP Office2007   1. 准备 1.通过Excel导入QC,需要下载Microsoft Excel Add-in: http://update.externa ...

  3. STL之vetor 排序

    1 STL提供的Sort 算法 C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数, ...

  4. Lua中cJson的读写

    这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能比纯Lua库要高10~20倍.并且Lua Json完全支持UTF-8,无需以来其他非Lua/LuaJit相关包. 环境安装 ...

  5. CGDataCmd

    1,"Get Inf Joint from file" 选择文件中储存的骨骼信息; 2,"Export skinWeight"   导出权重;  3,&quot ...

  6. jdk完全卸载(亲测jdk1&period;7&period;0&lowbar;80在win7)

    1.从控制面板里删除java程序 2.删除注册表:HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\ 3.删除C:\Windows\System32 和 C:\Windows\ ...

  7. linux下配置java环境及问题

    一:下载jdk 下载稳定版本http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html ...

  8. 开发环境eclipse for Mac 下的常用快捷键汇总&lpar;基本参照Win系,将Ctrl换为Command&rpar;

    最近迁移开发环境到Mac下,在豆瓣看到一个常用快捷键,去掉废话直接上干货 Command + O:显示大纲 Command + 1:快速修复 Command + D:删除当前行 Command + O ...

  9. Java 前台后台数据传递、中文乱码解决方法

    1.向前台传递数据;2.向后台传递数据;3.ajax post 提交数据到服务端时中文乱码解决方法;4.数组类型参数传递; 1.向前台传递数据:1.1 字符串数据传递:  这种方式只是单一的向前台传递 ...

  10. Spring学习(三)——集成 Velocity

    上篇文章http://www.cnblogs.com/wenjingu/p/3822989.html我们使用Gradle构建了一个简单的Spring MVC Web应用程序, 本篇将在上篇的基础上将j ...