上一篇链栈我囧了,现在有针对结构体泛化的解决方案既是将结构体封装为类如下
#define NULL 0
#include<stdlib.h>
#include<stdio.h>
#include <iostream>
using namespace std;
template<typename DATA>
class CLinkNode
{
public:
CLinkNode();
~CLinkNode();
DATA st;
CLinkNode * next;
};
template<typename DATA>
class CChenyuStack
{
public:
CChenyuStack();
bool StackEmpty();
bool push(DATA x);
DATA pop();
DATA getHead();
private:
CLinkNode<DATA> * mp_head;
int count;
};
template<typename DATA>
CChenyuStack<DATA>::CChenyuStack()
{
mp_head = NULL;
count = 0;
}
template<typename DATA>
bool CChenyuStack<DATA>::push(DATA x)
{
if(mp_head == NULL)
{
mp_head = new CLinkNode<DATA>;
mp_head->st = x;
mp_head->next = NULL;
}
else
{
CLinkNode<DATA> *p = new CLinkNode<DATA>;
p->st = x;
p->next = mp_head;
mp_head = p;
}
count++;
return true;
}
template<typename DATA>
DATA CChenyuStack<DATA>::pop()
{
if(mp_head == NULL)
{
cout<<"指针是零";
}
CLinkNode<DATA> *p = mp_head;
mp_head = p->next;
DATA x = p->st;
delete p;
return x;
}
template<typename DATA>
bool CChenyuStack<DATA>::StackEmpty()
{
return(mp_head->next == NULL);
}
template<typename DATA>
DATA CChenyuStack<DATA>::getHead()
{
return mp_head->st;
}