#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();
}
}//主函数结束