template<classT>struct LinkNode
{
T Data;
LinkNode *Next;LinkNode():Next(nullptr){
cout <<"Please input data: ";
cin >> Data;}LinkNode(const T &data, LinkNode *next =nullptr):Data(data),Next(next){}~LinkNode(){}};
栈的操作
template<classT>classStackList{// private:
LinkNode<T>*Head;int Size;public:StackList(int Len =0);~StackList(){}/**
* push
* pop
* top
* isempty
* **/boolIsEmpty()//判断栈是否为空{return Size ==0;}voidPush(const T &data);//向栈顶加入元素
T Top()const;//返回栈顶元素
T Pop();//返回栈顶元素并移除voidPrintStack();//打印stack内的所有值,调试使用};
StackList.h
/*
* @Description: StackList.h
* @Author: gaumn
* @Date: 2021-02-22 18:30:12
* @LastEditTime: 2021-02-22 22:17:29
* @LastEditors: gaumn
*/#pragma onece#include<iostream>usingnamespace std;template<classT>struct LinkNode
{
T Data;
LinkNode *Next;LinkNode():Next(nullptr){
cout <<"Please input data: ";
cin >> Data;}LinkNode(const T &data, LinkNode *next =nullptr):Data(data),Next(next){}~LinkNode(){}};template<classT>classStackList{// private:
LinkNode<T>*Head;int Size;public:StackList(int Len =0);~StackList(){}/**
* push
* pop
* top
* isempty
* **/boolIsEmpty()//判断栈是否为空{return Size ==0;}voidPush(const T &data);//向栈顶加入元素
T Top()const;//返回栈顶元素
T Pop();//返回栈顶元素并移除voidPrintStack();//打印stack内的所有值,调试使用};#include"StackList.cpp"//模板实现文件
StackList.cpp
/*
* @Description: stack的List实现(StackList.cpp)
* @Author: gaumn
* @Date: 2021-02-22 18:29:40
* @LastEditTime: 2021-02-23 14:14:02
* @LastEditors: gaumn
*/template<classT>
StackList<T>::StackList(int len){// LinkNode<T>* Cur=this->Head;
LinkNode<T>*Cur;for(int i =0; i < len; i++){
Cur =new LinkNode<T>();if(i ==0){this->Head = Cur;}else{
Cur->Next =this->Head;this->Head = Cur;}
Size++;}}template<classT>void StackList<T>::Push(const T &data){
LinkNode<T>*Cur =new LinkNode<T>(data);if(this->Head ==nullptr)this->Head = Cur;else{
LinkNode<T>*Temp =this->Head;
Cur->Next = Temp;this->Head = Cur;}
Size++;}template<classT>
T StackList<T>::Top()const{
LinkNode<T>*Cur =this->Head;if(Cur !=nullptr)return Cur->Data;elsereturn-1;}template<classT>
T StackList<T>::Pop(){
LinkNode<T>*Cur =this->Head;if(Cur ==nullptr)return-1;
T Top = Cur->Data;this->Head = Cur->Next;
Size--;return Top;}template<classT>void StackList<T>::PrintStack(){
LinkNode<T>*Cur =this->Head;if(Cur ==nullptr){
cout <<"当前栈为空";}int n =0;while(Size - n >0&& Cur !=nullptr){
cout <<"第"<< n++<<"个元素为:"<< Cur->Data << endl;
Cur = Cur->Next;}}