数据结构试验报告Word格式文档下载.docx
- 文档编号:17585510
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:72
- 大小:26.13KB
数据结构试验报告Word格式文档下载.docx
《数据结构试验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构试验报告Word格式文档下载.docx(72页珍藏版)》请在冰豆网上搜索。
i++)
q=(LinkList)malloc(sizeof(LNode));
scanf("
q->
data);
p->
next=q;
p=q;
}
m);
for(intj=1;
j<
=m;
j++)
intnum;
num);
p=L;
intk;
inte=-1;
if(num>
=1&
&
num<
=n){
for(k=1;
k<
num;
k++){
p=p->
next;
q=p->
next=q->
e=q->
data;
n--;
free(q);
printf("
%d\n"
e);
(四)运行结果:
(五)实验总结:
初次接触数据结构,心理有些期待,也有些畏惧。
因为没学习过这种程序,心里总担心着能不能把它学好呢?
当我们把
该章节学完就尝试着做这个实验,说实话突然从理论到实验还是消化不了呢,后来,通过慢慢的揣摩和问老师和同学,慢慢的做完了。
实验二:
链表及其多项式相加
插入、删除、查找等运算在链式存储结构上的实现。
3.掌握基于链表的多项式相加的算法。
(二)实验内容:
通过有序对输入多项式的各个项,利用单链表存储该一元多项式,并
建立的2个存储一元多项式的单链表,然后完成2个一元多项式的相
加,并输出相加后的多项式。
(三)实验程序:
malloc.h>
conio.h>
typedefstructLnode{
intcof;
intexpn;
structLnode*next;
}Lnode,*LinkList;
voidCreatpolyn(LinkList&
La,intm){
inti;
LinkListp,q;
La=(LinkList)malloc(sizeof(Lnode));
La->
p=La;
for(i=1;
i++){
q=(LinkList)malloc(sizeof(Lnode));
%d%d"
cof,&
expn);
LinkListaddpolyn(LinkList&
A,LinkList&
B)
LinkListpa,pb,pc,Lb,p1,p2;
pc=Lb=A;
pa=A->
pb=B->
while(pa&
pb){
if(pa->
expn==pb->
expn){
pa->
cof=pa->
cof+pb->
cof;
cof!
=0){
pc->
next=pa;
pc=pa;
p2=pb;
pa=pa->
pb=pb->
free(p2);
else{
p1=pa;
free(p1);
elseif(pa->
expn>
pb->
next=pb;
pc=pb;
elseif(pb->
next=pa?
pa:
pb;
free(B);
return(Lb);
voidprintfpolyn(LinkList&
p)
while(p->
next!
=NULL)
%d%d\n"
p->
cof,p->
intn1,n2;
LinkListA,B,C;
n1);
Creatpolyn(A,n1);
n2);
Creatpolyn(B,n2);
C=addpolyn(A,B);
printfpol
在学习C语言的时候,我就对指针类型概念很模糊,更加不用说怎样运用他了。
这个线性表的链式存储也是这样的。
掌握了指针应该怎么指向,做实验并不是想像中的这么难,只要你自己理清楚了自己的思绪,一步一步的来,不要太急于成功了,那么,到了最后,你就会发现真的很容易。
二、栈
实验三:
括号匹配判断算法
1.掌握使用C++上机调试栈的基本方法;
2.深入了解栈的特性,掌握栈的各种基本操作。
假设在表达式中([]())或[([][])]等为正确的格式,[(])或([())
或(()])均为不正确的格式。
基于栈设计一个判断括号是否正确匹配的算法。
typedefstructsnode{
chardata;
structsnode*next;
}snode,*Linkstack;
voidLinkstackpush(Linkstack*ls,chare){Linkstackp=(Linkstack)malloc(sizeof(snode));
p->
data=e;
next=*ls;
*ls=p;
intLinkstackpop(Linkstack*ls){
Linkstackp;
p=*ls;
if(*ls==NULL)
return0;
(*ls)=(*ls)->
free(p);
return1;
intLinkstackgettop(Linkstackls,char*e){
if(ls==NULL)
*e=(ls)->
voidinitLinkstack(Linkstack*ls){
*ls=NULL;
voidmatching(charstr[]){
chare;
intk,flag=1;
Linkstacks;
initLinkstack(&
s);
for(k=0;
str[k]!
='
\0'
&
flag;
if(str[k]!
('
)'
['
]'
s
tr[k]!
{'
}'
)
continue;
switch(str[k]){
case'
:
Linkstackpush(&
s,str[k]);
break;
if(s){
Linkstackgettop(s,&
e);
if(e=='
)Linkstackpop(&
elseflag=0;
break;
)Linkstackpop(&
if(flag==1&
s==NULL){
yes\n"
);
elseprintf("
no\n"
intmain(){
charstr[8000];
while(gets(str)){
matching(str);
实验五:
四则运算表达式求值
1.掌握顺序栈的实现;
2.掌握顺序栈的应用;
3.利用栈实现算法优先算法。
按中缀形式输入一个四则运算的表达式,利用算法优选算法把其转换为后缀表达式输出,并求表达式的值。
#include<
#defineSTACK_INIT_SIZE10000#defineSTACKINCREMENT10#defineTURE1
#defineFALSE0#defineINFEASIBLE-1#defineOVERFLOW-2#defineOK1#defineERROR0typedefintSelemtype;
typedefintStatus;
typedefstruct{
Selemtype*base;
Selemtype*top;
intstacksize;
}Sqstack;
Statusinitstack(Sqstack&
s){
s.base=(Selemtype*)malloc(STACK_INIT_SIZE*sizeof(Selemtype)
if(!
s.base)exit(OVERFLOW);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
Statustravelstack(Sqstacks){
Selemtype*p;
p=s.base;
%c"
*p++);
while(p!
=s.top){
%c"
StatusGettop(Sqstacks){
if(s.base==s.top)returnERROR;
return*(s.top-1);
Statuspush(Sqstack&
s,Selemtypee){
if(s.top-s.base>
=s.stacksize)
s.base=(Selemtype*)realloc(s.base,(s.stacksize+STACKINCREME
NT)*sizeof(Selemtype));
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
*s.top=e;
s.top++;
returnOK;
Statuspop(Sqstack&
s,Selemtype&
e){
s.top--;
e=*s.top;
Statusbijiao(Selemtypea,Selemtypeb){
switch(a)
case'
+'
switch(b)
#'
-'
return'
>
'
;
*'
/'
<
Statusoperate(Selemtypea,Selemtypec,Selemtypeb){switch(c)
returna+b;
returna-b;
return(a)*(b);
return(a)/(b);
Statusqiuzhi(){
Selemtypec,a,b,x,theta;
Sqstackoptr,opnd,houzhui;
initstack(optr);
initstack(opnd);
initstack(houzhui);
push(optr,'
c=getchar();
while(c!
||Gettop(optr)!
if(c=='
\n'
)c='
if(c>
0'
c<
9'
{push(opnd,c-48);
push(houzhui,c);
else
switch(bijiao(Gettop(optr),c))
push(optr,c);
)break;
else{pop(optr,x);
case
pop(optr,theta);
pop(opnd,b);
pop(opnd,a);
push(houzhui,theta);
push(opnd,operate(a,theta,b));
travelstack(houzhui);
\n"
returnGettop(opnd);
intmain(){
qiuzhi());
在这两个实验中,主要是要分析清楚出现不同情况下要进行的操作,调理清晰了才能编写好程序。
我刚开始也不是很分得清。
后来在同学的帮助下,对这点有了进一步的了解。
而我的耐心所以在出现的指向的问题上总是很烦,这一点需要改正。
三、队列
实验四:
循环队列插入与删除操作
1.深入了解队列的特性,掌握队列的各种基本操作
实现环形队列(MAXN不超过100001),能够进行进队出队操作
string.h>
#defineM100001
inta[M];
inttou,wei,geshu;
intT,k;
ints;
charmingl[100];
while(scanf("
%d%*c"
T)!
=EOF){
tou=wei=geshu=0;
=T;
%s"
mingl);
if(strcmp(mingl,"
enqueue"
)==0){
geshu++;
a[tou++]=s;
if(tou==M)tou=0;
dequeue"
if(tou==wei&
geshu==0)printf("
-1"
a[wei++]);
if(wei==M)wei=0;
geshu--;
通过这个实验的上机操作,我从实质上了解了队列的实现和存储方式,对于队列有了更深的理解。
并且学会了队列的插入和删除操作。
四、树和二叉树
实验八:
二叉树建立及其先序遍历
本次实验的目的是熟悉树的各种物理表示方法及各种遍历方式(其中
以二叉树为侧重点),解树在计算机科学及其他工程中的应用。
按先序遍历顺序输入二叉树的各个结点值,采用二叉链表的存储结构存储该二叉
树,并按先序遍历输出二叉树的各结点的值及深度。
#defineERROR0
#defineOK1
#defineOVERFLOW-2
#defineMAX100000000
charstr[MAX];
typedefintstatus;
typedefstructBinode{
intdeep;
Binode*parent;
Binode*lchild;
Binode*rchild;
}*Bitree;
statusprebitree(BitreeT){
if(T){
prin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 试验报告
![提示](https://static.bdocx.com/images/bang_tan.gif)