- 論壇徽章:
- 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<<"請輸入字母個數(shù)(回車結(jié)束)";
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<<"請輸入修改位置(回車結(jié)束)";
cin>>pos;
if(pos<1||pos>s.length)
{
cout<<endl<<"輸入有誤,請重新輸入! "<<endl<<endl;
return false;
}
cout<<endl<<"請輸入修改字母(回車結(jié)束)";
cin>>e;
s.name[pos-1]=e;
cout<<endl<<"已將第"<<pos<<"位字母修改為"<<e<<endl;
return true;
}
bool Students::addStudent(Students &s)
{
cout<<endl<<"請輸入插入位置(回車結(jié)束)";
cin>>pos;
if(pos<1||pos>s.length+1)
{
cout<<endl<<"輸入有誤,請重新輸入! "<<endl<<endl;
return false;
}
cout<<endl<<"請輸入插入字母(回車結(jié)束)";
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<<"請輸入刪除位置(回車結(jié)束)";
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<<"請輸入查找字母(回車結(jié)束)";
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<<"您的選擇(回車結(jié)束)";
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);
}
//編譯完一切正常,正確輸入時也正常,但假如要求輸入位置時,我誤輸入字母的話就會進入死循環(huán),誰能教教我為什么阿?想不通,這個是我學(xué)數(shù)據(jù)結(jié)構(gòu)寫的一個算法 |
|