- 论坛徽章:
- 0
|
#include <iostream>
using namespace std;
const int INCREMENT=10;
typedef char Names;
class Students
{
private:
int INITSIZE;
int pos;
Names e;
public:
Names *name;
int length;
int listsize;
void initstudents(Students &,int);
void deststudents(Students &);
bool putStudent(Students &);
bool addStudent(Students &);
bool delStudent(Students &);
void seaStudent(Students &);
void printStudents(Students);
};
void Students::initstudents(Students &s,int maxsize=0)
{
cout<<endl<<"请输入字母个数(回车结束)";
cin>>INITSIZE;
if(maxsize==0) maxsize=INITSIZE;
s.name=new Names[maxsize];
if(!s.name) exit(1);
s.length=0;
s.listsize=maxsize;
}
void Students::deststudents(Students &s)
{
delete [] s.name;
s.name=NULL;
s.length=0;
s.listsize=0;
}
bool Students::putStudent(Students &s)
{
cout<<endl<<"请输入修改位置(回车结束)";
cin>>pos;
if(pos<1||pos>s.length)
{
cout<<endl<<"输入有误,请重新输入! "<<endl<<endl;
return false;
}
cout<<endl<<"请输入修改字母(回车结束)";
cin>>e;
s.name[pos-1]=e;
cout<<endl<<"已将第"<<pos<<"位字母修改为"<<e<<endl;
return true;
}
bool Students::addStudent(Students &s)
{
cout<<endl<<"请输入插入位置(回车结束)";
cin>>pos;
if(pos<1||pos>s.length+1)
{
cout<<endl<<"输入有误,请重新输入! "<<endl<<endl;
return false;
}
cout<<endl<<"请输入插入字母(回车结束)";
cin>>e;
if(s.length>=s.listsize)
{
Names *newbase=new Names[s.listsize+INCREMENT];
if(!newbase) exit(1);
for(int i=0;i<s.length;i++)
newbase=s.name;
delete [] s.name;
s.name=newbase;
s.listsize+=INCREMENT;
}
for(int i=s.length-1;i>=pos-1;i--)
s.name[i+1]=s.name;
s.name[pos-1]=e;
s.length++;
cout<<endl<<"已将字母"<<e<<"插入到第"<<pos<<"位"<<endl;
return true;
}
bool Students::delStudent(Students &s)
{
cout<<endl<<"请输入删除位置(回车结束)";
cin>>pos;
if(pos<1||pos>s.length)
{
cout<<endl<<"输入有误,请重新输入! "<<endl<<endl;
return false;
}
for(int i=pos;i<s.length;i++)
s.name[i-1]=s.name;
e=s.name[pos-1];
s.length--;
cout<<endl<<"已将第"<<pos<<"位字母删除"<<endl;
return true;
}
void Students::seaStudent(Students &s)
{
cout<<endl<<"请输入查找字母(回车结束)";
cin>>e;
pos=0;
for(int i=0;i<s.length;i++)
{
if(s.name==e)
{
pos+=1;
cout<<endl<<"找到第"<<i+1<<"位字母"<<e<<endl;
}
}
cout<<endl<<"一共找到"<<pos<<"个字母"<<e<<endl;
}
void Students::printStudents(Students s)
{
for(int i=0;i<s.length-1;i++)
cout<<endl<<i+1<<" "<<s.name<<endl;
if(s.length-1>=0)
cout<<endl<<s.length<<" "<<s.name[s.length-1]<<endl;
}
//////////////////////////////main////////////////////////////////
int main()
{
char code;
Students students;
students.initstudents(students,0);
cout<<"This is linearlist!"<<endl;
cout<<"这是一个顺序表演示!"<<endl;
while(true)
{
cout<<"---------------------------------------------"<<endl;
cout<<" 1 修改字母信息 "<<endl;
cout<<" 2 插入字母信息 "<<endl;
cout<<" 3 删除字母信息 "<<endl;
cout<<" 4 查找字母信息 "<<endl;
cout<<" 5 所有字母信息 "<<endl;
cout<<" 6 退出程序 "<<endl;
cout<<"---------------------------------------------"<<endl;
cout<<endl<<"您的选择(回车结束)";
cin>>code;
switch (code)
{
case '1':
cout<<" 1 修改字母信息 "<<endl;
students.putStudent(students);
break;
case '2':
cout<<" 2 插入字母信息 "<<endl;
students.addStudent(students);
break;
case '3':
cout<<" 3 删除字母信息 "<<endl;
students.delStudent(students);
break;
case '4':
cout<<" 4 查找字母信息 "<<endl;
students.seaStudent(students);
break;
case '5':
cout<<" 5 所有字母信息 "<<endl;
students.printStudents(students);
break;
case '6':
return 0;
break;
default:
cout<<endl<<"输入有误,请重新输入! "<<endl<<endl;
break;
}
}
students.deststudents(students);
}
//编译完一切正常,正确输入时也正常,但假如要求输入位置时,我误输入字母的话就会进入死循环,谁能教教我为什么阿?想不通,这个是我学数据结构写的一个算法 |
|