数据结构实验6.docx
- 文档编号:24306738
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:16
- 大小:51.46KB
数据结构实验6.docx
《数据结构实验6.docx》由会员分享,可在线阅读,更多相关《数据结构实验6.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构实验6
南昌大学实验报告
学生姓名:
学号:
专业班级:
实验类型:
□验证■综合□设计□创新实验日期:
第十周星期三实验成绩:
一、实验名称
用c++程序实现顺序表的操作
二、实验目的
1.掌握顺序表的基本概念和基本用法;
2.掌握顺序表的逻辑结构和存储结构;
4.掌握顺序表的操作,包括查找、插入和删除等;
3.能够用C++程序实现顺序表的操作。
三.实验环境
PC微机
DOS操作系统或Windows操作系统
VisualC++程序集成环境
四.实验内容与步骤
1.顺序表的构造函数
用C++的new语句,初始申请一个大小为LIST_MAX_SIZE常量,元素类型为ElemType的动态一维数组,用于存放顺序表中的数据元素。
如果申请成功,该语句的返回值为申请到的存储空间首地址;否则返回一个空地址。
elem=newElemType[LIST_MAX_SIZE];
assert(elem!
=0);
再把顺序表当前元素的个数置为0。
2.拷贝初始化构造函数和赋值运算符的重载
首先,分配一个和拷贝初始化顺序表otherL一样大的存储空间。
然后,根据拷贝初始化顺序表otherL,设置当前顺序表分配的存储空间大小及当前顺序表元素的个数,再将拷贝初始化顺序表的每个元素复制到当前顺序表中。
赋值运算符的重载类似于拷贝初始化构造函数。
3.删除第i个元素
顺序表的删除操作是指将表中的第i(1≦i≦n)个元素删去,使长度为n的顺序表(a1,…,ai-1,ai,ai+1,…,an)变成长度为n-1的顺序表(a1,…,ai-1,ai+1,…,an)。
若只是删除顺序表的最后一个元素,只要把当前元素的个数减1,即可达到简单删除的目的;若待删除元素的序号为1≦i≦n-1,则为保持元素间的逻辑关系,必须将顺序表的第i+1,第i+2,…,第n个元素,依次前移一位,以填补删除操作造成的空缺。
最后,当前的元素的个数减1,成功删除后返回。
该算法首先要判断待删除元素的序号i是否越界(i<1||i>n)。
如果越界,则无法删除,给出出错的提示信息,返回。
4.在第i个元素之前插入一个元素
顺序表的插入操作是指在表的第i(1≦i≦n+1)个元素之前,插入一个新元素e,使长度为n的顺序表:
(a1,…,ai-1,ai,…,an)变成长度为n+1的顺序表:
(a1,…,ai-1,e,ai,…,an)。
顺序表中,元素的物理存储结构必须和元素的逻辑结构保持一致,因此插入前必须将顺序表的第n个元素、第n-1个元素……第i个元素,依次后移一位,以便空出第i个元素的位置;然后在该位置上写入新元素e;最后,当前元素的个数加1,成功插入后返回。
该算法首先要判断插入元素的序号i是否越界(i<1||i>n+1)。
如果越界,则无法插入。
另外,插入前,还要事先判断当前已分配的存储空间是否已满(n≧listSize)。
如果已满,则需另外申请新的更大的存储空间,再把现有的元素搬移到新的存储空间。
5.查找第1个与e满足compare()关系的元素
compare()关系是指等于、大于及小于关系,此操作从顺序表第一个元素开始,逐一判断顺序表的当前元素是否与待查元素e满足比较关系。
如果满足,则返回待查元素的序号,成功返回。
如果扫描完整个顺序表,仍没有元素与待查元素满足比较关系,则返回0,表示查找失败。
6.把顺序表置空
只是把顺序表当前元素的个数置为0,不回收其存储空间。
7.析构函数
使用delete语句回收先前用new语句为顺序表分配的存储空间。
delete[]elem。
五、实验数据及处理结果
源程序:
//一些常量的定义
#defineERROR0
#defineOK1
#defineINFEASIBLE-1;
#defineOVERFLOW-2;
typedefintStatus;
//顺序表类c++语言定义
//wu1.cpp
#include
#ifndefhead_H
#definehead_H
#include"head.h"
#endif
#defineLIST_MAX_SIZE100
#defineLISTINCREMENT10
template
classSqList
{
public:
intbin_Search(ElemTypekey);
voidclear();
StatusdeleteElem(inti,ElemType&e);
StatusgetElem(inti,ElemType&e);
intgetLength();
intgetListSize();
Statusinsert(inti,ElemTypee);
boolisEmpty();
intlocateElem(inti,ElemTypee);
Statusequal(ElemTypee);
StatusnextElem(ElemTypee,ElemType&next_e);
SqList
StatuspriorElem(ElemTypee,ElemType&prior_e);
intsequentialSearch(ElemTypee);
SqList();
virtual~SqList();
SqList(constSqList
protected:
ElemType*elem;
intlistSize;
intn;
};
template
intSqList
:
bin_Search(ElemTypekey)
{
intlow,mid,high;
low=0,high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(elem[mid]==key)
returnmid+1;
elseif(elem[mid] low=mid+1; else high=mid-1; } return0; } template voidSqList : clear() { n=0; } template StatusSqList : deleteElem(inti,ElemType&e) { if(i<1||i>n)returnERROR; e=elem[i-1]; for(intj=i+1;j<=n;++j) elem[j-2]=elem[j-1]; --n; returnOK; } template StatusSqList : getElem(inti,ElemType&e) { if(i<1||i>n)returnERROR; e=elem[i-1]; returnOK; } template intSqList : getLength() { returnn; } template intSqList : getListSize() { returnlistSize; } template StatusSqList : insert(inti,ElemTypee) { ElemType*newbase; if(i<1||i>n+1)returnERROR; if(n>=listSize) { newbase=newElemType[listSize+LISTINCREMENT]; assert(newbase! =0); for(intj=1;j<=n;++j) newbase[j-1]=elem[j-1]; delete[]elem; elem=newbase; listSize+=LISTINCREMENT; } for(intj=n;j>=i;--j) elem[j]=elem[j-1]; elem[i-1]=e; ++n; returnOK; } template boolSqList : isEmpty() { returnn? false: true; } template intSqList : locateElem(inti,ElemTypee) { for(i=1;i<=n&&! elem[i-1]==e;++i); if(i<=n) returni; else return0; } template StatusSqList : nextElem(ElemTypee,ElemType&next_e) { for(inti=1;i<=n&&! elem[i-1]==e;++i); if(i<1||i==n) returnERROR; else getElem(i+1,next_e); returnOK; } template SqList : operator=(SqList { if(this! =&rightL) { if(listSize { delete[]elem; elem=newElemType[rightL.listSize]; assert(elem! =0); listSize=rightL.listSize; } n=rightL.n; for(inti=1;i<=n;++i) elem[i-1]=rightL.elem[i-1]; } return*this; } template StatusSqList : priorElem(ElemTypee,ElemType&prior_e) { for(inti=1;i<=n&&! elem[i-1]==e;++i); if(i>n) returnERROR; else getElem(i-1,prior_e); returnOK; } template intSqList : sequentialSearch(ElemTypekey) { for(inti=1;i<=n&&key! =elem[i-1];++i); if(i<=n) returni; else return0; } template SqList : SqList() { elem=newElemType[LIST_MAX_SIZE]; assert(elem! =0); listSize=LIST_MAX_SIZE; n=8; } template SqList : ~SqList() { delete[]elem; } template SqList : SqList(constSqList { elem=newElemType[otherL.listSize]; assert(elem! =0); listSize=otherL.listSize; n=otherL.n; for(inti=1;i<=n;++i) elem[i-1]=otherL.elem[i-1]; } template Statusequal(ElemTypee) {for(inti=1;i<=n&&! elem[i-1]==e;++i); if(i<=n) returnOK; else returnERROR; } template Statuslarger(ElemTypee) { if(elem[i-1]>e) returnOK; else returnERROR; } //功能: 判断一个整数是否小于另一个整数 //输入: 函数的值参a和b为需要比较的两个整数 //输出: 若a小于b,函数的返回值为OK;否则为ERROR template Statusless(ElemTypee) { if(elem[i-1] returnOK; else returnERROR; } //输入输出 //wu2.cpp #ifndefwu1_cpp #definewu1_cpp #include"wu1.cpp" #endif #include usingnamespacestd; template classMySqList: publicSqList { public: voidread(istream&in); voiddisplay(ostream&out)const; }; template voidMySqList : read(istream&in) { cout<<"请输入一个顺序表"< for(inti=1;i<=n;++i) in>>elem[i-1]; } template istream&operator>>(istream&in,MySqList { iD.read(in); returnin; } template voidMySqList : display(ostream&out)const { for(inti=1;i<=n;++i) out<<"["< out< for(i=1;i<=n;++i) out<<""< out< } template ostream&operator<<(ostream&out,constMySqList { oD.display(out); returnout; } //顺序表的测试函数 #include usingnamespacestd; #ifndefwu2_cpp #definewu2_cpp #include"wu2.cpp" #endif templateSqList voidmain() { MySqList SqList inta,b,t; cin>>a1; a3=a1; cout<<"当前输入的顺序表为: "< cout<<" (1)用当前顺序表初始化另一个顺序表"< (2)删除表中一个元素"< "(3)在第i个元素之前插入一个元素"< cout<<"请选择你要执行的操作: "; for(;cin>>t;) { if(t==1) { a2=a1; cout<<"当前输入的顺序表初始化另一个顺序表为: "< } if(t==2) { cout<<"请输入你要删除的数的序号: "; cin>>b; a1.deleteElem(b,a); cout<<"你要删除的数是: "< cout<<"删除"< "< } if(t==3) { cout<<"请问你要在哪个元素之前插入一个新的元素: "; cin>>b; cout<<"你要插入的数是: "; cin>>a; a1.insert(b,a);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验