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

 

#include   //c++输入和输出等 cout

#include      //c输入和输出等 getch

#include    //窗口类操作,系统调用如清屏等

#include    //调整数据输出格式

const Maxsize=20;      //定义线性表的最大长度

enum returninfo{success,fail,overflow,underflow,range_error};//定义返回信息清单

class seqlist          //定义一个线性表类seqlist

{

protected:

         int dataarray[Maxsize];             //数据域数组

         int count;                          //计数器 统计结点个数即线性表的长度

public:

         seqlist();                                         //构造函数

         ~seqlist();                                                                                  //析构函数

         returninfo create(int number);                     //顺序表的初始化

         bool empty(void) const;                            //判断是否空

    int size(void) const;                              //求顺序表的长度

       returninfo traverse(void);                         //遍历顺序表所有元素

         returninfo retrieve(int position,int &item) const; //读取一个结点

         returninfo replace(int position,const int &item);  //修改一个结点

    returninfo insert(int position,const int &item);   //插入一个结点

         returninfo remove(int position);                   //删除一个结点

         returninfo invertlist(void);                       //顺序表所有数据反转

};

seqlist::seqlist()                 //构造函数

{

         count=0;                       //计数器清零,表明开始时没有实际数据

}

seqlist::~seqlist()                //析构函数

{

}

returninfo seqlist::create(int number)

{

         count=number;

    cout<<"请依次输入数据(用空格隔开):";

         for(int i=0;i

                   cin>>dataarray[i];

         return success;

}

bool seqlist::empty(void)const   //判断是否为空

{

         if(count==0)         

                   return true;

         else

                   return false;

}

int seqlist::size(void)const   //求顺序表的长度

{

         return count;              

}

returninfo seqlist::traverse(void)               //遍历顺序表中的所有元素

{

         if(empty())

             return underflow;                     //空表的处理

         cout<<"顺序表中的全部数据为  ";         //提示显示数据开始

         for(int i=0;i                  //循环显示所有数据

                   cout<<" "<<setw(3)<<dataarray[i];

         cout<<endl;                               //最后有一个回车的控制

         return success;                           //本次操作成功

}

returninfo seqlist::retrieve(int position, int &item) const  //读取一个元素

{

         if(empty())                             //空表的处理

                   return underflow;   

         if(position<=0||position>count)         //处理意外

                   return range_error;

         item=dataarray[position-1];             //返回读取的数据

         return success;                         //本次操作成功

}

returninfo seqlist::replace(int position,const int &item)  //修改一个元素

{

         if(empty())                               

                   return underflow;   

         if(position<=0||position>count)

                   return range_error;

         dataarray[position-1]=item;           //实际修改数据的语句

         return success;

}

returninfo seqlist::insert(int position,const int &item)    //插入一个元素

{

         if(count+1>=Maxsize)

                   return overflow;                   //溢出处理

         if(position<=0 || position>count+1)     

                   return range_error;

         count++;                                //计数器加一

         for(int i=count;i>=position;i--)        //循环移动数据

         {

                   dataarray[i]=dataarray[i-1];

         }

         dataarray[position-1]=item;

         return success;

}

returninfo seqlist::remove(int position)   //删除一个元素

{

         if(empty())

                   return underflow;   

         if(position<=0||position>count)

                   return range_error;

         for(int i=position-1;i   //循环移动数据

                   dataarray[i]=dataarray[i+1];

         count--;                            //计数器减一

         return success;

}

returninfo seqlist::invertlist(void)    //顺序表所有数据反转

{

         int halfpos,tempdata;

         if(empty())

                   return underflow;

         halfpos=count/2;

         for(int i=0;i

         {

                   tempdata=dataarray[i];

                   dataarray[i]=dataarray[count-1-i];

                   dataarray[count-1-i]=tempdata;

         }

         return success;

}

class interfacebase

{

private:

         seqlist listonface;

public:

         void clearscreen(void);

         void showmenu(void);

         int userchoice(void);

         returninfo processmenu(int menuchoice);

};

void interfacebase::clearscreen(void)

{

    system("cls");

}

void interfacebase::showmenu(void)

{

       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<<"=========="<<endl;

}

int interfacebase::userchoice(void)

{        int menuchoice;

         cout<<"请输入您的选择:";  

         cin>>menuchoice;

         return menuchoice;

}

returninfo interfacebase::processmenu(int menuchoice)

{

         int position,item,returnvalue;

         switch(menuchoice)    //根据用户的选择进行相应的操作

         {

         case 1:               cout<<"请问你要输入数据的个数,注意要在"<<Maxsize<<"个以内: ";

                                     cin>>item;

                                     if(item>Maxsize)

                                               cout<<"对不起,输入数据超限,操作已取消!请按任意键继续..."<<endl;

                                     else

                                     {

                                               returnvalue=listonface.create(item);

                                               if(returnvalue==success)

                                               cout<<"建立顺序表操作成功!请按任意键继续..."<<endl;

                                     }

                                     break;

         case 2:

                                     returnvalue=listonface.traverse();

                                     if(returnvalue==underflow)

                                               cout<<"顺序表目前为空,没有数据可以显示!请按任意键继续..."<<endl;

                                     else

                                               cout<<"顺序表遍历操作成功!请按任意键继续..."<<endl;

                                     break;

         case 3:

                                     cout<<"请输入要修改数据的位置:";

                                     cin>>position;

                                     cout<<"请输入要修改的新数据:";

                cin>>item;

                                     returnvalue=listonface.replace(position,item);

                                     if(returnvalue==underflow)

                                         cout<<"对不起,顺序表已空!请按任意键继续..."<<endl;

                                     else if(returnvalue==range_error)

                                               cout<<"对不起,修改的位置超出了范围!请按任意键继续..."<<endl;

                                     else

                                               cout<<"修改操作成功!请按任意键继续..."<<endl;

                                     break;               

        

         case 4:

                                     cout<<"请输入要插入数据的位置:";

                                     cin>>position;

                                     cout<<"请输入要插入的新数据:";

                cin>>item;

                                     returnvalue=listonface.insert(position,item);

                                     if(returnvalue==overflow)

                                         cout<<"对不起,顺序表溢出,无法插入新数据!请按任意键继续..."<<endl;

                                     else if(returnvalue==range_error)

                                               cout<<"对不起,插入的位置超出了范围!请按任意键继续..."<<endl;

                                     else

                                               cout<<"插入操作成功!请按任意键继续..."<<endl;

                                     break;

                           

         case 5:

                                     cout<<"请输入要删除数据的位置:";

                                     cin>>position;

                                     returnvalue=listonface.remove(position);

                                     if(returnvalue==underflow)

                                         cout<<"对不起,顺序表已空!请按任意键继续..."<<endl;

                                     else if(returnvalue==range_error)

                                               cout<<"对不起,删除的位置超出了范围!请按任意键继续..."<<endl;

                                     else

                                               cout<<"删除操作成功!请按任意键继续..."<<endl;

                                     break;

         case 6:

                                     cout<<"请输入要读取数据的位置:";

                                     cin>>position;

                                     returnvalue=listonface.retrieve(position,item);

                                     if(returnvalue==underflow)

                                         cout<<"对不起,顺序表已空!请按任意键继续..."<<endl;

                                     else if(returnvalue==range_error)

                                               cout<<"对不起,读取的位置超出了范围!请按任意键继续..."<<endl;

                                     else

                                               cout<<"读取的数据为:"<<item<<endl<<"读取操作成功!请按任意键继续..."<<endl;

                                break;

                           

         case 7:

                                     cout<<"顺序表目前的长度为: "<<listonface.size()<<endl;

                                     cout<<"求顺序表长度操作成功!请按任意键继续..."<<endl;

                                     break;

                                                                

         case 8:

                                     returnvalue=listonface.invertlist();

                                     if(returnvalue==underflow)

                                         cout<<"对不起,顺序表已空!请按任意键继续..."<<endl;

                                     else

                                               cout<<"顺序表所有元素反转操作成功!请按任意键继续..."<<endl;

                                     break;      

         case 9:    

                           exit(0);

         default:

                                     cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl;

                                break;

                   }

                   return success;

}

void main(void)                     //程序主入口

{  

         int menuchoice;                 //下面要用到

         interfacebase interfacenow;

         seqlist seqlistnow;

         interfacenow.clearscreen();

    while (1)

         {

                interfacenow.showmenu();

                   menuchoice=interfacenow.userchoice();

                   interfacenow.processmenu(menuchoice);

                   getch();

                   Sleep(200);                     //延迟了一会

                   interfacenow.clearscreen();

    }

}//主函数结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值