C++ 链式栈的实现

/*******************链式栈的实现*******************/
#include<iostream>
using namespace std;
template <class T>
class LinkNode
{
public:
   T data;
LinkNode<T> *link;
LinkNode(const T el,LinkNode<T> *l=0)
{
data = el;
link = l;
}
};
template<class T>
class LinkStack
{
private:
LinkNode<T> * top;
int size;
public:
LinkStack(int s)
{
 top=NULL ;
 size = 0;
}
~LinkStack()
{
Clear();
}
void Clear()
{
while(top!=NULL)
{
                LinkNode<T> * temp;
temp = top ;
top = top->link;
delete temp;
}
size = 0 ;
}
bool Push( const T item)
{
LinkNode<T> * temp =new LinkNode<T>(item , top);
top=temp;
size++;
return true;
}
bool Pop(T &item)
{
LinkNode<T> * temp;
   if(size==0)
{
cout<<" the stack is empty , operation failed "<<endl;
return false;
}
else
{
item = top->data;
temp = top->link;
delete top;
top = temp;
size--;
return true;
}
}
bool Top( T &item)     //item采用了引用,只是为了传递参数和接收栈顶元素的值 ,个人感觉无实际意义
{
if ( size == 0 )
{
cout<< " the stack is empty ,can not read top "<<endl;
return false;
}
else
{
item = top->data ;
cout<<"the top is :"<<item<<endl;
return true;
}


}
void disp()               //显示栈中的元素 ,特别注意的是临时变量temp,top的值需要保存,如果直接使用top会导致指针指向栈底,再执行Top()和Pop()时出现错误

{   

                         LinkNode<T> *temp=top;

while(temp!=NULL)
{
cout<<temp->data<<endl;
temp=temp->link;
}


}
};
int main()
{   int top;
LinkStack<int> ls(10);
int array[10]={4,7,8,9,0,1,2,3,6,5};
    for ( int i=0;i<10;i++)
{
ls.Push(array[i]);
}
ls.disp();
    ls.Top(top);
ls.Pop(top);
    ls.Pop(top);
ls.Top(top);
ls.disp();
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值