//链表实现栈
//用一个表头为s的链表实现,所有插入的节点都变为到s的下一个节点。
#include<new>
#include<iostream>
template <typename T> struct Node{
T data;
Node * next;
};
template <typename Type> class Stack{
public:
typedef Node<Type> * PtrToNode;
private:
Node<Type> * s = NULL;//表头
public:
bool IsEmpty()
{
return s->next == NULL;
}
void DisposeStack()
{
}
void MakeEmpty()
{
if( s != NULL )
while( !IsEmpty())
Pop();
}
void Push( Type x )//入栈插入到表头的下一个节点
{
PtrToNode tmp;
tmp = new Node<Type>;
tmp->data = x;
tmp->next = s->next;
s->next = tmp;//这里用前插完成栈的性质
}
Type Top ()
{
if( !IsEmpty() )
return s->next->data;
else
{
std::cout<<"This stack is empty"<<std::endl;
return 0;
}
}
void Pop()
{
PtrToNode first;
if( IsEmpty() )
std::cout<<" empty stack"<<std::endl;
else
{
first = s->next;
s->next = first->next;
delete first;
}
}
Stack()
{
s = new Node<Type>;
s->data = 0;
s->next = NULL;
MakeEmpty();
}
~Stack()
{
MakeEmpty();
delete s;
}
};
单链表实现栈
最新推荐文章于 2022-11-27 22:45:55 发布
