数据结构实习报告33页doc.docx
- 文档编号:3502046
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:25
- 大小:105.87KB
数据结构实习报告33页doc.docx
《数据结构实习报告33页doc.docx》由会员分享,可在线阅读,更多相关《数据结构实习报告33页doc.docx(25页珍藏版)》请在冰豆网上搜索。
数据结构实习报告33页doc
测绘与国土信息工程学院
《数据结构》课程
实验报告
姓名:
学号:
班级:
成绩:
实验态度:
1、认真2、良好3、一般4、不认真
实验成果:
1、优秀2、可信3、一般4、不真实
实验报告:
1、清晰完整2、比较完整3、不清晰
教师签名:
____________
交报告日期:
2011年7月1日
实验一线性表的链表实现类的设计
一、需求分析
本次程序设计要求建立一个以链表为储存方式的线性表,以及实现线性表所需求的各种功能。
对线性表的操作有:
(1)输入形式为从键盘输入,用户根据界面的提示从键盘直接输入所对应的数即可。
输入的值要求为整数类型,用户输入其它类型的数据时(例如字符串)会产生不可预测的错误。
(2)输出的界面为DOS窗口,系统按照用户输入的数据类型,将会把相应的输出结果显示到界面上。
(3)程序可以建立一个以链表形式储存的线性表,对线性表可以进行查找、删除、插入、构造、销毁和获取链表长度的操作。
(4)以L1={0,5,9,10,12,12,17,20,24}构造链表;找到重复的第二个元素12并删除它;在第五个元素后插入55;生成L2={33,45,50}的链表并将它与L1的链表合并。
二、概要设计
structLinkNode{
intdata;
LinkNode*link;
LinkNode(LinkNode*ptr=NULL)
{
link=ptr;
}
LinkNode(constintx,LinkNode*ptr=NULL)
{
data=x;
link=ptr;
}
};
classList{
public:
List(){first=newLinkNode;}
List(constintx){first=newLinkNode(x);}
List(List&L);
~List(){
MakeEmpty();
deletefirst;
}
LinkNode*Search(intx);
LinkNode*Locate(inti);
LinkNode*GetHead()const{returnfirst;}
intGetData(inti);
voidDeleteRepeatedElem();
voidInput();
voidDisplay();
List&operator=(List&L);
private:
LinkNode*first;
};
List:
:
List(List&L)
{
intval;
LinkNode*srcPtr=L.GetHead();
LinkNode*desPtr=first=newLinkNode;
while(srcPtr->link!
=NULL){
val=srcPtr->link->data;
desPtr->link=newLinkNode(val);
desPtr=desPtr->link;
srcPtr=srcPtr->link;
}
desPtr->link=NULL;
}
三、显示详细设计
intmain(intargc,char*argv[])
{
ListL1;
intd;
L1.Input();
L1.Display();
L1.DeleteRepeatedElem();
L1.Display();
L1.Insert(5,55);
L1.Display();
L1.Remove(6,d);
L1.Display();
ListL2;
L2.Input();
L2.Display();
L1.MergeList(L2);
L1.Display();
return0;
}
四、运行结果显示
五、调试分析:
本次试验中刚开始不知道怎么调试,总是出现各种各样的错误,不知道怎么回事,大部分都是通过XX来了解那里出现错误,也同时对bool函数进行深入的了解,bool函数在我们学C++时候,老师没有讲,缺乏使用的经验
六、思考与小结
在本次试验中我明白链表的的类的定义,链表的插入,链表的定位,链表的排序等函数的写法,但是如果让我自己不参考课本还是写不出来,但是能明白代码的含义及程序运行的顺序,基本的出错修正,有时候也不知道出现什么问题,没有错误,但是总是运行不了,到最后通过XX才明白是构造函数出现错误了,这样的错误在我们学习C++的时候也出现过,但是好像在visualstudio2010没有出现类似的错误,但是也没有找出根本原因,就放在那里了,
实验二顺序栈的自定义类设计
一、需求分析
本次程序设计要求建立一个栈的顺序存储结构类,以及实现线性表所需求的各种功能。
对栈的操作有:
(1)输入形式为从键盘输入,用户根据界面的提示从键盘直接输入所对应的数即可。
输入的值要求为整数类型,用户输入其它类型的数据时(例如字符串)会产生不可预测的错误。
(2)输出的界面为DOS窗口,系统按照用户输入的数据类型,将会把相应的输出结果显示到界面上。
(3)以“ABCDEFG”的字符串顺序进栈;以合适顺序出栈得到序列“CDBAGFE”;取栈顶元素得到‘F’;进栈直到栈满和出栈直到栈空,检验对这两种情形的正确判断和处理
二、概要设计
template
classstack
{
public:
stack(){};
voidinit()
{
tos=0;
}
voidpush(Tch)
{
if(tos>=0&&tos { stck[tos]=ch; tos++; if(size-1==tos) { cout<<"nowthestackisfull"< } } } Tpop() { if(tos>0) { tos--; returnstck[tos]; } else { cout<<"nowthestackisempty"< return0; } } virtual~stack(){}; private: Tstck[size]; inttos; }; 三、详细设计 intmain(intargc,char*argv[]) { stack inti; s.init(); s.push('A'); s.push('B'); s.push('C'); s.push('D'); s.push('E'); s.push('F'); s.push('G'); for(i=0;i<7;i++) { cout<<"pops: "< } cout<<"==================================="< s.push('A'); s.push('B'); s.push('C'); for(i=0;i<1;i++) { cout<<"pops: "< } s.push('D'); for(i=0;i<3;i++) { cout<<"pops: "< } s.push('E'); s.push('F'); s.push('G'); for(i=0;i<3;i++) { cout<<"pops: "< } cout< return0; } 四、调试结果 五、调试分析 刚开始不知道怎么回事,就是调试不出来,虽然栈的压入和弹出的模式很清晰,但是类的建立,栈的建立,溢出处理,读取栈顶元素,新元素的进栈,计算栈中元素的个数,由于写的代码有点少,所以很容易就调试出现如期的结果 六、思考与小结 一直不明白模板类的作用,但是也没有过多关注模板类的作用,后来越来越多的同学开始讨论模板类,都都不明白怎么回事,后来通过XX了解了一些,但是还是不是很清楚,这是学编程以来从来没有接触过的东西,最后才明白这是在类的建立的时候使用的 实验三字符串的操作类设计 一、需求分析 本次程序设计要求建立字符串的操作类, (1)输入形式为从键盘输入,用户根据界面的提示从键盘直接输入所对应的数即可。 输入的值要求为整数类型,用户输入其它类型的数据时(例如字符串)会产生不可预测的错误。 (2)输出的界面为DOS窗口,系统按照用户输入的数据类型,将会把相应的输出结果显示到界面上。 (3)用堆分配存储表示串,实现串的比较、复制、串的连接,取子串、子串匹配定位和串替换等基本操作。 测试数据示例: 以“abcde”构造一个串s1,以“gabcdef”构造另一个串s2;比较s1和s2是否相等;在s2中定位s1子串;复制s2串并连接在s1串后。 二、概要设计: classAstring { private: char*ch; inttruLength; intMaxsize; public: Astring(intsz=Max); Astring(constchar*sjs); Astring(constAstring&ob); intLength()const { returntruLength; } intoperator==(Astring&ob)const { returnstrcmp(ch,ob.ch)==0; } intoperator! =(Astring&ob)const { returnstrcmp(ch,ob.ch); } Astring&operator()(intpos,intlen); Astring&operator=(Astring&ob); Astring&operator+=(Astring&bb); charoperator[](inti); intFind(Astring&pat)const; voidstrcomp(Astring&ob); voidplay(); virtual~Astring(); }; 二、详细设计 Astring: : Astring(intsz) { this->Maxsize=Max; this->ch=newchar[Maxsize-1]; this->truLength=0; this->ch[0]='\0'; } Astring: : Astring(constchar*sjs) { intlength=strlen(sjs); this->Maxsize=(length>Max)? length: Max; this->ch=newchar[Maxsize-1]; this->truLength=length; strcpy(this->ch,sjs); } Astring: : Astring(constAstring&ob) { Maxsize=ob.Maxsize; this->ch=newchar[Maxsize-1]; this->truLength=ob.truLength; strcpy(this->ch,ob.ch); } Astring&Astring: : operator()(intpos,intlen) { inti,j; Astringtemp; if(pos<0||pos+len-1>Maxsize||len<0) { temp.truLength=0; temp.ch[0]='\0'; } else { if(pos+len-1>=truLength) { len=truLength-pos; } else { temp.truLength=len; } for(i=0,j=pos;i { temp.ch[i]=this->ch[j]; } temp.ch[i]='\0'; } return*this; } Astring&Astring: : operator=(Astring&ob) { { this->Maxsize=ob.Maxsize; this->truLength=ob.truLength; strcpy(this->ch,ob.ch); } return*this; } Astring&Astring: : operator+=(Astring&ob) { if(this->truLength+ob.truLength<=this->Maxsize) { this->Maxsize=Maxsize; this->truLength=this->truLength+ob.truLength; strcat(this->ch,ob.ch); return*this; } else { char*tem=this->ch; this->Maxsize=Maxsize*2; this->truLength=this->truLength+ob.truLength; ch=newchar[Maxsize]; tem[0]='\0'; strcpy(this->ch,tem); strcat(this->ch,ob.ch); deletetem; return*this; } } charAstring: : operator[](inti) { if(i<0||i>truLength) { cout<<"yourintisovertherange"< exit (1); } else returnthis->ch[i]; } intAstring: : Find(Astring&pat)const { inttem=0,tim=-1,i; for(i=0;i { for(intj=0,k=0;j { if(pat.ch[j]==this->ch[k]) { tem++; } else { continue; } } if(pat.truLength==tem) { tim=i; } else { tim=-1; } } returni; } voidAstring: : strcomp(Astring&ob) { intt=strcmp(this->ch,ob.ch); if(t==0) { cout<<"s1=s2"< } else { if(t<0) { cout<<"s2 } else { cout<<"s2>s1"< } } } voidAstring: : play() { cout< } Astrings1("abcdef"); Astrings2("gabcdefh"); s2.strcomp(s1); intstrstr=s2.Find(s1); cout< cout<<"==========================="< s1.play(); s2.play(); s1+=s2; cout<<"==========================="< s1.play(); 三、调试结果: 四、调试分析: 字符串的操作,exit (1);这个地方总是出现错误,也不知道怎么回事,在别人的程序里没有问题但是在我的程序里总是运行错误,这个程序里的使用的只是比较多,比如说字符的重载, This指针,到现在也没明白 五、思考与小结: 通过本次试验,我明白字符串的操作在实例中的作用比如“: 美国职业篮球赛组织叫做全国篮球协会(theNationalBasketballAssociation,简称NBA)。 每年夏初,协会举办称为theWorldChampionship(即NBA决赛)的年度锦标赛。 分析提取英文文本格式: ”; 在身边的应用很广。 但是里面有好多不明白有些代码,写的有些复杂,看不明白,但是把老师的代码看了一遍,改了一些就把作业交上了 实验四树和二叉树的自定义类的设计 一、需求分析 本次程序设计要求建立树的结构及非线性特点,递归特点和动态性 (1)输入形式为从键盘输入,用户根据界面的提示从键盘直接输入所对应的数即可。 输入的值要求为整数类型,用户输入其它类型的数据时(例如字符串)会产生不可预测的错误。 (2)输出的界面为DOS窗口,系统按照用户输入的数据类型,将会把相应的输出结果显示到界面上。 (3)实现二叉树的遍历,实现先序、中序和后序递归遍历算法;利用栈实现二叉树先序、中序遍历的非递归算法。 测试数据示例: 以层序遍历序列为abcdefghijklmn构造一棵二叉树: 分别输出其先序、中序和后序遍历结果; 二、概要设计 structTreeNode { Tdata; TreeNode TreeNode lchild(NULL),rchild(NULL){} TreeNode data(x),lchild(r),rchild(r){} }; template classBinaryTree { public: TreeNode Tcanstop; BinaryTree(): root(NULL){} BinaryTree(Tvalue): root(NULL),canstop(value){} voidCreatTree(TreeNode BinaryTree(BinaryTree voidpreOrder(TreeNode voidinOrder(TreeNode voidpostOrder(TreeNode BinaryTree voiddestroy(TreeNode virtual~BinaryTree(); }; 三、详细设计 cout<<"请输入内容! "< BinaryTree TS1->CreatTree(TS1->root); cout<<"前序遍历"< TS1->preOrder(TS1->root); cout< cout<<"中序遍历"< TS1->inOrder(TS1->root); cout< cout<<"后续遍历"< TS1->postOrder(TS1->root); cout< 四、调试分析: 从二叉树类的定义,类的前序遍历、中序遍历、后序遍历、根据书本上的代码,一个一个敲上去没有出现太大的问题,有时候就会出现一些写代码过程中的常见错误 五、思考与小结: 在我们二级考试中、曾有一些关于二叉树的知识但是似懂非懂,把知识点记住了,有很多不是很明白,二叉树的性质中深度与结点的关系,现在基本明白推理过程,在二叉树的构造函数中BinTreeNode 实验五图的最短路径算法设计 一、需求分析 最短路径的概念,掌握求最短路径的方法(Dijkstra算法或Floyd算法)。 (1)输入形式为从键盘输入,用户根据界面的提示从键盘直接输入所对应的数即可。 输入的值要求为整数类型,用户输入其它类型的数据时(例如字符串)会产生不可预测的错误。 (2)输出的界面为DOS窗口,系统按照用户输入的数据类型,将会把相应的输出结果显示到界面上。 (3)建立一个包含6个结点的带权有向图,并求顶点V0到其它顶点的最短路径。 二、概要设计 classGraph{//图的类定义 private: intn; intEdge[NumVertices][NumVertices]; intdist[NumVertices]; intpath[NumVertices]; intS[NumVertices]; public: Graph(){ n=0; for(inti=0;i { dist[i]=-1; path[i]=-1; S[i]=-1; for(intj=0;j Edge[i][j]=0; } } voidShortestPath(constint); voidPrintShortestPath(constintv); voidBellmanFord(constintv); friendistream&operator>>(istream&strm,Graph&g); }; 主函数: Graphg; cout<<"依次输入图的顶点数和邻接矩阵元素
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实习 报告 33 doc