一、实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。二、实验内容
建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
源代码如下:
#include<iostream>
using namespace std;
const int MaxSize =100;
template <class DataType>
class SeqList
{public:
SeqList(){length=0;}//建立空的顺序表
SeqList(DataType a[],int n);//建立长度为n的顺序表
~SeqList(){}//析构函数
int Length(){return length;}//求线性表的长度
DataType Get(int i);
int Locate (DataType x);
void Insert(int i,DataType x);//在位置i插入x
DataType Delete(int i);
void PrintList();
private :
DataType data[MaxSize];//存放数据元素的数组
int length;//线性表的长度
};
template <class DataType>//有参构造函数
SeqList<DataType>::SeqList(DataType a[],int n)
{if (n>MaxSize)throw"参数非法";
for (int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
template <class DataType>//按位查找
DataType SeqList<DataType >::Get(int i)
{
if (i<1&&i>length)throw "查找位置非法";
else return data [i-1];
}
template <class DataType>//按值查找
int SeqList<DataType >::Locate (DataType x)
{for (int i=0;i<length ;i++)
if (data [i]==x)return i+1;
return 0;//查找失败,退出循环
}
template <class DataType>//插入
void SeqList<DataType >::Insert (int i ,DataType x)
{if (length>=MaxSize) throw "上溢";
if (i<1||i>length+1)throw"位置";
for (int j=length;j>=i;j--)
data[i]=data[j-1];
data[j-1]=x;
length++;
}
template <class DataType>//删除
DataType SeqList<DataType>::Delete(int i)
{ int x;
if(length==0)throw "下溢";
if (i<1||i>length+1)throw"位置非法";
x=data[i-1];
for (int j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
}
template <class DataType>//输出
void SeqList<DataType>::PrintList(){for (int i=0;i<length;i++)cout <<data[i]<<" ";}
void main()
{float score[8]={100.5,98,85,76.5,84,88,98.5,100};
SeqList<float>List(score,8);//类模板定义对象
cout<<"数据表的所有数据为:"<<endl;
List.PrintList();//输出功能
cout<<endl<<"删除位置7的数据元素,输出结果为:"<<endl;
List.Delete(7);//删除功能
List.PrintList();
cout<<endl<<"在位置7加入数据元素89,输出数据为:"<<endl;
List.Insert(7,89);//插入功能
List.PrintList();
cout<<endl<<"查找操作"<<endl<<"“按位查找”查找位置7的数据元素值为:"<<endl;
cout<<List.Get(7)<<endl;
cout<<endl<<"“按值查找”查找值为85的数据元素的位置是:";
cout<<List.Locate(85)<<endl;
}