栈(链式存储) C++模板实现
#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风格实现
链式链表的头文件与CPP文件见前文 头文件: #ifndef _LINKSTACK_H_ #define _LINKSTACK_H_ typedef void LinkStack; //创建一个栈 L ...
- C 栈 链式存储
#ifndef _MY_LINKSTACK_H_ #define _MY_LINKSTACK_H_ typedef void LinkStack; LinkStack* LinkStack_Creat ...
- 栈的链式存储 - API实现
基本概念 其它概念详情參看前一篇博文:栈的顺序存储 - 设计与实现 - API实现 这里也是运用了链表的链式存储API高速实现了栈的API. 代码: // linkstack.h // 链式存储栈的A ...
- C++编程练习(4)----“实现简单的栈的链式存储结构“
如果栈的使用过程中元素数目变化不可预测,有时很小,有时很大,则最好使用链栈:反之,如果它的变化在可控范围内,使用顺序栈会好一些. 简单的栈的链式存储结构代码如下: /*LinkStack.h*/ #i ...
- 【Java】 大话数据结构(6) 栈的顺序与链式存储
本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...
- 栈的顺序存储和链式存储c语言实现
一. 栈 栈的定义:栈是只允许在一端进行插入或删除操作的线性表. 1.栈的顺序存储 栈顶指针:S.top,初始设为-1 栈顶元素:S.data[S.top] 进栈操作:栈不满时,栈顶指针先加1,再到栈 ...
- C语言- 基础数据结构和算法 - 栈的链式存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)
优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...
- Java实现链式存储的二叉树
二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...
- javascript实现数据结构:线性表--线性链表(链式存储结构)
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...
随机推荐
- 块设备驱动之NAND FLASH驱动程序
转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/25240909 一.框架总结 watermark/2/text/aHR0cDov ...
- 【shell】while read line 与for循环的区别
http://m.blog.itpub.net/22664653/viewspace-1175858/
- ClientKey实现登录QQ空间,并设置背景音乐
ClientKey大家都知道的,通过webbrowser登录后取得Cookie并计算出GTK,即可操作空间的POST. 源代码中引用了苏飞的Http类库,自己修改添加了一些拓展方法. 下载地址:htt ...
- oracle中对LONG列进行查询
SQL> CREATE TABLE T_LONG (ID NUMBER, LONG_COL LONG); 表已创建. SQL> INSERT INTO T_LONG VALUES (1, ...
- 按字母顺序排序的 arcpy.mapping 类列表
arcpy.mapping 类可使用地图文档 (.mxd) 或图层文件 (.lyr) 中的不同对象类型的各种方法和属性.此文档可专门用作快速参考.有关详细信息,请使用链接跳转至各帮助页面. arcpy ...
- Unicode 编码解码
1. Regex.Unescape(str);返回Unicode解码,非Unicode直接返回 /// <summary> /// 2.转为Unicode编码 /// ...
- 关于@see注解
所有三种类型的注释文档都可包含@see标记,它允许我们引用其他类里的文档.对于这个标记,javadoc会生成相应的HTML,将其直接链接到其他文档.格式如下: @see 类名@see 完整类名@see ...
- 今天学习image在html中的应用
今天学习image在html中的应用 上次在学习超级链接的使用中有一小问题,是在添加网址中href="http://www.baidu.com" 中不能忘记http://,否则链接 ...
- JDK Tools - xjc: 将 XML Schema 编译成 Java 类
xjc 是 JAXB 将 xsd 生成 Java 类的工具. 命令格式 xjc [ options ] schema file/URL/dir/jar ... [-b bindinfo ] ... 命 ...
- Activiti源码浅析:Activiti的活动授权机制
1. IdentityLink与TaskEntity An identity link is used to associate a task with a certain identity. For ...