线性表的顺序储存结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

交通大学《算法与数据结构》课程

实验报告

班级:计算机科学与技术2014级2班

实验项目名称:线性表的顺序储存结构

实验项目性质:

实验所属课程:算法与数据结构

实验室(中心): B01407

指导教师:鲁云平

实验完成时间:2016 年 3 月21 日

一、实验目的

1、实现线性表的顺序存储结构

2、熟悉C++程序的基本结构,掌握程序中的头文件、实现文件和主文件之

间的相互关系及各自的作用

3、熟悉顺序表的基本操作方式,掌握顺序表相关操作的具体实现

二、实验容及要求

对顺序存储的线性表进行一些基本操作。主要包括:

(1)插入:操作方式为在指定元素前插入、在指定元素之后插入、在指定位置完成插入

(2)删除:操作方式可分为删除指定元素、删除指定位置的元素等,尝试实现逻辑删除操作。

(3)显示数据

(4)查找:查询指定的元素(可根据某个数据成员完成查询操作)

(5)定位操作:定位指定元素的序号

(6)更新:修改指定元素的数据

(7)数据文件的读写操作等。

其它操作可根据具体需要自行补充。

要求线性表采用类的定义,数据对象的类型自行定义。

三、实验设备及软件

VC6.0

四、设计方案

㈠题目

线性表的顺序存储结构

㈡设计的主要思路

1、新建SeqList.h头文件,定义SeqList模板类

2、设计类数据成员,包括:T *data(用于存放数组)、int maxSize (最大可容表项的项数)、int last(当前已存表项的最后位置)

3、设计类成员函数,主要包括:

int search(T& x)const;//搜索x在表中位置,函数返回表项序号

int Locate(int i)const;//定位第i个表项,函数返回表项序号

bool getData(int i,T& x)const;//去第i个表项的值

void setData(int i,T& x)//用x修改第i个表项的值

bool Insert(int i,T& x);//插入x在第i个表项之后

bool Remove(int i,T& x); //删除第i个表项,通过x返回表项的值

bool IsEmpty();//判表空否,空则返回true;否则返回false

bool IsFull();//判表满否,满则返回true;否则返回false

void input(); //输入

void output();//输出

void ofile();/存储在文件中

void ifile();//读取文件并显示

㈢主要功能

1、建立新表

2、对表进行插入(指定元素前、后以及指定位置插入)、删除(指定

元素删除及指定位置删除)、修改等操作

3、显示当前操作表的全部容

4、存储在文件中

5、从文件中读取表

五、主要代码

㈠SeqList.h中的主要代码:

1、类成员声明部分:

protected:

T *data; //存放数组

int maxSize; //最大可容纳表项

int last; //当前已存表项的最后位置(从0开始)

void reSize(int newSize); //改变data数组空间大小

public:

SeqList(int sz = defaultSize); //构造函数

SeqList(SeqList& L); //复制构造函数

~SeqList(){delete[] data;} //析构函数

int Size()const{return maxSize;} //计算表最大可容纳表项个数

int Length()const{return last+1;} //计算表长度int search(T& x)const; //搜索x在表中位置,函数返回表项序号

int Locate(int i)const; //定位第i个表项,函数返回表项序号

bool getData(int i,T& x)const //去第i个表项的值

{if(i>0&&i<=last+1){x=data[i-1];return true;}else return false;} void setData(int i,T& x) //用x修改第i个表项的值

{if(i>0&&i<=last+1) data[i-1]=x;}

bool Insert(int i,T& x); //插入x在第i个表项之后

bool Remove(int i,T& x); //删除第i个表项,通过x返回表项的值

bool IsEmpty(){return (last == -1)?true:false;} //判表空否,空则返回true;否则返回false

bool IsFull(){return (last == maxSize-1)?true:false;} //判表满否,满则返回true;否则返回false

void input(); //输入

void output(); //输出

SeqListoperator=(SeqList& L); //表整体

void ofile(); //存储在文件中void ifile(); //读取文件并显示

2、部分成员函数

//搜索函数:在表中顺序搜索与给定值x匹配的表项,找到则函数返回该表项是第几个元素

//否则函数返回0,表示搜索失败

template

int SeqList::search(T& x)const{

for(int i = 0;i <= last; i++)

if(data[i] == x) return i+1; //顺序搜索

return 0; //搜索失败

}

//定位函数:

template

int SeqList::Locate(int i)const{

if(i >= i&&i <= last+1) return i ;

else return 0;

}

//插入函数

//将新元素x插入到表中第i(i>=0&&i<=last+1)个表项之后,函数返回插入成功的信息,若

//插入成功,则返回true;否则返回false.i=0是虚拟的,实际上是插入的第1个元素位置

template

bool SeqList::Insert(int i,T& x){

if(last == maxSize-1) return false; //表满,不能插入

if(i<0 || i>last+1) return false; //参数i不合理,不能插入

for(int j = last ;j >=i;j--) //依次后移,空出第i号位置

data[j+1] = data[j];

data[i] = x; //插入

last++; //最后位置+1

return true; //插入成功

相关文档
最新文档