实验二:顺序表的基本操作实现及其应用
1.建立一个由8位同学成绩的顺序表,实现数据的插入,删除,查找等操作,分别输出结果。
#include<iostream>
using namespace std;
const int max=100;
template <typename T>
class SeqList{
public:
SeqList(T score[],int n); //构造函数,建立一个长度为n的顺序表
~SeqList(){} //析构函数
void insert(int i,T x); //插入操作,在位置i插入元素x
T Delete(int i); //在位置i删除对应元素
T get(int i); //按位查找,找位置i的元素
int locate(T x); //按值查找,找数值为x的元素
void print(); //遍历操作,按序号依次输出各元素
private:
T data[max]; //存放数据元素的数组
int length; //线性表的长度
};
//构造函数
template <class T>
SeqList<T>::SeqList(T score[],int n)
{
if(n>max)throw"参数非法";
for(int i=0;i<n;i++)
data[i]=score[i];
length=n;
}
//插入操作
template <class T>
void SeqList<T>::insert(int i,T 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 T>
T SeqList<T>::Delete(int i)
{
T 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 T>
T SeqList<T>::get(int i)
{
if(i<1&&i>=length)throw"查找位置非法";
else return data[i-1];
}
//按值查找
template <class T>
int SeqList<T>::locate(T x)
{
for(int i=0;i<length;i++)
if(data[i]==x) return i+1; //返回元素序号
return 0;
}
//输出操作
template <class T>
void SeqList<T>::print()
{
for(int i=0;i<length;i++)
cout<<data[i]<<" ";
}
void main()
{
float score[8]={90.5,77,87.5,65,100,84.5,72,66.5};
SeqList<float> student(score,8);
cout<<" 学生数据结构成绩"<<endl;
student.print();
cout<<endl<<endl<<"在位置3插入成绩99,结果如下:"<<endl;
student.insert(3,99);
student.print();
cout<<endl<<endl<<"在位置5删除成绩为:"<<student.Delete(5)<<endl<<"删除后结果如下:"<<endl;
student.print();
cout<<endl<<endl<<"位置6的成绩为:"<<student.get(6)<<endl;
cout<<endl<<endl<<"成绩100所在位置为:"<<student.locate(100)<<endl;
}
问题:当输入数据上溢或者下溢的时候代码直接崩掉,而不是输出上溢或下溢。
缺点:每次插入或删除时需要移动大量数据