数据结构实习报告33页docWord格式.docx
《数据结构实习报告33页docWord格式.docx》由会员分享,可在线阅读,更多相关《数据结构实习报告33页docWord格式.docx(25页珍藏版)》请在冰豆网上搜索。
};
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&
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=NULL;
}
三、显示详细设计
intmain(intargc,char*argv[])
ListL1;
intd;
L1.Input();
L1.Display();
L1.DeleteRepeatedElem();
L1.Insert(5,55);
L1.Remove(6,d);
ListL2;
L2.Input();
L2.Display();
L1.MergeList(L2);
return0;
四、运行结果显示
五、调试分析:
本次试验中刚开始不知道怎么调试,总是出现各种各样的错误,不知道怎么回事,大部分都是通过XX来了解那里出现错误,也同时对bool函数进行深入的了解,bool函数在我们学C++时候,老师没有讲,缺乏使用的经验
六、思考与小结
在本次试验中我明白链表的的类的定义,链表的插入,链表的定位,链表的排序等函数的写法,但是如果让我自己不参考课本还是写不出来,但是能明白代码的含义及程序运行的顺序,基本的出错修正,有时候也不知道出现什么问题,没有错误,但是总是运行不了,到最后通过XX才明白是构造函数出现错误了,这样的错误在我们学习C++的时候也出现过,但是好像在visualstudio2010没有出现类似的错误,但是也没有找出根本原因,就放在那里了,
实验二顺序栈的自定义类设计
本次程序设计要求建立一个栈的顺序存储结构类,以及实现线性表所需求的各种功能。
对栈的操作有:
(3)以“ABCDEFG”的字符串顺序进栈;
以合适顺序出栈得到序列“CDBAGFE”;
取栈顶元素得到‘F’;
进栈直到栈满和出栈直到栈空,检验对这两种情形的正确判断和处理
template<
classT>
classstack
stack(){};
voidinit()
tos=0;
voidpush(Tch)
{
if(tos>
=0&
&
tos<
size)
{
stck[tos]=ch;
tos++;
if(size-1==tos)
{
cout<
<
"
nowthestackisfull"
endl;
}
Tpop()
if(tos>
0)
tos--;
returnstck[tos];
else
cout<
nowthestackisempty"
return0;
virtual~stack(){};
Tstck[size];
inttos;
三、详细设计
intmain(intargc,char*argv[])
stack<
char>
s;
inti;
s.init();
s.push('
A'
);
B'
C'
D'
E'
F'
G'
for(i=0;
i<
7;
i++)
cout<
pops:
s.pop()<
cout<
==================================="
1;
3;
return0;
四、调试结果
五、调试分析
刚开始不知道怎么回事,就是调试不出来,虽然栈的压入和弹出的模式很清晰,但是类的建立,栈的建立,溢出处理,读取栈顶元素,新元素的进栈,计算栈中元素的个数,由于写的代码有点少,所以很容易就调试出现如期的结果
六、思考与小结
一直不明白模板类的作用,但是也没有过多关注模板类的作用,后来越来越多的同学开始讨论模板类,都都不明白怎么回事,后来通过XX了解了一些,但是还是不是很清楚,这是学编程以来从来没有接触过的东西,最后才明白这是在类的建立的时候使用的
实验三字符串的操作类设计
本次程序设计要求建立字符串的操作类,
(3)用堆分配存储表示串,实现串的比较、复制、串的连接,取子串、子串匹配定位和串替换等基本操作。
测试数据示例:
以“abcde”构造一个串s1,以“gabcdef”构造另一个串s2;
比较s1和s2是否相等;
在s2中定位s1子串;
复制s2串并连接在s1串后。
二、概要设计:
classAstring
char*ch;
inttruLength;
intMaxsize;
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);
operator=(Astring&
operator+=(Astring&
bb);
charoperator[](inti);
intFind(Astring&
pat)const;
voidstrcomp(Astring&
voidplay();
virtual~Astring();
二、详细设计
Astring:
Astring(intsz)
this->
Maxsize=Max;
ch=newchar[Maxsize-1];
truLength=0;
ch[0]='
\0'
;
Astring(constchar*sjs)
intlength=strlen(sjs);
Maxsize=(length>
Max)?
length:
Max;
truLength=length;
strcpy(this->
ch,sjs);
Astring(constAstring&
ob)
Maxsize=ob.Maxsize;
truLength=ob.truLength;
ch,ob.ch);
Astring&
Astring:
operator()(intpos,intlen)
inti,j;
Astringtemp;
if(pos<
0||pos+len-1>
Maxsize||len<
temp.truLength=0;
temp.ch[0]='
else
if(pos+len-1>
=truLength)
len=truLength-pos;
temp.truLength=len;
for(i=0,j=pos;
len;
i++,j++)
temp.ch[i]=this->
ch[j];
temp.ch[i]='
return*this;
operator=(Astring&
this->
Maxsize=ob.Maxsize;
strcpy(this->
operator+=(Astring&
if(this->
truLength+ob.truLength<
=this->
Maxsize)
Maxsize=Maxsize;
truLength=this->
truLength+ob.truLength;
strcat(this->
return*this;
char*tem=this->
ch;
Maxsize=Maxsize*2;
ch=newchar[Maxsize];
tem[0]='
ch,tem);
deletetem;
charAstring:
operator[](inti)
if(i<
0||i>
truLength)
yourintisovertherange"
exit
(1);
returnthis->
ch[i];
intAstring:
Find(Astring&
pat)const
inttem=0,tim=-1,i;
this->
truLength-pat.truLength;
for(intj=0,k=0;
j<
truLength;
j++,k++)
if(pat.ch[j]==this->
ch[k])
{
tem++;
else
continue;
if(pat.truLength==tem)
tim=i;
tim=-1;
returni;
voidAstring:
strcomp(Astring&
intt=strcmp(this->
if(t==0)
s1=s2"
if(t<
s2<
s1"
s2>
play()
ch<
Astrings1("
abcdef"
Astrings2("
gabcdefh"
s2.strcomp(s1);
intstrstr=s2.Find(s1);
cout<
strstr<
==========================="
s1.play();
s2.play();
s1+=s2;
三、调试结果:
四、调试分析:
字符串的操作,exit
(1);
这个地方总是出现错误,也不知道怎么回事,在别人的程序里没有问题但是在我的程序里总是运行错误,这个程序里的使用的只是比较多,比如说字符的重载,
This指针,到现在也没明白
五、思考与小结:
通过本次试验,我明白字符串的操作在实例中的作用比如“:
美国职业篮球赛组织叫做全国篮球协会(theNationalBasketballAssociation,简称NBA)。
每年夏初,协会举办称为theWorldChampionship(即NBA决赛)的年度锦标赛。
分析提取英文文本格式:
”;
在身边的应用很广。
但是里面有好多不明白有些代码,写的有些复杂,看不明白,但是把老师的代码看了一遍,改了一些就把作业交上了
实验四树和二叉树的自定义类的设计
本次程序设计要求建立树的结构及非线性特点,递归特点和动态性
(3)实现二叉树的遍历,实现先序、中序和后序递归遍历算法;
利用栈实现二叉树先序、中序遍历的非递归算法。
以层序遍历序列为abcdefghijklmn构造一棵二叉树:
分别输出其先序、中序和后序遍历结果;
structTreeNode
Tdata;
TreeNode<
T>
*lchild,*rchild;
():
lchild(NULL),rchild(NULL){}
(Tx,TreeNode<
*l=NULL,TreeNode<
*r=NULL):
data(x),lchild(r),rchild(r){}
classBinaryTree
*root;
Tcanstop;
BinaryTree():
root(NULL){}
BinaryTree(Tvalue):
root(NULL),canstop(value){}
voidCreatTree(TreeNode<
*&
subTree);
BinaryTree(BinaryTree<
s);
voidpreOrder(TreeNode<
*subTree);
voidinOrder(TreeNode<
voidpostOrder(TreeNode<
BinaryTree<
*Copy(TreeNode<
*bge);
voiddestroy(TreeNode<
*subTree);
virtual~BinaryTree();
请输入内容!
*TS1=newBinaryTree<
('
#'
TS1->
CreatTree(TS1->
root);
前序遍历"
preOrder(TS1->
中序遍历"
inOrder(TS1->
后续遍历"
postOrder(TS1->
从二叉树类的定义,类的前序遍历、中序遍历、后序遍历、根据书本上的代码,一个一个敲上去没有出现太大的问题,有时候就会出现一些写代码过程中的常见错误
在我们二级考试中、曾有一些关于二叉树的知识但是似懂非懂,把知识点记住了,有很多不是很明白,二叉树的性质中深度与结点的关系,现在基本明白推理过程,在二叉树的构造函数中BinTreeNode<
*lch,BinTreeNode<
*rch,Titem仍然不明白
实验五图的最短路径算法设计
一、需求分析
最短路径的概念,掌握求最短路径的方法(Dijkstra算法或Floyd算法)。
(3)建立一个包含6个结点的带权有向图,并求顶点V0到其它顶点的最短路径。
二、概要设计
classGraph{//图的类定义
intn;
intEdge[NumVertices][NumVertices];
intdist[NumVertices];
intpath[NumVertices];
intS[NumVertices];
Graph(){
n=0;
for(inti=0;
i<
NumVertices;
dist[i]=-1;
path[i]=-1;
S[i]=-1;
for(intj=0;
j<
j++)
Edge[i][j]=0;
voidShortestPath(constint);
voidPrintShortestPath(constintv);
voidBellmanFord(constintv);
friendistream&
operator>
>
(istream&
strm,Graph&
g);
主函数:
Graphg;
依次输入图的顶点数和邻接矩阵元素