📄 linkstack.h
字号:
enum Error_code{success,overflow,underflow};
template<class T>class LinkStack;
template<class T>
class Node{ //结点类
friend class LinkStack<T>; //定义一个友元类
public:
Node(){next=null;}
Node(const T&,Node<T>* =null);
private:
T data; //数据域
Node<T>* next; //指针域
};
template<class T>
Node<T>::Node(const T& e,Node<T>* link){
data=e;
next=link;
}
template<class T>
class LinkStack{ //链栈类
public:
LinkStack(){first=null}; //初始化头指针为空指针
LinkStack(const LinkStack<T>&);//拷贝构造函数
~LinkStack();
void operator=(const LinkStack<T>&); //赋值重载
bool empty(){return first==null};
Error_code push(const T&); //将一个数据压入栈中
Error_code pop(); //弹出(或删除)栈顶元素
Error_code top(T&); //取栈顶元素
private:
Node<T>* first; //链栈头指针
};
template<class T>
LinkStack<T>::LinkStack(const LinkStack<T>& another){
Node<T>* work1,work2=another.first; //定义两个工作指针
first=null;
while(another.work2){ //若work2不为空时则将其所指的结点复制给first链
if(!first) //若first为空时
work1=first=new Node<T>(work2->data);
else{ //若first不为空时
work1->next=new Node<T>(work2->data);
work1=work1->next;
}
work2=work2->next;
}
return;
}
template<class T>
LinkStack<T>::~LinkStack(){
Node<T>* work;
while(first){ //将链中结点逐个释放
work=first->next;
delete first;
first=work;
}
return;
}
template<class T>
void LinkStack<T>::operator=(const LinkStack<T>& another){
Node<T>* work1,work2=another.first; //定义两个工作指针
while(first){ //先将原队列删除
work1=frist->next;
delete first;
frist=work1;
}
while(another.work2){ //若work2不为空时则将其所指的结点复制给first链
if(!first) //若first为空时
work1=first=new Node<T>(work2->data);
else{ //若first不为空时
work1->next=new Node<T>(work2->data);
work1=work1->next;
}
work2=work2->next;
}
return;
}
template<class T>
Error_code LinkStack<T>::push(const T& e){
Node<T>* New=new Node<T>;
if(!New) return overflow; //若内存不中时
New->data=e;
//将New所指结点接和栈顶
New->next=first;
first=New;
return success;
}
template<class T>
Error_code LinkStack<T>::pop(){
if(!first) return underflow; //若first为空
Node<T>* temp=first;
first=first->next;
//删除栈顶元素
delete temp;
return success;
}
template<class T>
Error_code LinkStack<T>::top(T& e){
if(!first) return underflow;
//用e返回栈顶元素
e=first->data;
return success;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -