一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验时间
准备时间为第3周到第4周,具体集中实验时间为第4周第2次课。2个学时。
三..实验内容
1.建立一个由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"位置异常";
int j;
for (j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
template <class DataType>//删除
DataType SeqList<DataType>::Delete(int i)
{ int x;
if(length==0)throw "下溢";
if (i<1||i>length)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]<<" ";}
int main()
{
int grade[] = { 11,22,33,44,55 };
SeqList<int>List1(grade,5);
List1.PrintList();
cout<<"长度为"<<List1.Length()<<endl;
cout<<"请输入你要查找的位置的数据" <<endl;
int r;
cin>>r;
cout<<List1.Get(r)<<endl;
int o,p;
cout<<"请输入你想插入数据的位置o"<<endl;
cin>>o;
cout<<"请输入你想插入的数据p"<<endl;
cin>>p;
List1.Insert(o,p);
List1.PrintList();
//删除
int q;
cout<<"请输入你要删除的位置q"<<endl;
cin>>q;
cout<<List1.Delete(q)<<endl;
List1.PrintList();
}
实验结果: