老师布置的作业:学生表的维护(顺序表实现)
/*ADT List{
数据对象:D={ai|ai属于ElemSet,i=1,2,...,n,n>=0}
数据结构:R={<ai-1,ai>|ai-1,ai属于D,i=2,...,n}
基本操作:
InitList(&L):构造一个空的线性表
InputList(&L):输入数据
OutputList(&L):输出数据
InsertList(&L,i,e):
初始条件:线性表L已存在,1<=i<=ListLength+1
操作结果:在L的第i个位置前插入新的数据元素e,L的长度+1
DeleteList(&L,i,&e):
初始条件:线性表已存在且非空,1<=i<=ListLength(L)
操作结果:删除L的第i个数据元素,并用e返回其值,L的长度-1
}
*/
#include<iostream>
#include<cstring>
#include<cstdlib>//包含system("cls")清屏操作 system("pause") 按任意键继续
const int List_Init_Size=100;
const int ListIncrement=10;
using namespace std;
typedef struct
{
string id;
string name;
int age;
}ElemType;
typedef struct
{
ElemType* elem;
int length;
int listsize;
}SqList;
bool Init_SqList(SqList& L)
{
L.listsize=List_Init_Size;
L.length=0;
L.elem=new ElemType[L.listsize];
if(!L.elem)
return false;
return true;
}
istream& operator>>(istream& is,ElemType& e)
{
is>>e.id>>e.name>>e.age;
return is;
}
ostream& operator<<(ostream& os,ElemType e)
{
os<<"id:"<<e.id<<" name:"<<e.name<<" age:"<<e.age;
return os;
}
bool Input_SqList(SqList& L)
{
cout<<"请输入信息(id、name、age):输入EOF停止\n";
ElemType num;
int i=0;
while(cin>>num){
//当在运行窗口输入Ctrl+Z 回车后仍需再回车一次
//(这个和我之前弄的好像不大一样,之前回车一次就行了,这次需要两次?)
if(L.length>=L.listsize){
L.listsize+=ListIncrement;
L.elem=(ElemType*)realloc(L.elem,sizeof(ElemType)*L.listsize);
if(!L.elem)
return false;
}
L.elem[i]=num;
L.length++;
i++;//bug1:哎,也太傻b了吧我...
}
if(!cin){
cin.clear();
while(cin.get()!='\n')
continue;
}
return true;
}
void Output_SqList(SqList L)
{
cout<<"--------"<<endl;
for(int i=0;i!=L.length;i++){
cout<<L.elem[i]<<endl;
}
cout<<"--------"<<endl;
}
bool Insert_SqList(SqList& L,int i,ElemType e)
{
if(i<1||i>L.length+1){
cout<<"i值不合理\n";
return false;
}
if(L.length>=L.listsize){
L.listsize+=ListIncrement;
L.elem=(ElemType*)realloc(L.elem,sizeof(ElemType)*L.listsize);
if(!L.elem)
return false;
}
for(int j=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=e;
L.length++;
return true;
}
bool Delete_SqList(SqList& L,int i,ElemType& e)
{
if(i<1||i>L.length){
cout<<"i值不合理\n";
return false;
}
e=L.elem[i-1];
for(int j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];
L.length--;
return true;
}
int main()
{
SqList L;
Init_SqList(L);
int choice,i;
ElemType num;
cout<<"1:向顺序表输入数据 2:遍历输出顺序表\n";
cout<<"3:插入数据 4:删除数据\n";
cout<<"5:结束\n";
cout<<"输入你的选择:";
cin>>choice;
while(choice!=5){
switch(choice)
{
case 1:Input_SqList(L);break;
case 2:Output_SqList(L);break;
case 3:
cout<<"输入插入的位置:";
cin>>i;
cout<<"输入想要插入的数据(id、name、age)\n";
cin>>num;
Insert_SqList(L,i,num);break;
case 4:
cout<<"输入删除数据的位置:";
cin>>i;
Delete_SqList(L,i,num);
cout<<"删除的数据为:"<<num<<endl;
break;
default:
cout<<"选择不正确,重新输入(1~5)\n";
}
system("pause");
system("cls");
cout<<"学生顺序表的信息为:\n";
Output_SqList(L);
cout<<"输入你的选择:\n";
cout<<"1:向顺序表输入数据 2:遍历输出顺序表\n";
cout<<"3:插入数据 4:删除数据\n";
cout<<"5:结束\n";
cin>>choice;
}
}
1:向顺序表输入数据 2:遍历输出顺序表
3:插入数据 4:删除数据
5:结束
输入你的选择: