数据结构-链式栈c++
栈的最基本特点先进后出,本文简单介绍一下用c++写的链式栈

头文件
#ifndef LINKEDSTACK_H
#define LINKEDSTACK_H template<class T> class LinkedStack; template<class T>
class ChainNode
{
friend class LinkedStack<T>;
private:
ChainNode(const T& theData, ChainNode *n=)
:data(theData), link(n){}//创建新的结点,"link(n)"表示指向已经入栈的结点
T data;
ChainNode<T> *link;
}; template<class T>
class LinkedStack
{
public:
LinkedStack():top(){} //初始化栈,顶结点指针指向空
~LinkedStack() { MakeEmpty(); } //析构函数,清空栈
bool IsEmpty() const;//判断栈是否为空
T& Top() const;//返回栈顶结点数据域
void Push(const T& e);//从栈顶放入结点
void Pop();//从栈顶删除结点
void MakeEmpty();//不断从栈顶删除结点直到栈为空
private:
ChainNode<T> *top;
}; template<class T>
bool LinkedStack<T>::IsEmpty() const
{
return top == ;
} template<class T>
void LinkedStack<T>::Push(const T &e)
{
top = new ChainNode<T>(e, top);//“12行”刚入栈的新节点变为顶结点并指向已经入栈的结点
} template<class T>
T& LinkedStack<T>::Top() const
{
if (this->IsEmpty())
throw"Stack is empty.";
return top->data;
} template<class T>
void LinkedStack<T>::Pop()
{
if (this->IsEmpty())
throw"Stack is empty. Cannot delete.";
ChainNode<T> *delNode = top;//用指针保存要删除的栈顶结点,以备删除该节点
top = top->link;
delete delNode;//通过指针找到即将被删除的顶结点同时删除
} template<class T>
void LinkedStack<T>::MakeEmpty()
{
while (!IsEmpty())
Pop();
}
#endif
源文件,测试用
#include<iostream>
#include"linkedstack.h" using namespace std; int main()
{
cout << "测试链式栈" << endl; LinkedStack<int> stack1;
stack1.Push();
cout << stack1.Top() << endl;
stack1.Push();
cout << stack1.Top() << endl;
stack1.Push();
cout << stack1.Top() << endl;
stack1.Pop();
cout << stack1.Top() << endl; return ;
}
数据结构-链式栈c++的更多相关文章
- C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作
1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...
- 数据结构--链式栈--C++实现
#include <iostream> using namespace std; template<class T>class Stack { private: struct ...
- C++数据结构之Linked Stack(链式栈)
上一节用连续的方式实现栈,这种方法用一个确定大小的数组存储栈元素,因为当存储达到数组上限时会遇到麻烦. 连续实现的栈与链式实现的栈的最大不同在于,前者使用一个确定大小的数组存储每一个栈元素,后者使用带 ...
- C++及数据结构笔试面试常见知识点总结
一些常考的基础知识点个人总结,大神勿喷,欢迎指正. 1.广义表的表尾是指除去表头后剩下的元素组成的表,表头可以为表或单元素值.表尾或为表,或为空表. 2.构造函数不能声明为虚函数. 构造函数为什么不能 ...
- C++数据结构之链式队列(Linked Queue)
C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...
- C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)
一,数据结构——链表全操作: 链表形式: 其中,每个节点(Node)是一个结构体,这个结构体包含数据域,指针域,数据域用来存放数据,指针域则用来指向下一个节点: 特别说明:对于单链表,每个节点(Nod ...
- C语言数据结构----栈的应用(程序的符号匹配检测)
本节主要讲利用栈来实现一个程序中的成对出现的符号的检测,完成一个类似编译器的符号检测的功能,采用的是链式栈. 一.问题的提出以及解决方法 1.假定有下面一段程序: #include <stdio ...
- 数据结构栈的java实现
近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作“先进后出”表. 实现方式是这样的:首先定义了一个接口,然后通过这个接口实现了线 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
随机推荐
- js的prototype理解
转载:https://www.cnblogs.com/douyage/p/8630529.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实 ...
- 数据库中的blob是什么类型?
数据库中的blob是什么类型? BLOB (binary large object)----二进制大对象,是一个可以存储二进制文件的容器. 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类 ...
- Linux openkvm disk expansion
How to Increase the size of a Linux LVM by expanding the virtual machine disk https://www.rootusers. ...
- Kali Linux软件更新日报20190622
Kali Linux软件更新日报20190622 (1)laudanum更新到1.0+r36-0kali3,此次更新移除了添加到webshells的链接. (2)mimikatz更新到2.2.0- ...
- Kotlin集合——Set集合
Kotlin集合——Set集合 转 https://www.jianshu.com/p/3c95d7729d69 Kotlin的集合类由两个接口派生:Collection和Map. Kotlin的 ...
- cookie加载不正确的问题
华为系统更新后安装了一个谷歌6月安全补丁的东西,然后之前写的调h5页面的部分就出现了问题,后台查过发现是Android端调h5页面时cookie没能带过去,导致了登录失败.于是对setCookie部分 ...
- 背诵四种清净明诲断淫(愿众生断淫得究竟解脱) (转自学佛网:http://www.xuefo.net/nr/article50/495158.html)
一.为什么要戒邪淫.断淫欲 <寿康宝鉴>:盖淫念一生,诸念皆起.邪缘未凑生妄心;勾引无计,生机械心;少有阻碍,生嗔恨心;欲情颠倒,生贪着心;羡人有之,生嫉妒心;夺人之爱,生杀害心.廉耻丧尽 ...
- intellij 插件的使用
目录 intellij 插件的使用 插件的设置 插件推荐 @(目录) intellij 插件的使用 插件的设置 在 IntelliJ IDEA 的安装讲解中我们其实已经知道,IntelliJ IDEA ...
- CompletableFuture Quasar 等并发编程
CompletableFuture基本用法 https://www.cnblogs.com/cjsblog/p/9267163.html Quasar https://blog.csdn.net/ma ...
- Dockerfile-server2
[root@lab2 docker-file]# cd server2/ [root@lab2 server2]# ls ddbes-server2-0.0.1-SNAPSHOT.jar Docker ...