动态链表式堆栈 by abilitytao

动态链表式堆栈 by abilitytao

// template_by_abilitytao_ACM
// many thanks to Mr Zhang Hong and Yu Ligong

#include 
< algorithm >
#include
< cstdio >
#include
< cmath >
#include
< cstdlib >
#include
< iostream >
#include
< cstdio >
using   namespace  std;
struct  node  {
    
int data;
    node 
*next;
}
;

class  mystack 
{
private:
    node
* ptop;//定义栈顶指针
    int lenth;//定义堆栈的动态容量
public:
    mystack();
//重载默认构造函数
    int push(int num);//压栈操作
    int pop();//退栈操作
    int top();//返回栈顶元素
    int size();//返回堆栈的实际容量
    bool empty();
    
bool full();
}
;

mystack::mystack()
{

    ptop
=NULL;
    lenth
=0;
}



int  mystack::push( int  num) // 操作成功,返回1;
{

    node 
*p=new node;
    p
->data=num;
    p
->next=ptop;
    ptop
=p;//由于链表式堆栈没有容量上线,故返回值为1;
    lenth++;
    
return 1;
    
return 0;
}


int  mystack::pop() // 堆栈为空返回0,操作成功返回所需要的整数;
{
    
if(ptop==NULL)
        
return 0;
    
int result;
    result
=ptop->data;
    node 
*p=ptop;
    ptop
=p->next;
    delete p;
    lenth
--;
    
return result;
}


int  mystack::top()
{
    
if(ptop==NULL)
        
return 0;
    
return ptop->data;
}



int  mystack::size()
{
    
return lenth;
}


bool  mystack::empty()
{

    
if (ptop==NULL)
        
return true;
    
else
        
return false;
}


bool  mystack::full()
{

    
return false;//仅仅为了提高模板的健壮性
}







/**/ //////////////////////////////////////////////////////////////////////////test data////////////////////////////////////////////////////////////////////////////
int  main ()
{

    mystack test;
    test.push(
1);
    test.push(
2);
    test.push(
3);
    test.push(
4);
    test.push(
5);
    test.push(
6);
    test.push(
7);
    
int a=test.size();
    a
=test.top();
    a
=test.pop();
    a
=test.top();
    a
=test.pop();
    a
=test.top();
    a
=test.pop();
    a
=test.top();
    a
=test.pop();
    a
=test.pop();
    a
=test.pop();
    a
=test.top();
    a
=test.pop();
    a
=test.pop();
    a
=test.top();
    a
=test.empty();
}

你可能感兴趣的:(动态链表式堆栈 by abilitytao)