数据结构--环队实现线性表功能实现…

 

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

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

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

#include    //控制数据输出格式

#include

#define Maxsize 10     //设置环队的最大空间

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

class loopqueue

{

private:

         int data[Maxsize];             //数据存储区域

         int front,rear;                      //对头、队尾指针       

protected:

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

public:

         loopqueue();                                       //构造函数

         ~loopqueue();                                                                                //析构函数

         void clearqueue(void);                             //清空环队

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

    int size(void) const;                              //求环队的长度

       returninfo traverse(void);                         //遍历环队所有元素

         returninfo getfront(int &item) const;              //读取队头

    returninfo insert(const int &item);                //数据入队

         returninfo remove(int &item);                               //数据出队

};

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

{

         front=0;                         //头指针和尾指针的关系

         rear=0;

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

}

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

{

         clearqueue();

}

void loopqueue::clearqueue(void)        //清空环队

{

         front=rear=0;                    //头指针和尾指针的关系

         count=0;                         //计数器也清零

}

bool loopqueue::empty(void)const   //是否空队

{

         if(count==0)         

                   return true;

         else

                   return false;

}

int loopqueue::size(void)const   //求环队的长度

{

         return count;              

}

returninfo loopqueue::traverse(void)        //遍历环队中的所有元素

{

         if(empty())

             return underflow;                   //空队列的处理

         cout<<"环队中的全部数据为: Front>(";   //提示显示数据开始

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

         {

                   cout<<" "<<setw(2)<<data[i%Maxsize];  

                   if (i==count front-1)

                            cout<<" )<</font>";

                   else

                            cout<<" ,";

         }

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

         return success;                         //本次操作成功

}

returninfo loopqueue::getfront(int &item) const  //读取一个结点

{

         if(empty())                              //处理意外

                   return underflow;   

         item=data[front];             //返回读取的数据

         return success;               //本次操作成功

}

returninfo loopqueue::insert(const int &item)    //进队

{

         if(count>=Maxsize)

                   return overflow;                 //满队处理

         data[rear]=item;                     //给数据赋值

         rear=(rear 1)%Maxsize;    

         count ;                              //计数器加一

         return success;

}

returninfo loopqueue::remove(int &item)          //出队

{

         if(empty())

                   return underflow;

         item=data[front];

         front=(front 1)%Maxsize;

         count--;                            //计数器减一

         return success;

}

 

class interfacebase

{

private:

         loopqueue queueonface;

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

}

int interfacebase::userchoice(void)

{        int menuchoice;

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

         cin>>menuchoice;

         return menuchoice;

}

returninfo interfacebase::processmenu(int menuchoice)

{

         int item,returnvalue;

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

         {

         case 1:

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

                cin>>item;

                                     returnvalue=queueonface.insert(item);

                                     if(returnvalue==overflow)

                                               cout<<"对不起,环队已满,进队失败!请按任意键继续..."<<endl;

                                     else                                      

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

                                     break;               

         case 2:

                                     returnvalue=queueonface.remove(item);

                                     if(returnvalue==underflow)

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

                                     else

                                     {

                                               cout<<"出队数据为:"<<item<<endl;

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

                                     }

                                     break;

         case 3:

                                     returnvalue=queueonface.traverse();            

                                     if(returnvalue==underflow)

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

                                     else

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

                                     break;

         case 4:

                                     if(queueonface.empty())

                                               cout<<"此时队列为空!请按任意键继续..."<<endl;

                                     else

                                               cout<<"此时队列不为空!请按任意键继续..."<<endl;

                                     break;

         case 5:

                                     returnvalue=queueonface.getfront(item);

                                     if(returnvalue==underflow)

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

                                     else

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

                                break;

                           

         case 6:

                                     cout<<"环队目前的长度为: "<<queueonface.size()<<endl;

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

                                     break;

         case 7:    

                           exit(0);

         default:

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

                                break;

                                     }

                   return success;

}

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

{  

         int menuchoice;                 //下面要用到

         interfacebase interfacenow;

         loopqueue loopqueuenow;

         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、付费专栏及课程。

余额充值