学生成绩——顺序表
程序员文章站
2024-03-11 12:07:49
...
#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;
}