您的位置:首页 > 其它

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

2017-09-24 13:18 417 查看
实验一 线性表的基本操作实现及其应用

一、实验目的

 

1、熟练掌握线性表的结构特点,掌握顺序表的基本操作。

2、巩固 C++相关的程序设计方法与技术。

3、学会使用顺序表解决实际问题。

 

二、实验内容

顺序表的建立与操作实现建立 n 个元素的顺序表(n 的大小和表里数据自己确定),实现相关的操作:输出,插

入,删除,查找等功能。



三、相关算法及操作

1、头部:定义了类SeqList,给定了顺序表的最大长度MaxSize为30,在类里面定义了相应的插入、删除、查找、输出等功能函数;

2、构造函数:有参构造函数SeqList(DataType a[],int n)创建一个长度为n的顺序表,需要将给定的数组元素作为线性表的数据元素传入顺序表中,并将传入的元素个数作为顺序表的长度。

3、插入操作:在主函数定义插入的元素和位置,输出结果则在定义的位置插入相应的元素,使线性表长度+1。
   
  ①如果表满了,则抛出上溢异常;
  ②如果元素的插入位置不合理,则抛出位置异常;
  ③将最后一个元素直至第i个元素分别向后移动一个元素;
  ④将元素x填入位置i处;
  ⑤表长+1。
      
4、查找操作

①按位查找:顺序表中第i个元素存储在数组中下标为i-1的位置,若位置i合法,则返回对应数据,否则抛出。

②按值查找:对顺序表中的元素依次进行比较,如果查找成功,返回元素的下标;如果查找不成功,返回查找失败的标志“0”。

6、删除操作:

  ①如果表空,则抛出下溢异常;
  ②如果删除位置不合理,则抛出删除位置异常;
  ③取出被删元素;
  ④将下标为i,i-1,...,n-1处的元素分别移到下标i-1,i,...,n-2处;
  ⑤表长-1,返回被删元素值。

7、输出:将经过插入、删除操作之后的一组数据顺序输出。

四、相关代码

#include
using namespace std;
const int Maxsize = 30;
class SeqList    //定义类Seqlist
{
public:
SeqList(){ length = 0; }    //建立一个空的顺序表
SeqList(int a[], int n);    //建立一个长度为n的顺序表
~SeqList(){}
void Insert(int i, int x);  //插入操作
int Delete(int i);          //删除操作
int Locate(int x);          //按值查找
void PrintList();           //遍历操作
private:
int data[Maxsize];          //存放数据元素的数组
int length;                 //线性表的长度
};

SeqList::SeqList(int a[], int n)   //顺序表有参构造函数
{
if (n > Maxsize) throw "参数非法";
for(int i=0;i= 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++;
}

int SeqList::Delete(int i)    //顺序表删除算法
{
if (length == 0) throw"下溢";
if (i<1 || i>length) throw "位置非法";
int x = data[i - 1];                    //取出位置i的元素
for (int j = i; j < length; j++)
data[j - 1] = data[j];
length--;
return x;
}

int SeqList::Locate(int x)     //顺序表按值查找算法
{
for (int i = 0; i>x;
loc=L.Locate(x);
cout<<"该数值的位置:"<


五、调试结果

1、当在原顺序表的数据“50、60、70、80、90”插入一个元素“100”之后,执行插入算法之后显示如下:






2、执行删除第一个元素的操作之后,删除前后的数据显示如下:



3、当输入查找的元素“50”时,在顺序表中无法找到它的位置,所以显示为“0”;



当输入查找的元素“80”时,可以在顺序表中找到它的位置,为“3”。



4、主页面如下:



六、实验总结与心得
1、顺序表是一种顺序存储结构,通常用数组来实现,在按值查找和按位查找时的时间复杂度分别是:O(n)和O(1)。

2、在顺序表中,等概率情况下,插入和删除一个元素平均需要移动表长的一半个元素,具体移动元素的个数与表长该元素在表中的位置有关。

3、线性表的顺序存储结构——随机存取



4、心得体会

    因为大一的基础知识不扎实,很多C++知识已经忘记了,无法很灵活把相关知识运用到程序中去,所以在本学期数据结构的第一次实验中明显有些吃力。在实验过程中,我借助课本上的参考知识点,复习老师上课给我们讲的内容,另外也借助上学期的程序设计内容,把不熟悉的地方补回来,终于在最后的时间内完成了这一实验。
    在这次实验中,程序功能都较为简单,只有实验要求中的插入、删除、查找、输出这几个功能,希望除了老师要求
82d1
的内容,自己可以适当得拓展一些内容,让功能更加完整,程序更加全面。
    希望在大二的数据结构学习中,可以学得扎实一点,同时也可以自己多学习一些课外的内容,可以做到在不借助过多的参考资料的情况下,独立完成一个完整的程序设计,加油!
         林纯青可是很棒的!
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: