LinkedStack.h源码
#pragma once
#include<iostream>
using namespace std;
template<class T>
struct LinkedNode //结点结构体定义
{
T _data; //数据域
LinkedNode<T>* _next; //指针域,指向下一结点
LinkedNode<T>* _last; //指针域,指向上一结点
LinkedNode(LinkedNode<T>* next = nullptr,
LinkedNode<T>* last = nullptr) { //默认构造函数,参数只有指针域
_next = next;
_last = last;
}
LinkedNode(T data, LinkedNode<T>*next = nullptr,
LinkedNode<T>* last = nullptr) {//带有数据域的构造函数
_data = data;
_next = next;
_last = last;
}
};
//链式栈定义
template<class T>
class LinkedStack {
private:
LinkedNode<T>* _top; //指向栈顶元素
LinkedNode<T>* _bottom; //指向栈底元素
int _size; //结点数量
//初始化函数,可以用于复制构造函数和重载等号运算符
void init(LinkedStack<T>& stackPar);
public:
LinkedStack(); //默认构造函数
LinkedStack(LinkedStack<T>& stackPar);//复制构造函数
//重载等号运算符
LinkedStack<T>& operator = (LinkedStack<T>& stackPar);
~LinkedStack(); //析构函数
void makeEmpty(); //清空栈函数
bool isEmpty() { return (_size == 0) ? true : false; }; //判断空否函数
void push(const T data); //从栈顶插入函数
bool pop(T& data); //从栈顶弹