【C++数据结构学习笔记---栈】用链表实现栈
在算法中要用到多个栈操作时,最好用链表作为栈的存储结构。
一个简单的实现例子,初始化26个英文字母。
#include <iostream>
using namespace std;
template <typename T>
class Stack;
template <typename T>
class Node{
friend class Stack<T>;
private:
T data;
Node<T> *next;
};
template <typename T>
class Stack{
public:
Stack(){stk_top=0;} //构造函数
~Stack(); //析构函数
bool empty()const {return stk_top==0;} //判断栈是否为空
T top()const; //返回栈顶元素
Stack<T>& push(const T& x); //将元素x入栈
Stack<T>& pop(T& x); //将元素x出栈
private:
Node<T> *stk_top;
};
template <typename T>
Stack<T>::~Stack()
{
Node<T> *p;
while(stk_top){
p=stk_top->next;
delete stk_top;
stk_top=p;
}
}
template <typename T>
T Stack<T>::top()const
{
if (!empty()) return stk_top->data;
}
template <typename T>
Stack<T>& Stack<T>::push(const T& x)
{
Node<T> *p=new Node<T>;
p->data=x;
p->next=stk_top;
stk_top=p;
return *this;
}
template <typename T>
Stack<T>& Stack<T>::pop(T& x)
{
if (!empty()){
x=stk_top->data;
Node<T> *p=stk_top;
stk_top=stk_top->next;
delete p;
}
return *this;
}
int main()
{
int s1,s2;
s1='A';
s2='Z';
Stack<char> stack;
for(int i=s2;i>=s1;--i){
stack.push(i);
}
char x;
while(!stack.empty()){
stack.pop(x);
cout <<x <<" ";
}
return 0;
}