数据结构--顺序栈基本功能实现程序…

 

#include

#include

#include

#include

 

 

//模板顺序栈类seqstack的定义说明。

template class seqstack{

public:

         seqstack();                           //创建一个空栈。

         seqstack(int size);    //创建一个可以容纳size个元素的栈。

         ~seqstack();                      //销毁一个栈。

         bool create(int size);        //实际创建一个可以容纳size个元素的栈。

         void destroy();                    //销毁一个栈。

         bool isempty() const;        //确定栈是否已空。

         bool isfull() const;    //确定栈是否已满。

         bool push(Type & item);  //数据进栈。

         bool pop();                                    //数据出栈。

         bool pop(Type & item);  //数据出栈并返回出栈前的栈顶。

         bool gettop(Type & item); //取出当前栈顶数据。

         void display();                     //显示栈的所有元素

private:

         Type * stackspace;            //指向栈。

         int stacksize;    //栈的大小,当为0时,栈没有创建空间。

         int top;                                 //栈顶位置,当为-1时,栈为空。

};

//以下为栈数据结构实现部分,如果用工程建立程序,可以另外存入文件seqstack.cpp

template     

seqstack::seqstack()

{

    stackspace=NULL;

         stacksize=0;//栈的大小,当为0时,栈没有创建空间。

         top=-1;//栈顶位置,当为-1时,栈为空。

}

template

seqstack::seqstack(int size)

{

    stackspace=NULL;

         stacksize=0;

         top=-1;

         create(size);

}

template

seqstack::~seqstack()

{

         destroy();

}

template

bool seqstack::create(int size)

{

         if(stacksize)      //栈已经存在,不能再创建

                   return false;

         if(size<=0)         //size的值必须大于零。

                   return false;

         stackspace=new Type[size];

         if(!stackspace) //没有申请到存储空间,创建栈不成功。

             return false;

         stacksize=size;

         top=-1;

         return true;

}

template

void seqstack::destroy()

{

         if(stackspace)

                   delete [] stackspace;

         stackspace=NULL;

         stacksize=0;

         top=-1;

}

template

bool seqstack::isempty() const

{

    if(!stacksize)     //确定栈是否被创建。没有创建视为空。

                   return true;

         return top>=0 ? false : true ;

}

template

bool seqstack::isfull() const

{

         if(!stacksize)     //确定栈是否被创建。没有创建视为满。

                   return true;

         return top==stacksize-1 ? true : false;

}

template

bool seqstack::push(Type & item)

{

    if(!stacksize)     //确定栈是否被创建。

                   return false;

         if(isfull())   //确定栈是否装满。

                   return false;

         stackspace[++top]=item;

         return true;

}

template

bool seqstack::pop()

{

        if(isempty())      //确定栈是否为空。

                   return false;

         top--;

         return true;

}

template

bool seqstack::pop(Type & item)

{

        if(isempty())     

                   return false;

         item=stackspace[top--];

         return true;

}

template

bool seqstack::gettop(Type & item)

{

        if(isempty())

                   return false;

         item=stackspace[top];

    return true;

}

template

void seqstack::display()

{

         if(stacksize)

         {

                   cout<<"目前栈中的内容是: ";

                   cout<<"栈底■";

                   for(int i=0;i<=top;i++)

                       cout<<stackspace[i]<<" ";

        cout<<"top栈顶"<<endl;

         }

         else

                   cout<<"栈尚未建立!"<<endl;

}

//主程序开始

void main(void)

{

         seqstack stacknow;

         char yesno,userchoice='9';      //先进行一次清屏

         int newstacksize,datain,dataout;

         while(1)

         {

                   if(userchoice=='9')

                   {

                            system("cls");

                       cout<<"***************************************"<<endl;

                       cout<<"**          顺序栈的功能演示         **"<<endl;

                       cout<<"***************************************"<<endl;

                       cout<<"**          1: 创建一个栈            **"<<endl;

                       cout<<"**          2: 销毁一个栈。          **"<<endl;

                       cout<<"**          3: 数据进栈。            **"<<endl;

                       cout<<"**          4: 数据出栈。            **"<<endl;

                       cout<<"**          5: 显示栈中全部数据      **"<<endl;

                            cout<<"**          6: 读取栈顶数据          **"<<endl;

                            cout<<"**          7: 判断是否空栈。        **"<<endl;

                       cout<<"**          8: 判断是否满栈。        **"<<endl;

                            cout<<"**          9: ***清屏***            **"<<endl;

                       cout<<"**          0: 退出。                **"<<endl;

                       cout<<"***************************************"<<endl;

                   }

                   cout<<"请选择:";

                   cin>>userchoice;

                   if(userchoice=='0')             //退出程序

                            break;

                   switch(userchoice)

                   {

                   case '1'://必须先创建一个栈,才能压入数据

                            cout<<"开始创建栈,请输入栈空间大小:";

                            cin>>newstacksize;

            if(stacknow.create(newstacksize))

                                     cout<<"创建成功,栈空间大小是:"<<newstacksize<<endl;

                            else

                                     cout<<"创建失败!"<<endl;

                            break;

                   case '2'://销毁一个栈

                            cout<<"你真的要销毁栈吗?请输入(Y/y)确定:";

                     cin>>yesno;

                            if(yesno=='Y'||yesno=='y')

                            {

                stacknow.destroy();

                                cout<<"栈已经销毁!"<<endl;

                            }

                            break;

                   case '3'://把数据压入栈

                            cout<<"向栈压入数据:";

                            cin>>datain;

            if(stacknow.push(datain))

                            {

                                     cout<<"数据 "<<datain<<" 已成功进栈!"<<endl;

                stacknow.display();                    

                            }

                            else

                                     cout<<"数据 "<<datain<<" 进栈失败!"<<endl;

                            break;

                   case '4'://从栈中弹出数据

            if(stacknow.pop(dataout))

                            {        cout<<"从栈中成功地弹出数据:"<<dataout<<endl;

                                     stacknow.display();

                            }

                            else

                                     cout<<"出栈操作失败"<<endl;

                            break;

                   case '5':

                            stacknow.display();

                            break;

                   case '6':

                            if(stacknow.gettop(dataout))

                            {        cout<<"栈顶数据为:"<<dataout<<endl;

                                     stacknow.display();

                            }

                            else

                                     cout<<"取栈顶数据操作失败"<<endl;

                            break;

                   case '7'://栈是否已空

                            if(stacknow.isempty())

                                     cout<<"目前是空栈或者栈尚未建立。"<<endl;

                            else

                                     cout<<"目前是非空栈。"<<endl;

                            break;

                   case '8'://栈是否已满。

                            if(stacknow.isfull())

                cout<<"目前是满栈或者栈尚未建立。"<<endl;

                            else

                                     cout<<"目前栈不满,还可以继续进栈。"<<endl;

                            break;

                   case '9':

                            break;

                   default:

                            cout<<"对不起,输入命令有错!"<<endl;

                            break;

                   }

         }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值