一.引入
通常链栈用单链表表示,因此其结点结构与单链表的结点结构相同。因为只能在栈顶执行插入和删除操作,显然以单链表的头部做栈顶是最方便地,而且没有必要像单链表那样为了运算方便附加一个头结点。
二.算法设计
LinkedStack.h
#ifndef SRC_LINKEDSTACK_H_
#define SRC_LINKEDSTACK_H_
/*
* 结点:
* data:数据域,存储数据元素
* next:指针域,存储该结点的后继结点的地址
*/
template <class T>
struct Node{
T data;
Node<T> *next;
};
template <class T>
class LinkedStack{
public:
LinkedStack();//无参构造器
LinkedStack(T array[],int length);//有参构造器
virtual ~LinkedStack();//析构函数
int getLength();//取当前栈的长度
void push(T value);//入栈
T pop();//出栈
T getTop();//取栈顶元素
void getAll();//遍历栈的全部元素
bool isEmpty();//判断是否栈空
private:
Node<T> *top;//栈顶指针
int length;//当前栈的长度
};
#endif
三.详细