实验内容:
建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
代码:
#include<iostream>
using namespace std; const int M=10; struct Node { int data; }; class Student { public: Student(); Student(int a[],int n); ~Student(); void Input(int i,int x); int Delete(int i); int Locate(int x); void Print(); private: Node *data[M]; int length; }; Student::Student() { for(int i=0;i<M;i++) {data[i]=NULL;} length=0; } Student::Student(int a[],int n) { if(n<0||n>M) throw"参数非法"; for(int i=0;i<M;i++) {data[i]=NULL;} for(int j=0;j<n;j++) { data[j]=new Node; data[j]->data=a[j]; } length=n; } Student::~Student() { Node *p; for(int i=0;i<length;i++) { p=data[i]; data[i]=NULL; delete p; } } void Student::Input(int i,int x) { if(i<1||i>length+1) throw"位置非法"; for(int j=length;j>=i;j--) data[j]=data[j-1]; data[i-1]=new Node; data[i-1]->data=x; length++; } int Student::Delete (int i) { if(length==0) throw"下溢"; if(i<1||i>length) throw"位置非法"; Node *p=data[i-1]; int x=p->data; for(int j=i-1;j<length-1;j++) data[j]=data[j+1]; delete p; length--; data[length]=NULL; return x; } int Student::Locate(int x) { for(int i=0;i<length;i++) if(data[i]->data ==x) return i+1; return 0; } void Student::Print() { for(int i=0;i<length;i++) cout<<"第"<<i+1<<"个学生成绩:"<<data[i]->data <<endl; cout<<endl; } void main() { int r[5]={80,90,70,60,50}; Student L(r,5); cout<<"录入学生信息:"<<endl; L.Print(); cout<<endl; cout<<"在第2个位置插入85"<<endl; L.Input(2,85); cout<<"插入后学生成绩为:"<<endl; L.Print(); cout<<endl; cout<<"成绩为85的学生位置为:"<<endl; cout<<L.Locate(85)<<endl; cout<<"删除第一个学生成绩"<<endl; L.Delete(1); cout<<"删除后学生成绩为:"<<endl;L.Print();}
