数据结构实验报告模板.docx

上传人:b****6 文档编号:7236197 上传时间:2023-05-11 格式:DOCX 页数:26 大小:285.92KB
下载 相关 举报
数据结构实验报告模板.docx_第1页
第1页 / 共26页
数据结构实验报告模板.docx_第2页
第2页 / 共26页
数据结构实验报告模板.docx_第3页
第3页 / 共26页
数据结构实验报告模板.docx_第4页
第4页 / 共26页
数据结构实验报告模板.docx_第5页
第5页 / 共26页
数据结构实验报告模板.docx_第6页
第6页 / 共26页
数据结构实验报告模板.docx_第7页
第7页 / 共26页
数据结构实验报告模板.docx_第8页
第8页 / 共26页
数据结构实验报告模板.docx_第9页
第9页 / 共26页
数据结构实验报告模板.docx_第10页
第10页 / 共26页
数据结构实验报告模板.docx_第11页
第11页 / 共26页
数据结构实验报告模板.docx_第12页
第12页 / 共26页
数据结构实验报告模板.docx_第13页
第13页 / 共26页
数据结构实验报告模板.docx_第14页
第14页 / 共26页
数据结构实验报告模板.docx_第15页
第15页 / 共26页
数据结构实验报告模板.docx_第16页
第16页 / 共26页
数据结构实验报告模板.docx_第17页
第17页 / 共26页
数据结构实验报告模板.docx_第18页
第18页 / 共26页
数据结构实验报告模板.docx_第19页
第19页 / 共26页
数据结构实验报告模板.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构实验报告模板.docx

《数据结构实验报告模板.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告模板.docx(26页珍藏版)》请在冰点文库上搜索。

数据结构实验报告模板.docx

数据结构实验报告模板

《数据结构》

实验报告书

 

专业班级

网133

学号

139074333

姓名

江文杰

教师

王喜凤

实验一:

用栈判断字符串是否回文

1.实验日期2015年4月11日

2.实验目的为了更好地理解栈的含义和应用

3.实验内容用栈判断字符串是否回文

4.设计思路利用栈的特殊储存方式来判断字符串是否回文;

5.主要程序代码#include

#include

usingnamespacestd;

classzhan

{

public:

chardata;

zhan*next;

zhan(){next=NULL;}

};

classlinkzhan

{

public:

chara[100];

zhan*top;

linkzhan(){top=NULL;}

voidcreate1();

intcreate2();

voidpaiduan(intnum);

};

voidlinkzhan:

:

create1()

{

inti=0;

zhan*p;

cout<<"请输入字符串(以#结束标志)"<

cin>>a;

while(a[i]!

='#')

{

p=newzhan;

p->data=a[i];

p->next=top;

top=p;

i++;

}

}

intlinkzhan:

:

create2()

{

zhan*p;

inti=0,flag=1;

while(top->data!

=NULL)

{

p=newzhan;

p=top;

if(p->data!

=a[i])

{

flag=0;

break;

}

top=top->next;

deletep;

i++;

}

returnflag;

}

voidmain()

{

inta;

linkzhanl;

l.create1();

a=l.create2();

if(a==0)cout<<"该字符串不是回文结构"<

elseif(a==1)cout<<"该字符串是回文结构"<

}

6.运行与测试

心得或感想:

通过本次试验我从中熟悉掌握了栈和队列的特点,掌握与应用栈和队列的基本操作算法,训练和提高结构化程序设计能力及程序调试能力。

7.

实验二

1.实验日期2015年5月28日

2.实验目的理解树的结构

3.实验内容

1、求二叉树中度为1的结点数

2、求结点在二叉排序树中层次

3、判断此二叉树是否是二叉排序树

4.设计思路利用树的特性以及递归的思想进行解题。

每一个节点都可以看成一棵树。

5.主要程序代码

#include

#include

usingnamespacestd;

classbonde

{

public:

intdata;

bonde*lchild,*rchild;

bonde(){lchild=NULL;rchild=NULL;}

};

classtree

{

public:

bonde*head;

tree(){head=NULL;}

~tree(){deletetree(head);}

voiddeletetree(bonde*current);

bonde*createtree();

intchazhao(bonde*p);//求节点为一的节点

intcengci(bonde*p,charnum1);//节点所在的层次

intpaixu(bonde*p);//判断是否为二叉排序树;

intheight(bonde*p);

intMAX(inta,intb)

{if(a>b)returna;

elsereturnb;

}

};

bonde*tree:

:

createtree()

{

bonde*p;

charch;

cin>>ch;

if(ch=='0')

p=NULL;

else

{p=newbonde;

p->data=ch;

p->lchild=createtree();

p->rchild=createtree();

}

head=p;

returnp;

}

voidtree:

:

deletetree(bonde*current)

{

if(current!

=NULL)

{

deletetree(current->lchild);

deletetree(current->rchild);

deletecurrent;

}

}

inttree:

:

chazhao(bonde*p)

{

intl,r;

if(p==NULL)return0;

//if(p->lchild==NULL&&p->rchild==NULL)return0;

l=chazhao(p->lchild);

r=chazhao(p->rchild);

if(p->lchild==NULL||p->rchild==NULL)

returnl+r+1;

}

inttree:

:

cengci(bonde*p,charnum1)

{

if(p==NULL)

return0;

else

{

if(p->data==num1)

returnMAX(cengci(p->lchild,num1),cengci(p->rchild,num1))+1;

elsereturn0;

}

}

inttree:

:

paixu(bonde*p)

{

p=head;

if(head>p->lchild||headrchild||p!

=NULL)

return0;

else

{

paixu(p->lchild);

paixu(p->rchild);

}

return1;

}

voidmain()

{intnum;

charnum1;

bonde*p=newbonde;

treel;

cout<<"请输入树:

"<

l.head=l.createtree();

num=l.chazhao(l.head);

cout<<"节点为1的"<

cout<<"请输入你要查找的数"<

cin>>num1;

l.cengci(p,num1);

cout<<"该节点在第"<

l.paixu(l.head);

cout<<"该二叉树二叉排序树是"<

}

6.运行与测试

7.心得或感想递归的步骤很多要仔细,编写是要注意递归与循环的互通之处。

实验三:

1.实验日期2015年6月1日

2.实验目的为了更好地理解各种排序算法和在数据很多的情况下所用的时间和二叉排序数

3.实验内容试编写程序:

从键盘随机输入(或随机产生)20个整数

(1)用顺序查找算法查找给定的某个数

(2)对20个排序后进行折半查找

(3)建立这20个数的二叉排序树,并进行查找。

从键盘输入(或随机数产生)20个数,试用下列算法进行排序

(1)直接插入排序

(2)直接选择排序

(3)快速排序

(4)归并排序

(5)堆排序(可选)

 

4.设计思路利用不同的排序实现

5.主要程序代码

#include

#include

#include

usingnamespacestd;

classadc

{

public:

intlength;

intdata[100];

intsuiji();

intzhijie(intk);

voidpaixu1();//直接插入排序

voidpaixu2();//直接选择排序

voidpaixu3(intdata[100],intn);//快速排序

voidpaixu4(intdata[100],intn);//归并排序

voidpaixu5();//堆排序

intchaozhao(intk);

intpartition(intdata[100],intlow,inthigh);

voidqsort(intdata[100],ints,intt);

voidmsort(intdata[100],ints,intt);

};

intadc:

:

suiji()

{

doublerandom(double,double);

srand(unsigned(time(0)));

for(inti=1;i<=20;i++)

{

data[i]=int(random(0,100));

cout<<"No."<

"<

}

return0;

}

doublerandom(doublestart,doubleend)

{

returnstart+(end-start)*rand()/(RAND_MAX+1.0);

}

intadc:

:

zhijie(intk)

{

inti=1;

for(i=1;i<20;i++)

if(data[i]==k){returni;}

return-1;

}

voidadc:

:

paixu1()

{

inti,j;

for(i=2;i<=20;i++)

{

data[0]=data[i];

for(j=i-1;data[0]

data[j+1]=data[j];

data[j+1]=data[0];

}

for(i=1;i<=20;i++)

cout<<"No."<

"<

}

intadc:

:

chaozhao(intk)

{

intlow,high,mid;

low=0;

high=20;

while(low<=high)

{

mid=(low+high)/2;

if(k==data[mid])

returnmid;

elseif(k

high=mid-1;

else

low=mid+1;

}

return-1;

}

voidadc:

:

paixu2()

{

inti,j;

for(i=1;i<=20;i++)

{

for(j=i+1;j<=20;j++)

{

if(data[j]

{data[-1]=data[j];data[j]=data[i];data[i]=data[-1];}

}

}

for(i=1;i<=20;i++)

cout<<"No."<

"<

}

intadc:

:

partition(intdata[100],intlow,inthigh)

{

if(low==high)returnlow;

data[0]=data[low];

while(low

{

while(low=data[0])high--;

if(low

while(low

if(low

}

data[low]=data[0];

returnlow;

}

voidadc:

:

qsort(intdata[100],ints,intt)

{

inti;

if(s>=t)return;

i=partition(data,s,t);

qsort(data,s,i-1);

qsort(data,i+1,t);

}

voidadc:

:

paixu3(intdata[100],intn)

{

qsort(data,1,n);

for(inti=1;i<=20;i++)

cout<<"No."<

"<

}

voidmer(intdata[100],intdata1[100],ints,intm,intt)

{

inti,j,k;

i=s;j=m+1;k=s;

while(i<=m&&j<=t)

if(data[i]<=data[j]){data1[k]=data[i];i++;k++;}

else{data1[k]=data[j];j++;k++;}

while(i<=m)data1[k++]=data[i++];

while(j<=t)data1[k++]=data[j++];

}

voidadc:

:

msort(intdata[100],ints,intt)

{

intdata1[100];

intm;

if(s==t)return;

else

{

m=(s+t)/2;

msort(data,s,m);

msort(data,m+1,t);

mer(data,data1,s,m,t);

mer(data1,data,s,t,t);

}

}

voidadc:

:

paixu4(intdata[100],intn)

{

msort(data,1,n);

for(inti=1;i<=20;i++)

cout<<"No."<

}

intmain()

{

intk,p;

adca;

a.suiji();

cout<<"输入查找的数"<

cin>>k;

intl=a.zhijie(k);

cout<<"在第No:

"<

cout<<"排序之后"<

a.paixu1();

cout<<"输入查找的数"<

cin>>p;

cout<<"在第"<

cout<<"随机产生20个数"<

a.suiji();

cout<<"排序之后"<

a.paixu3(a.data,20);

cout<<"随机产生20个数"<

a.suiji();

cout<<"排序之后"<

a.paixu4(a.data,20);

}

intmain()

{

time_tst_t=time(NULL),ed_t;

adca;

a.suiji();

a.paixu1();

ed_t=time(NULL);

cout<<(double)(ed_t-st_t)/CLOCKS_PER_SEC<

}

intmain()

{

time_tst_t=time(NULL),ed_t;

adca;

a.suiji();

a.paixu2();

ed_t=time(NULL);

cout<<(double)(ed_t-st_t)/CLOCKS_PER_SEC<

}

intmain()

{

time_tst_t=time(NULL),ed_t;

adca;

a.suiji();

a.paixu3(a.data,n);

ed_t=time(NULL);

cout<<(double)(ed_t-st_t)/CLOCKS_PER_SEC<

}

intmain()

{

time_tst_t=time(NULL),ed_t;

adca;

a.suiji();

a.paixu4(a.data,n);

ed_t=time(NULL);

cout<<(double)(ed_t-st_t)/CLOCKS_PER_SEC<

}

二叉排序树:

#include

usingnamespacestd;

classbinstreenode

{

public:

intdata;

binstreenode*lchild;

binstreenode*rchild;

binstreenode(){lchild=NULL;rchild=NULL;}

};

classbinstree

{

public:

binstreenode*head;

binstree(){head=NULL;}

binstreenode*serach(binstreenode*bt,intk,binstreenode*&p);

voidinsert(binstreenode*&bt,intk);

voidcreate(intnum);

};

binstreenode*binstree:

:

serach(binstreenode*bt,intk,binstreenode*&p)

{

binstreenode*q;

q=bt;

while(bt)

{

q=bt;

if(bt->data==k){p=bt;returnbt;}

elseif(bt->data>k)bt=bt->lchild;

elsebt=bt->rchild;

}

p=q;

returnbt=NULL;

}

voidbinstree:

:

insert(binstreenode*&bt,intk)

{

binstreenode*p=NULL,*q;

q=bt;

if(serach(q,k,p)==NULL)

{

binstreenode*r=newbinstreenode;

r->data=k;r->lchild=r->rchild=NULL;

if(p=NULL)bt=r;

elseif(p->data>k)p->lchild=r;

elsep->rchild=r;

}

}

voidbinstree:

:

create(intnum)

{

inti=1;

intk;

binstreenode*h=newbinstreenode;

while(num!

=0)

{

cout<<"请输入第"<

cin>>k;

insert(head,k);

i++;

num--;

}

}

intmain()

{

binstreenode*p;

intnum,num1;

cout<<"请输入节点的个数"<

cin>>num;

binstreeb;

b.create(num);

cout<<"请输入要找的数"<

cin>>num1;

b.serach(b.head,num1,p);

return0;

}

6运行与测试

直接插入排序:

直接选择:

快速排序:

归并排序:

直接排序时间:

直接选择排序时间:

快速排序:

100000的:

直接插入排序:

直接选择排序

快速排序:

归并排序:

7.心得或感想通过本次排序,我学会了几种排序算法,有几种用到递归的算法,使我对递归有了一层新的认识。

实验中也有一些困难,通过自己看书和询问同学有了一些提高。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2