线性表的基本操作实现及其应用

一、实验目的

 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张图片

 

六、疑问与总结

1、函数最后用“{}”和的区别?

答:函数没有函数体用“;”表明是函数声明,在类外在进行定义,若main函数在前,则必须在main函数中写函数声明,如果函数在main函数前面,可不在main函数中写函数声明;用“{}”表示函数定义。

 

2、程序还是有小问题,插入新数据会出现两个重复的数字?

 

你可能感兴趣的:(线性表的基本操作实现及其应用)