學生成績——順序表
阿新 • • 發佈:2018-12-02
#include<iostream> using namespace std; const int max=10; template <class student> class SeqList { public: SeqList(student score[],int n); //建構函式,建立一個長度為n的順序表 ~SeqList(){} //解構函式 void insert(int i,student x); //插入操作,在位置i插入元素x student Delete(int i); //在位置i刪除對應元素 student get(int i); //按位查詢,找位置i的元素 int locate(student x); //按值查詢,找數值為x的元素 void print(); //遍歷操作,按序號依次輸出各元素 private: student data[max]; //存放資料元素的陣列 int length; //線性表的長度 }; //建構函式 template <class student> SeqList<student>::SeqList(student score[],int n) { if(n>max)throw"引數非法"; for(int i=0;i<n;i++) data[i]=score[i]; length=n; } //插入操作 template <class student> void SeqList<student>::insert(int i,student x) { int j; if(length>max)throw"上溢"; if(i<1||i>=max)throw"位置非法"; for(j=length;j>=i;j--) data[j]=data[j-1]; data[i-1]=x; length++; } //刪除操作 template <class student> student SeqList<student>::Delete(int i) { student p; int j; if(length==0)throw"下溢"; if(i<1||i>=max)throw"位置非法"; p=data[i-1]; for(j=i;j<length;j++) data[j-1]=data[j]; length--; return p; } //查詢操作 //按位查詢 template <class student> student SeqList<student>::get(int i) { if(i<1&&i>=length)throw"查詢位置非法"; else return data[i-1]; } //按值查詢 template <class student> int SeqList<student>::locate(student x) { for(int i=0;i<length;i++) if(data[i]==x) return i+1; //返回元素序號 return 0; } //輸出操作 template <class student> void SeqList<student>::print() { for(int i=0;i<length;i++) cout<<data[i]<<" "; } int main() { float score[8]={95.5,78,87.5,65,100,84.5,75,69.5}; SeqList<float> Student(score,8); cout<<"初始資料如下:"<<endl; Student.print(); cout<<endl<<"在學生3插入成績66,結果如下:"<<endl; Student.insert(3,66); Student.print(); cout<<endl<<endl<<"在學生5刪除成績為:"<<Student.Delete(5)<<endl<<"刪除後結果如下:"<<endl; Student.print(); cout<<endl<<endl<<"學生6的成績為:"<<Student.get(6); cout<<endl<<endl<<"成績為100的學生所在位置為:"<<Student.locate(100)<<endl; cout<<"最終資料如下:"<<endl; Student.print(); cout<<endl; return 0; }