实验+课程设计指导书.docx
- 文档编号:26439508
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:66
- 大小:66.15KB
实验+课程设计指导书.docx
《实验+课程设计指导书.docx》由会员分享,可在线阅读,更多相关《实验+课程设计指导书.docx(66页珍藏版)》请在冰豆网上搜索。
实验+课程设计指导书
《数据结构与测绘软件开发》实验指导书
中国矿业大学测绘与国土信息中心
2014-05-20
实验一线性表类的设计与实现
一、实验要求
利用C++语言编程分别实现线性表的顺序存储与链式存储。
二、实验基本操作
1、新建工程
1)执行菜单:
文件—新建—项目,选择“Win32控制台应用程序”;
2)更改工程存储路径;
3)更改工程名称;
4)点击“确定”。
2、添加头文件与类的声明
1)头文件
在#include“stdafx.h”之后加入如下语句:
#include
usingnamespacestd;
2)顺序表
在main函数前加入如下类的声明:
classSeqList
{
public:
//构造、析构函数
SeqList();
explicitSeqList(intmaxSize);//仅包含一个参数的构造函数
~SeqList();
public:
//复制构造函数、赋值运算
SeqList(constSeqList&sl);
SeqList&operator=(constSeqList&sl);
public:
//成员函数
intLength()const;
intFind(int&x)const;//查找
intLocate(inti)const;//定位
intInsert(int&x,inti);//插入
intRemove(int&x);//删除
intNext(int&x);//后继
intPrior(int&x);//前驱
intIsEmpty();
intIsFull();
intGet(inti);//提取
public:
friendostream&operator<<(ostream&os,SeqList&sl)
{
for(inti=0;i os< returnos; } private: //成员变量 int*_data; int_curSize; int_maxSize; }; 3)链表 在main函数前加入如下类的声明: typedefintType; typedefstructListNode{ intdata;//数据域 structListNode*prior;//指针域 structListNode*next;//指针域 }LNode; classLinkedList { public: //构造、析构函数 LinkedList(); explicitLinkedList(intMaxSize); ~LinkedList(){} public: //复制构造函数、赋值运算 LinkedList(constLinkedList&sl); LinkedList&operator=(constLinkedList&sl); public: //成员函数 intLength()const; intSearch(Type&x)const;//查找 intInsert(Type&x,inti);//插入 intRemove(Type&x);//删除 voidSort();//排序 intIsEmpty();//判断链表是否为空 voidSetNull();//置空 TypeGet(inti);//提取 voidOutput();//输出 private: //成员变量 ListNode*head; int_size; }; 3、添加类的实现代码(顺序表) 在各自类的声明之后,添加如下代码: 1)顺序表的函数 //构造函数 SeqList: : SeqList() : _data(NULL) _maxSize(0) _curSize(0) {} SeqList: : SeqList(intmaxSize) : _maxSize(maxSize) _curSize(0) { _data=newint[_maxSize];//开辟用于存储线性表的空间(连续空间) } //析构函数 SeqList: : ~SeqList() { if(NULL! =_data) delete[]_data; } //取得线性表的长度 intSeqList: : Length()const { return_curSize; } //在线性表中定位x所在位置 intSeqList: : Find(int&x)const { for(inti=0;i<_curSize;++i) if(x==_data[i]) returni; return-1; } //插入元素x intSeqList: : Insert(int&x,inti) { //判断下标是否越界 if(i<0||i>=_maxSize) return-1; //判断线性表是否已满 if(_curSize==_maxSize) return-1; //判断插入的位置是否位于_curSize之后 if((i<_maxSize-1)&&i>=_curSize) { _data[_curSize]=x; _curSize++;//线性表的长度加1 return1; } //首先将位于位置i之后的所有元素后移一个位置 for(intj=_curSize;j>i;j--) { _data[j]=_data[j-1]; } _data[i]=x;//将待插入元素插入i位置 _curSize++;//线性表的长度加1 return1; } //删除元素x intSeqList: : Remove(int&x) { for(inti=0;i<_curSize;i++) { if(_data[i]==x) { //将i位置之后的元素前移一个位置 for(intj=i;j<_curSize-1;j++) { _data[j]=_data[j+1]; } _curSize--; return1; } } return0; } //取得x所在位置的下一个位置 intSeqList: : Next(int&x) { for(inti=0;i<_curSize;i++) { if(_data[i]==x) returni+1;//调用此函数的过程需要检查返回的值是否越界 } } //取得x所在位置的前一个位置 intSeqList: : Prior(int&x) { for(inti=0;i<_curSize;i++) { if(_data[i]==x) returni-1;//调用此函数的过程需要检查返回的值是否越界 } } //判断线性表是否为空 intSeqList: : IsEmpty() { if(_curSize<=0) return1; else return0; } //判断线性表是否已经存储满 intSeqList: : IsFull() { if(_curSize==_maxSize) return1; else return0; } //取得i位置的元素 TypeSeqList: : Get(inti) { return_data[i]; } 2)顺序表的两个重要应用 ///---------------------------------------------------------------------------- //集合的交与并 ///---------------------------------------------------------------------------- voidJoin(SeqList&A,SeqList&B,SeqList&R) { //首先遍历A for(inti=0;i { intx=A.Get(i);//取得i位置的元素 if(B.Find(x)! =-1)//在B中寻找同样的元素,若不成功,则返回-1 { R.Insert(x,R.Length()); } } } voidMerge(SeqList { for(inti=0;i { intx=B.Get(i); if(A.Find(x)==-1) { A.Insert(x,A.Length()); } } } 3)main函数的实现 intmain(intargc,char*argv[]) { //实例化两个线性表 SeqListA(20); SeqListB(20); //线性表A的数据初始化 for(inti=0;i<10;i++) A.Insert(i,i); //线性表B的数据初始化 for(inti=5;i<15;i++) B.Insert(i,i-5); //输出A cout<<"A:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 课程设计 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)