//线性表的链式存储结构 //记录学生信息 #include<iostream> #include<string> #include<iomanip> using namespace std; struct Stu { string name; int age; Stu *next; }; class Student { public: Stu *head; public: Student(); bool Find(); bool Delete(int k); bool Insert(int k); void Output(); }; Student::Student() { head=NULL; } //查找元素 bool Student::Find() { int k,m=0; string str; cout<<"根据位置查找请输入0,根据姓名查找请输入1:"<<endl; cin>>k; if(k==0){ cout<<"请输入要查找的元素的位置:"<<endl; cin>>k; if(k<1 || !head){ cout<<"您给的位置超出范围!"<<endl; return false; }else{ Stu *p=head; for(int i=1;i<k && p; i++) p=p->next; if(k>0 && !p){ cout<<"不存在第"<<k<<"个元素!"<<endl; return false; } cout<<"name="<<p->name<<" "<<"age="<<p->age<<endl; return true; } }else if(k==1){ cout<<"请输入要查找的人的姓名:"<<endl; cin>>str; Stu *p=head; p=p->next; while(p) { if(p->name==str){ cout<<"name="<<p->name<<" "<<"age="<<p->age<<endl; m++; } } if(m==0){ cout<<"没有找到姓名为"<<str<<"的人!"<<endl; return false; }else{ cout<<"找到姓名为"<<str<<"的人"<<m<<"个!"<<endl; return true; } }else{ cout<<"输入错误!!!"<<endl; return false; } } //删除第k个位置上的元素 bool Student::Delete(int k) { if(k<1 || !head){ cout<<"不存在第"<<k<<"个元素!"<<endl; return false; }else{ Stu *p=head; if(k==1) head=head->next; else{ Stu *y=head; for(int i=1;i<k-1 && y; i++) y=y->next; if(!y || !y->next){ cout<<"不存在第"<<k<<"个元素!"<<endl; return false; } p=y->next; y->next=p->next; } cout<<"删除的元素信息如下:"<<endl; cout<<"name="<<p->name<<" "<<"age="<<p->age<<endl; delete p; return true; } } //在第k个元素之后插入元素 bool Student::Insert(int k) { if(k==0){ //在头结点处插入元素 Stu *y = new Stu; y->next=head; head=y; cout<<"请输入该人的姓名:"<<endl; cin>>y->name; cout<<"请输入年龄:"<<endl; cin>>y->age; return true; }else if(k<0){ cout<<"不存在第"<<k<<"个元素!"<<endl; return false; }else{ Stu *p=head; for(int i=1;i<k && p; i++) p=p->next; if(k>0 && !p){ cout<<"不存在第"<<k<<"个元素!"<<endl; return false; } Stu *y = new Stu; y->next=p->next; p->next=y; cout<<"请输入该人的姓名:"<<endl; cin>>y->name; cout<<"请输入年龄:"<<endl; cin>>y->age; return true; } } //输出所有数据 void Student::Output() { int num=0; Stu *p=head; cout<<setiosflags(ios::left)<<setw(30)<<"name"<<"age"<<endl; while(p) { cout<<setiosflags(ios::left)<<setw(30)<<p->name<<p->age<<endl; num++; p=p->next; } cout<<"共有"<<num<<"个人的信息!"<<endl; } int main() { int n=0,k; Student nStu; Stu *ss1 = new Stu; ss1->name = "str"; ss1->age = 21; ss1->next = NULL; nStu.head = ss1; while(true) { cout<<"显示所有请输入1,查找2,插入3,删除4:"<<endl; cin>>n; switch(n) { case 1: nStu.Output(); break; case 2: nStu.Find(); break; case 3: cout<<"请输入位置:"<<endl; cin>>k; nStu.Insert(k); break; case 4: cout<<"请输入位置:"<<endl; cin>>k; nStu.Delete(k); break; default: return 0; } } return 0; }