链式栈的实现
链式栈通过LinkNode结构体来实现,和链式表类似。
链式栈和顺序栈一样,也遵循FILO原则。
LinkedStack.h 头文件
//LinkedStack.h
#include <iostream>
#include <assert.h>
using namespace std;
template <class T>
struct LinkNode
{
T data;
LinkNode<T>* link;
LinkNode(LinkNode<T> *ptr=NULL){link=ptr;}
LinkNode(const T& item, LinkNode<T>* ptr=NULL){data=item;link=ptr;}
};
template <class T>
class LinkedStack
{
public:
LinkedStack():top(NULL){}
~LinkedStack(){makeEmpty();}
void Push(const T& x);
bool Pop(T& x);
bool getTop(T& x)const;
bool IsEmpty()const{return (top==NULL)?true:false;}
int getSize()const;
void makeEmpty();
void output(void);
private:
LinkNode<T>* top;
};
template <class T>
void LinkedStack<T>::makeEmpty()
{
LinkNode<T> *p;
while (top!=NULL)
{
p=top;
top=top->link;
delete p;
}
}
template <class T>
void LinkedStack<T>::Push(const T& x)
{
top=new LinkNode<T>(x,top);
assert(top!=NULL);
}
template <class T>
bool LinkedStack<T>::Pop(T& x)
{
if (IsEmpty())
{
return false;
}
LinkNode<T>* p=top;
top=top->link;
x=p->data;
delete p;
return true;
}
template <class T>
bool LinkedStack<T>::getTop(T& x)const
{
if (IsEmpty())
return false;
x=top->data;
return true;
}
template <class T>
int LinkedStack<T>::getSize()const
{
LinkNode<T> *p=top;
int count=0;
while (p)
{
p=p->link;
count++;
}
return count;
}
template <class T>
void LinkedStack<T>::output(void)
{
int n=getSize();
//cout<<"ջ��Ԫ�ظ���="<<n<<endl;
LinkNode<T> *p=top;
for (int i=0;i<n;i++)
{
cout<<(i+1)<<":"<<p->data<<endl;
p=p->link;
}
}
测试程序main.cpp
//main.cpp
#include <iostream>
#include "LinkedStack.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv)
{
int x=1,y=2,z=3;
LinkedStack<int> a;
a.Push(x);
a.Push(y);
a.Push(z);
a.output();
return 0;
}