一、实验目的
1、熟练掌握线性表的结构特点,掌握顺序表的基本操作。
2、巩固 C++相关的程序设计方法与技术。
3、学会使用顺序表解决实际问题。
二、实验内容
1、用C++编写完整程序。
2、实现建立n个元素的顺序表Line,实现顺序表的基本操作。
3、用类模板构造函数实现相关的操作:输出,插 入,删除,查找等功能。
三、实验步骤
1、依据实验内容分别说明实验程序中用到的数据类型的定义;
Line() { length = 0; }:用无参构造函数创建一个空的顺序表
Line(Ta[],intn):有参构造函数创建一个长度为n的顺序表
Length() {returnlength; }:创建Length函数存放顺序表函数
Getone(Tx):按值查询,通过for函数依次查询,最后返回元素序号;
Locateone(inti):按位查询,运用数组特性,第i个元素储存在下标为i-1的位置;
Insert(inti,Tx):找到第i个元素,在第i个位置插入元素x,利用for循环将i位置后的元素从最后一个开始往外挪位置;
Delet(inti,Tx):找到第i个元素,删除此元素x,利用for循环将i位置后的元素一个个往前挪;
Printlist():输出函数;
四、源代码
#include
usingnamespace std;
constintMaxsize = 30;
template <typenameT>
classLine {
private:
Tdata[Maxsize];
intlength;
public:
Line(){ length = 0; }
Line(Ta[],intn);
~Line(){}
intLength() {returnlength; }
intGetone(Tx);
TLocateone(inti);
voidInsert(inti,Tx);
voidPrintlist();
voidDelet(inti,Tx);
};
template <typenameT>
Line<T>::Line(Ta[],intn) {
if (n >Maxsize)throw"参数非法";
for (int i =0; i < n; i++)
{
data[i]= a[i];
}
length= n;
}
template<typenameT>
voidLine<T>::Insert(inti,Tx) {
if(length == Maxsize)throw"上溢";
if (i<1&&i>length + 1)throw"位置异常";
for (int j =length; j > i; j--)
data[j]= data[j - 1];
data[i - 1]=x;
length++;
}
template<typenameT>
intLine<T>::Getone(Tx) {
for (int i =0; i < length; i++)
{
if(data[i] ==x)return i +1;
}
cout <<"位置:"<< endl;
}
template<typenameT>
TLine<T>::Locateone(inti) {
if (i<1&&i>length)throw"查找位置非法";
elsereturn data[i - 1];
}
template<typenameT>
voidLine<T>::Delet(inti,Tx) {
if(length == 0)throw"下溢";
if (i<1||i>length)throw"位置异常";
data[i - 1]=x;
int j =0;
for (j =i; j
data[j- 1] = data[j];
length--;
}
template<typenameT>
voidLine<T>::Printlist(){
for (int i =0; i < length; i++)
if (i ==0)
cout<<"["<< data[i] <<",";
elseif (i ==length - 1)
cout<< data[i] << "]"<< endl;
else
cout<< data[i] << "," ;
}
int main() {
int a[5]= { 1,3,5,7,9 };
Line<int>L1(a, 5);
cout <<"原有数据为:"<< endl;
L1.Printlist();
cout <<"原有数据长度为:"<<L1.Length()<< endl;
cout <<"在第3个位置插入元素16:"<< endl;
L1.Insert(3,16);
L1.Printlist();
cout <<"在第5个位置插入元素87:"<< endl;
L1.Insert(5,87);
L1.Printlist();
cout <<"查询数值为3的位置:"<< endl;
cout<<L1.Getone(3)<<endl;
cout <<"查询位置于4的元素:"<< endl;
cout<<L1.Locateone(4)<<endl;
cout <<"删除位置为2数值为3的元素:"<< endl;
L1.Delet(2,3);
L1.Printlist();
return 0;
}
五、程序运行示例
六、疑问与总结
1、函数最后用“{}”和“;”的区别?
答:函数没有函数体用“;”表明是函数声明,在类外在进行定义,若main函数在前,则必须在main函数中写函数声明,如果函数在main函数前面,可不在main函数中写函数声明;用“{}”表示函数定义。
2、程序还是有小问题,插入新数据会出现两个重复的数字?