数据结构算法实验内容与指导.docx
- 文档编号:4417379
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:17
- 大小:20.32KB
数据结构算法实验内容与指导.docx
《数据结构算法实验内容与指导.docx》由会员分享,可在线阅读,更多相关《数据结构算法实验内容与指导.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构算法实验内容与指导
数据结构算法实验内容与指导
1、实验目的:
将书中常用算法编写成程序,上机调试,验证算法的正确性,同时理解数据结构对于软件开发的意义。
同时又能复习C++语言的重点与难点,熟悉vc++6.0调试环境,掌握一个完整程序的构成,为今后软件设计打下基础。
2、实验要求:
熟练掌握c++面象对象的编程思想及vc++6.0上机调试环境。
3、实验内容:
(1)线性表顺序存储(顺序表类)的插入、删除等操作的实现
(2)线性表链式存储(单链表类)的建立、插入、删除等操作的实现
(3)特殊线性表进栈、退栈操作的实现
(4)顺序查找及二分查找算法的实现
(5)常用的几种排序算法的实现
(6)二叉树的建立、遍历算法的实现
(7)图的邻接矩阵的建立,及遍历算法实现
实验一:
线性表顺序存储(顺序表类)的插入、删除等操作的实现
//SeqList.h
classSeqList
{
protected:
DataType*list;//数组
intmaxSize;//最大元素个数
intsize;//当前元素个数
public:
SeqList(intmax=0);//构造函数
~SeqList(void);//析构函数
intSize(void)const;//取当前数据元素个数
voidInsert(constDataType&item,inti);//插入
DataTypeDelete(constinti);//删除
DataTypeGetData(inti)const;//取数据元素
};
SeqList:
:
SeqList(intmax)//构造函数
{
maxSize=max;
size=0;
list=newDataType[maxSize];
}
SeqList:
:
~SeqList(void)//析构函数
{
delete[]list;
}
intSeqList:
:
Size(void)const//取当前数据元素个数
{
returnsize;
}
voidSeqList:
:
Insert(constDataType&item,inti)//插入
//在指定位置i前插入一个数据元素item
{
if(size==maxSize)
{
cout<<"顺序表已满无法插入!
"< exit(0); } if(i<0||i>size)//参数正确与否判断 { cout<<"参数i越界出错! "< exit(0); } //从size-1至i逐个元素后移 for(intj=size;j>i;j--)list[j]=list[j-1]; list[i]=item;//在i位置插入item size++;//当前元素个数加1 } DataTypeSeqList: : Delete(constinti)//删除 //删除指定位置i的数据元素,删除的元素由函数返回 { if(size==0) { cout<<"顺序表已空无元素可删! "< exit(0); } if(i<0||i>size-1)//参数正确与否判断 { cout<<"参数i越界出错! "< exit(0); } DataTypex=list[i];//取到要删除的元素 //从i+1至size-1逐个元素前移 for(intj=i;j size--;//当前元素个数减1 returnx;//返回删除的元素 } DataTypeSeqList: : GetData(inti)const//取数据元素 //取位置i的数据元素,取到的数据元素由函数返回 { if(i<0||i>size-1)//参数正确与否判断 { cout<<"参数i越界出错! "< exit(0); } returnlist[i];//返回取到的元素 } //ExamTest1.cpp #include #include typedefintDataType;//定义具体问题元素的数据类型 #include"SeqList.h" voidmain(void) { SeqListmyList(100);//定义顺序表类对象myList intn=10,x; for(inti=0;i {cout<<“请输入插入元素x的值”< cin>>x; mylist.Insert(x,i); } myList.Delete(4);//删除myList中数据元素5 for(i=0;i cout< } 分析讨论: 问题1: 请分析上述主函数的功能及运行结果; 问题2: 完成P41例2-2建立学生情况表实验。 //ExamTest2.cpp #include #include structStudentType { longnumber;//学号数据项 charname[10];//姓名数据项 charsex[3];//性别数据项 intage;//年龄数据项 };//结构体StudentType typedefStudentTypeDataType;//定义DataType为StudentType数据类型 #include"SeqList.h"//包含顺序表文件 voidmain(void) { SeqListmyList(100); StudentTypex[3]={{2000001,"张三","男",20}, {2000002,"李四","男",21}, {2000003,"王五","女",22}}; intn=3; DataTypes; for(inti=0;i myList.Insert(x[i],i); for(i=0;i { s=myList.GetData(i); cout< } } 实验二: 线性表链式存储(单链表类)的建立、插入、删除等操作的实现 //LinList.h template classLinList;//前视定义,否则友元无法定义 template classListNode { friendclassLinList private: ListNode Tdata;//定义为公有成员方便使用 public: //构造函数1,用于构造头结点 ListNode(ListNode {next=ptrNext;} //构造函数2,用于构造其他结点 ListNode(constT&item,ListNode {data=item;next=ptrNext;} ~ListNode(void){}//析构函数 }; //单链表类的定义 template classLinList { private: ListNode intsize;//当前的数据元素个数 ListNode public: LinList(void);//构造函数 ~LinList(void);//析构函数 intListSize(void)const;//取当前数据元素个数 voidInsert(constT&item,inti);//前插 TDelete(inti);//删除 TGetData(inti);//取元素 }; //单链表类的实现 template LinList : LinList(void)//构造函数 { head=newListNode size=0;//size的初值为0 } template LinList : ~LinList(void)//析构函数 {ListNode p=head;//p指向第一个结点 while(p! =NULL)//循环释放结点空间直至初始化状态 {q=p; p=p->next; deleteq; } size=0;//结点个数置为初始化值0 head=NULL; } template ListNode : Index(inti)//定位 //返回指向第i个数据元素结点的指针 //参数i的取值范围为: -1≤i≤size-1;i=-1时返回头指针 { if(i<-1||i>size-1) { cout<<"参数i越界出错! "< exit(0); } if(i==-1)returnhead;//i为-1时返回头指针head ListNode intj=0;//从0开始计数 while(p! =NULL&&j { p=p->next; j++; } returnp;//返回第i个结点的指针 } template intLinList : ListSize(void)const//取当前数据元素个数并返回 { returnsize; } template voidLinList : Insert(constT&item,inti)//插入 //在第i个结点后插入一个元素值为item的新结点 //参数i的取值范围为: 0≤i≤size { if(i<0||i>size) { cout<<"参数i越界出错! "< exit(0); } ListNode //构造新结点p,p的data域值为item,next域值为p->next ListNode p->next=q;//新结点插入第i个结点前 size++;//元素个数加1 } template TLinList : Delete(inti)//删除 //删除第i个数据元素并返回。 参数i的取值范围为: 0≤i≤size-1 { if(size==0) { cout<<"链表已空无元素可删! "< exit(0); } if(i<0||i>size-1) { cout<<"参数i越界出错! "< exit(0); } ListNode s=p->next;//s指向第i个结点 p->next=p->next->next;//第i个结点脱链 Tx=s->data; deletes;//释放第i个结点空间 size--;//结点个数减1 returnx;//返回第i个结点的data域值 } template TLinList : GetData(inti)//取数据元素 //取第i个数据元素并返回。 参数i的取值范围为: 0≤i≤size-1 { if(i<0||i>size-1) { cout<<"参数i越界出错! "< exit(0); } ListNode returnp->data; } //ExamTest3.cpp #include #include #include"LinList.h" voidmain(void) { LinList Ints[]={10,20,30,40,50,60,70,80,90,100},n=10; Inttemp; For(intI=0;I MyList.Insert(s[I],I); MyList.Delete(4); For(I=0;I { temp=myList.GetData(i); cout< } } 问题1: 请分析上述主函数的功能及运行结果; 实验三: 各种排序算法的实验 //sort.h #include #include voidInsertSort(DataTypea[],intn) //用直接插入法对a[0]--a[n-1]排序 { inti,j; DataTypetemp; for(i=0;i { temp=a[i+1]; j=i; while(j>-1&&temp.key<=a[j].key) { a[j+1]=a[j]; j--; } a[j+1]=temp; } } voidShellSort(datatypea[],intn,intd[],intnumOfD) //用希尔排序法对记录a[0]--a[n-1]排序 //各组内采用直接插入法排序 { inti,j,k,m,span; datatypetemp; for(m=0;m { span=d[m]; for(k=0;k { for(i=k;i { temp=a[i+span]; j=i; while(j>-1&&temp.key<=a[j].key) { a[j+span]=a[j]; j=j-span; } a[j+span]=temp; } } } } voidSelectSort(datatypea[],intn) /*用直接选择排序法对a[0]--a[n-1]排序*/ { inti,j,small; datatypetemp;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 实验 内容 指导