1、数据结构实验报告 顺序表江西理工大学软件学院计算机类课程实验报告课程名称: 数据结构 班 级: 姓 名: 学 号: 江西理工大学软件学院实验二:顺序表 2012年11月10日一. 实验目的掌握顺序表的逻辑结构、存储结构、以及操作。二. 问题描述线性表是由n(n0)个元素(结点)a1, a2, , an组成的有限序列,其中ai中的i称为该数据元素的位置(序号),n为数据元素的个数(表的长度),当n等于0时称为空表。按逻辑次序依次把数据元素存放在一组连续的地址存储单元里的线性表称为顺序表。在这里,我们通过C+中的动态数组来实现顺序表的存放,并通过建立顺序表类实现它的各种操作。三. 实验要求实现顺序
2、表的三个框架操作:随机生成,用已有顺序表初始化另一个顺序表,输入顺序表。以及十个基本操作:在第i个元素之前插入元素,判断是否为空,求元素个数,取第i个元素,查找第一个与e满足compare()关系的元素,返回元素的前驱,返回后继,删除第i个元素,把一个顺序表赋值给另一个顺序表,置空顺序表。四. 实验环境3323机房OS:WxpC环境:1、TC2.0 2、VC+ 6.0五运行结果 程序开始界面框架操作:1. 随机生成顺序表(元素值为0到99之间的整数)2. 用已有的顺序表初始化另一个顺序表3. 输入顺序表基本操作:1. 在第i个元素之前插入一个元素2. 判断顺序表是否为空3. 求顺序表中元素的个
3、数4. 取第i个元素5. 查找第一个与之满足compare()关系的元素序号6. 返回某元素的前驱7. 返回某元素的后继8. 删除第i个元素9. 把一个顺序表复制给另一个顺序表10. 把顺序表置空11.顺序表的运用六 实验心得 熟悉最基本的数据类型顺序表,同时我们让我们熟练C+的基本操作,模板的使用,以及模块化的设计思想。同时也运用顺序表做一些简单的运用,比如顺序表的并交差运算,学生管理系统等等。 在这次的实验中,我掌握了很多C+的特性,在运用顺序表时,由于水平的原因,只是把简单的并交差运算写完,我想通过以后的学习,我们能够将其实现学生管理系统。 在实验中我也遇到很多的问题,输入输出的重载,输
4、出格式的控制等等,在以后的实验中吸取经验和教训,提高自己的水平。五 实验代码 基类:SqList.h/myhead.h包含自己设定的一些常量和类型#ifndef MYHEAD_H#define MYHEAD_H/#includeD:数据结构C+实验2myhead.h#includeD:UsersfclzDocumentsVisual Studio 2010Projects数据结构C+实验2myhead.h#endif/顺序表的一些常量说明#define LIST_MAX_SIZE 100#define LISTINCERMENT 10/随机数生成必须 #define _CRT_RAND_S #
5、include #include #include /顺序表数据结构的C+类的声明(基类)template class SqListprotected: ElemType *elem; int listSize; int n;public: /构造函数,析构函数,拷贝构造函数的声明 SqList(); virtual SqList(); SqList(const SqList& otherL); /顺序表的方法 /有序顺序表的折半查找 int bin_Search(ElemType key); /把顺序表置空 void clear(); /删除第i个元素 Status deleteElem(i
6、nt i,ElemType& e); /取第i个元素 int getElem(int i,ElemType& e); /求顺序表中元素的个数 int getLength(); /求顺序表存储空间的大小 int getListSize(); /在第i个元素之前插入一个元素 Status insert(int i,ElemType e); /判断顺序表是否为空 bool isEmpty(); /查找第1个与e满足compare关系的元素的序号 int locateElem(ElemType e,Status(*compare)(ElemType,ElemType); /返回某个元素的后继 Stat
7、us nextElem(ElemType e,ElemType& next_e); /重载复制运算符 SqList operator =(SqList rightL); /返回某个元素的前驱 Status priorElem(ElemType e,ElemType& prior_e); /在顺序表中顺序查找某个元素、 int sequentialSearch(ElemType e);/顺序表的方法/有序顺序表的折半查找template int SqList:bin_Search(ElemType key) int low,mid,high;/查找区域的起始、中间以及最后一个元素的下标 low=
8、0,high= n-1; while(low=high) mid=(low+high)/2; if(elemmid=key) return mid+1; else if(elemmidkey) low=mid+1; else high=mid-1; return 0;/把顺序表置空template void SqList:clear() n=0;/删除第i个元素template Status SqList:deleteElem(int i,ElemType& e) if(in) return ERROR; e=elemi-1; for(int j=i+1;j=n;+j) elemj-2=ele
9、mj-1; -n; return OK;/取第i个元素template Status SqList:getElem(int i,ElemType& e) if(in) return ERROR; e=elemi-1; return OK;/求顺序表中元素的个数template int SqList:getLength() return n;/取顺序表存储空间的大小template int SqList:getListSize() return listSize;/在第i元素之前插入一个元素template Status SqList:insert(int i,ElemType e) ElemT
10、ype *newbase; if(in+1) return ERROR; if(n=listSize) newbase =new ElemTypelistSize+LISTINCERMENT; assert(newbase!=0); for(int j=1;j=i;-j) elemj=elemj-1; elemi-1=e; +n; return OK;/判断顺序表是否为空template bool SqList:isEmpty() return n?false:true;/查找第1个与某元素e满足compare()关系元素template int SqList:locateElem(ElemT
11、ype e,Status (*compare)(ElemType,ElemType) int i; for(i=1;i=n&!(*compare)(elemi-1,e);+i); if(i=n) return i; else return 0;/返回某个元素的后继template Status SqList:nextElem(ElemType e,ElemType& next_e) int i=locateElem(e,equal); if(i1|i=n) return ERROR; else getElem(i+1,next_e); return OK;/重载运算符的定义template S
12、qList SqList:operator=(SqListrightL) if(this!=&rightL) if(listSizerightL.listSize) delete elem; elem=new ElemTyperightL.listSize; assert(elem!=0); listSize=rightL.listSize; n=rightL.n; for(int i=1;i=n;+i) elemi-1=rightL.elemi-1; return *this;/返回某个元素的前驱template Status SqList:priorElem(ElemType e,Elem
13、Type& prior_e) int i=locateElem(e,equal); if(i=1) return ERROR; else getElem(i-1,prior_e); return OK;/在顺序表中顺序查找某个元素template int SqList:sequentialSearch(ElemType key) for(int i=1;in& key!=elemi-1;i+); if(i=n) return i; else return 0;/构造函数的实现template SqList:SqList() elem =new ElemTypeLIST_MAX_SIZE; assert(elem!=0); listSize=LIST_MAX_SIZE; n=0;/析构函数的实现template SqList:SqList() delete elem;/拷贝构造函数的实现template
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1