数据结构-链式栈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篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
随机推荐
- SQL查询语句可以执行,但是提示对象名无效
类似于缓存的问题,ctrl+shift+R 刷新下 一般就好了
- Mybatis传参- 被逗号分割的字符串
String ids = "1,2,3,4,5,6",如ids作为参数传递,查询list返回.mybatis用foreach处理并返回. SELECT * FROM yp_popu ...
- 关于Delphi中二维数组的声明和大小调整
这是一个实例: procedure TMainForm.Button1Click(Sender: TObject);var arr:array of array of string;begin s ...
- Unity 2018 Game Development in 24 Hours Sams Teach Yourself 3rd Edition
最新的Unity2018自学教材,如果新入坑Unity,直接从2018开始看吧! 点击下载提取码:tngj
- C#多线程和异步——Task和async/await详解
阅读目录 一.什么是异步 二.Task介绍 1 Task创建和运行 2 Task的阻塞方法(Wait/WaitAll/WaitAny) 3 Task的延续操作(WhenAny/WhenAll/Cont ...
- Jmeter之__CSVRead随机读取变量
背景:当你需要从一些数据中随机的取值用的话可以用这个函数来实现__CSVRead __CSVRead函数用于对脚本进行参数化,当脚本中不同变量需要不同参数值时,可以考虑__CSVRead函数. _CS ...
- pytorch如何先初始化变量,然后再赋值
下面是定义初始化 #初始化输入的张量 - torch.empty是返回一个包含未初始化数据的张量 self.input = torch.empty(size=(self.opt.batchsize, ...
- 004-行为型-05-职责链模式(Chain of Responsibility)
一.概述 为请求创建一个接收此次请求对象的链 该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式. 在这种模式中,通常每个接收者都 ...
- mybatis xml <choose>标签使用
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...
- git clone 使用用户名和密码
git clone http://邮箱(或用户名):密码@仓库 示例: 邮箱 xw@qq.com 密码: xw 仓库: http://git.test.com/abc/demo 注意: 邮箱中的 @ ...