链表简单操作

来源:互联网 发布:java cmd ant 编辑:程序博客网 时间:2024/06/05 17:19
#include <iostream>#include <string>#include <cstdio>#include <cstring>using namespace std;class List;class Student{public:string name;string sex;int num;int  grade;double score;Student *link;Student(int nu = 0,string se = "", string na="", int gr = 0,double sc = 0) {name = na, sex = se, num = nu, grade = gr, score = sc;link = NULL;}friend class List;};class List {public:Student *first, *current;int count;List() {first = new Student;current = first;count = 0;cout <<"创建"<<endl;}~List() {makeEmpty();delete first;cout<<"链表删除"<<endl;}void makeEmpty();void add(int no,string a,string b,int c,double d);void insert(int No,string na,string se,int gr, double sc);void remove(int nu);void search(string na);void output();int length() {return count;}};void List::makeEmpty() {Student *p;while (first->link != NULL) {p = first->link;first->link = p->link;delete p;}current = first ;count = 0;}void List::add(int no,string a,string b,int c,double d) {//插入尾部Student *p;p = new Student(no ,a,b,c,d);while (current->link != NULL) current = current->link;p->link = current->link;current = current->link = p;p->num = count + 1;count ++;cout<<a<<"已经加入"<<endl;}void List::insert(int NO,string na,string se,int gr,double sc) {Student *p;Student *newnode = first;p = new Student(NO,na,se,gr,sc);while (newnode->link != NULL) {if (newnode->num == NO - 1)//cout<<"已经存在人"<<endl;break;newnode = newnode->link;}p->link = newnode->link;p->num= NO;newnode = newnode->link = p;Student *y;y = newnode->link;while (y!= NULL) {y->num++;y = y->link; }count++;cout<<na<<"已经插入"<<endl;}void List::remove(int NO) {Student *p,*q;q = first->link;while (q != NULL) {if (q->num == NO)break;q = q->link;}if (q == NULL) {cout <<"没有找到"<<endl;return ;}p = first;while (p != NULL) {if (p->link == q)break;p = p->link;}p->link = q->link;delete q;count--;while (p->link != NULL) {p->num--;p = p->link;}cout << "序号"<<NO<<"删除了"<<endl;}void List::output() {Student *p;if (first->link != NULL) {cout <<"序号"<<"   学号"<<"  名字"<<"   年级"<<"    成绩"<<endl;p = first->link;while (p->link != NULL) {cout <<p->num<<"    "<<p->sex<<"    "<<p->name<<"    "<<p->grade<<"    "<<p->score<<endl;p = p->link;}cout <<p->num<<"    "<<p->sex<<"    "<<p->name<<"    "<<p->grade<<"    "<<p->score<<endl;}else {cout << "为空" <<endl;return ;}}void List::search(string na) {current = first->link;while (current != NULL) {if (current->name == na)break;current = current->link;}if (current == NULL)cout<<"没有找到"<<endl;elsecout <<"序号"<<current->num<<' '<<"名字"<<current->name<<endl;}void show() {cout <<"1.建立表格"<<endl<<"2.加入资料"<<endl;cout << "3.插入学生"<<endl << "4.删除学生" <<endl;cout << "5.查找学生名字"<<endl<<"6.清空"<<endl;cout <<"7.显示"<<endl;}int main() {List *p = NULL;show();int str;cout << "请选择你的操作,先要建立"<<endl;while (cin >> str) {if (str == 0)break;switch(str) {case 1: p = new List; break;case 2:{string name;string sex;int grade;double score;int n;cout << "序号,学号,名字,年级,成绩"<<endl;cin >> n;cin >> sex;cin >> name;cin >> grade;cin >> score;p->add(n ,sex,name,grade,score); break;}case 3: {string na,se;int gr,nu;double sc;cout <<"序号"; cin >> nu;cout <<"名字"; cin >> na; cout << "学号"; cin >>se;cout << "年级"; cin >> gr;cout <<"成绩" ;cin >> sc;p->insert(nu,se,na,gr,sc);break;}case 4: { int t;cout << "序号" ; cin >> t;p->remove(t);break;}case 5: {string nam;cout << "名字"; cin >> nam;p->search(nam);p->output();break;}case 6: {p->makeEmpty();cout<< "全部清空" <<endl;break;}case 7:{p->output();cout<<"共有"<<p->length()<<"学生"<<endl;break;}  }cout << "请你继续选择"<<endl;}}

0 0
原创粉丝点击