这次也是瞎写着玩的,用的模板。本来还用了抽象类,但是错误好多,就直接在类内实现了。还有成员函数类外实现也付了一个例子。那个头部经常错,生疏的原因。只实现了一些简单的操作。另外不知为何,如果用构造函数初始化列表的话会报错。请不吝赐教!
#include <iostream>
using namespace std;
template<typename T>
class stack
{
public:
typedef struct _stack
{
T data;
_stack * next;
}StackNode, *SNodeP;
typedef struct _lstack
{
SNodeP Top;
SNodeP Base;
size_t Count;
}ListStack;
stack()
{
LS.Top = NULL;
LS.Base = NULL;
LS.Count = 0;
}
bool Push(const T&x)
{
SNodeP p = new StackNode;
if (!p)
return 0;
p->next = LS.Top;
p->data = x;
if (LS.Base == NULL)
LS.Base = p;
LS.Top = p;
LS.Count++;
return 1;
}
bool Pop();
bool StackEmpty()
{
if (LS.Count == 0)
return 1;
return 0;
}
T& Top()
{
return LS.Top->data;
}
void Show()
{
SNodeP p = LS.Top;
while (p != LS.Base)
{
cout << p->data << endl;
p = p->next;
}
cout << p->data << endl;
}
private:
ListStack LS;
};
template<class T>
bool stack<T>::Pop()
{
if (StackEmpty())
return false;
SNodeP p = LS.Top->next;
delete LS.Top;
LS.Top = p;
LS.Count--;
return 1;
}