/*******************链式栈的实现*******************/
#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()时出现错误
{
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;
}
#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;
}