菜鸟一枚,第一次写博客。
自己实现了一个简单的链式栈练习一下。有什么建议请告知。谢谢。
//头文件
template<typename T> class ListStack;
template<typename T>
class Node
{
public:
friend class ListStack<T>;
private:
T NodeValue;
Node<T> *PreNode;
};
template<typename T>
class ListStack
{
public:
ListStack(): top(NULL) {}
~ListStack();
void Push(const T& UNode);
void Pop();
T GetTop();
bool IsEmpty();
void Traverse();
private:
Node<T> *top;
};
template<typename T> bool ListStack<T>::IsEmpty()
{
return top == NULL;
}
template<typename T> ListStack<T>::~ListStack()
{
int iCount = 0;
while (top != 0)
{
Node<T> *TraverseNode = top -> PreNode;
delete top;
top = NULL;
top = TraverseNode;
++iCount;
}
cout << "析构函数被调用,删除元素个数为: " << iCount << endl;
}
template<typename T> void ListStack<T>::Push(const T& UNode)
{
Node<T> *newNode = new Node<T>;
if (IsEmpty())
{
newNode -> PreNode = 0;
newNode ->NodeValue = UNode;
top = newNode;
}
else
{
newNode -> PreNode = top;
newNode ->NodeValue = UNode;
top = newNode;
}
}
template<typename T> T ListStack<T>::GetTop()
{
if (IsEmpty())
{
cout << "no element" << endl;
exit(-1);
}
else
{
cout << "top element is: " << top -> NodeValue << endl;
return top -> NodeValue;
}
}
template<typename T> void ListStack<T>::Pop()
{
if (IsEmpty())
{
cout << "no element" << endl;
}
else
{
cout << "pop node value is : " << top -> NodeValue << endl;
Node<T> *Previous = top -> PreNode;
delete top;
top = NULL;
top = Previous;
}
}
template<typename T> void ListStack<T>::Traverse()
{
Node<T> *TraverseNode = top;
int iLac = 1;
while (TraverseNode != NULL)
{
cout << iLac << "st node is : " << TraverseNode ->NodeValue << endl;
TraverseNode = TraverseNode -> PreNode;
}
}
//测试函数
int main()
{
// Node<int>;
ListStack<int> list;
list.Push(10);
list.Push(11);
list.Push(12);
list.Push(13);
list.Push(14);
list.Push(15);
list.Push(16);
list.Traverse();
list.GetTop();
cout << "------ pop operation: " << endl;
list.Pop();
list.Traverse();
return 0;
}