2024年数据结构实验报告_第1页
2024年数据结构实验报告_第2页
2024年数据结构实验报告_第3页
2024年数据结构实验报告_第4页
2024年数据结构实验报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《数据构造》试验汇报一试验内容:线性表學号:

姓名:

梁闪星一、上机试验的問題和规定(需求分析)2.线性表合并运算

两個数据元素按值非递減有序排列的线性表,规定将两者归并為一种新表,新表中的数据元素仍按值非递減有序排列。规定分别采用次序和链式两种存储构造.。二、程序设计的基本思想,原理和算法描述:2.若采用次序存储构造,首先動态分派一种线性表Lc,并使pa,pb,pc分别指向La,Lb,Lc的基址,然後算出La,Lb的長度,在pa,pb所指元素都在La,Lb中時,把其中较小的一种插入到Lc中,并使指向较小元素的指针和pc分别加1。直到其中一种线性表中的元素所有插入到Lc中,把另一种线性表中的剩余元素也次序所有插入Lc中。若采用链式存储构造,首先设置三個指针pa,pb,pc,其中pa,pb分别指向La表和Lb表中目前待比较插入的結點,而pc指向Lc中的目前最终一种結點,若pa->data<=pb->data,则将pa所指結點链接到pc所指結點之後,否则将pb所指結點链接到pc所指結點之後。當一种為空時,阐明有一种表的元素已归并完,则只要将另一种表的剩余段链接在pc所指結點之後即可。三、调试和运行程序過程中产生的問題及采用的措施:调用函数時,参数传递錯误。通過一步一步调试根据提醒進行修改。四、源程序及注释#include<stdio.h>#include<stdlib.h>#defineINITSIZE100//线性表存储空间的初始分派量#defineLISTINCREMENT10//线性表存储空间的分派增量#defineOK1#defineERROR0#defineOVERFLOW-1typedefintElemType;typedefintStatus;typedefstruct{ ElemType*elem;//存储空间基址 intlength;//目前長度 intlistsize;//目前分派的存储量(以sizeof(ElemType)為單位)}SqList;StatusInitList(SqList&L){//构造一种空的次序表L.L.elem=(ElemType*)malloc(100*sizeof(ElemType));if(!L.elem)exit(OVERFLOW);L.length=0;L.listsize=INITSIZE;return(OK);}voidAssign(SqList&L){//為次序表L的各元素赋值。 inti,N; printf("PleaseinputtheNumberoftheSqList:"); scanf("%d",&N); printf("Pleaseinputtheelements:"); for(i=0;i<N;i++);{ scanf("%d",&L.elem[i]); L.length++; }}voidMergeList(SqListLa,SqListLb,SqList&Lc){ //已知线性表La和Lb中的数据元素按值非递減排列 //归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递減排列 ElemType*pa,*pb,*pc,*pa_last,*pb_last; pa=La.elem; pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length; pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem)exit(OVERFLOW);//存储分派失败pa_last=La.elem+La.length-1;pb_last=Lb.elem+Lb.length-1; while(pa<=pa_last&&pb<=pb_last){//归并if(*pa<=*pb)*pc++=*pa++;else*pc++=*pb++; } while(pa<=pa_last)*pc++=*pa++;//插入La的剩余元素 while(pb<=pb_last)*pc++=*pb++;//插入Lb的剩余元素 }//MergeList_SqvoidListTraverse(SqListL){//遍历次序表L inti; for(i=0;i<=L.length-1;i++); printf("%d",L.elem[i]); printf("\n"); printf("thelengthis:%d\n",L.length);}voidmain(){ SqListL,L1,L2; InitList(L1); Assign(L1); InitList(L2); Assign(L2); MergeList(L1,L2,L); ListTraverse(L);}五、运行成果PleaseinputtheNumberoftheSqList:5Pleaseinputtheelements:24689PleaseinputtheNumberoftheSqList:8Pleaseinputtheelements:1351234364146123456891234364146thelengthis:13《数据构造》试验汇报二试验内容:栈和队列學号:

姓名:

梁闪星

一、上机试验的問題和规定(需求分析):[題目]3.括号匹配的检查

【問題描述】假设体現式中容許有两种括号:圆括号和方括号,其嵌套的次序随意,即(()[])或[([][])]等為對的格式,[(])或(((]均為不對的的格式。讀入含圆括号和方括号的符号序列,输出“匹配”或“此串括号匹配不合法”。

【测试数据】

输入([]()),成果“匹配”

输入[()],成果“此串括号匹配不合法”

二、程序设计的基本思想,原理和算法描述:基本思想:當计算机接受了第一种括号後,它期待著与其匹配的第二個括号的出現,然而等来的却是与其不匹配的此外一种左括号的出現,此時第一种左括号只能临時靠边,依次类推,若是左括号,则作為一种新的更紧迫的期待压入栈中,自然使原有的在栈中的所有未消解的期待的紧迫性都降了一级。原理:运用栈的後進先出的特性。算法描述:voidcheck(){ SqStacks; SElemType*p,e; charch[80]; InitStack(s); printf("請输入带括号(()和{})的体現式\n"); gets(ch); p=ch; while(*p) switch(*p){ case'(': case'[':Push(s,*p++);break; case')': case']':if(!StackEmpty(s)){ Pop(s,e); if(!(e=='('&&*p==')'||e=='['&&*p==']')){ printf("左右括号不匹配\n"); exit(ERROR); } } else{ printf("缺乏左括号\n"); exit(ERROR); } default:p++; } if(StackEmpty(s)) printf("括号匹配\n"); else printf("缺乏右括号\n");}三、调试和运行程序過程中产生的問題及采用的措施:字符定义类型錯误,参数传递类型錯误。统一调整為一种类型。四、源程序及注释[源程序]#include<stdio.h>#include<stdlib.h>#include<string.h>#defineok1#defineERROR0#defineoverflow-1#definestack_init_size100#definestackincrement10typedefcharSElemType;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;returnok;}//取栈顶元素,不過不删除栈顶元素statusGetTop(SqStacks,SElemType&e){ if(s.top==s.base)returnERROR; e=*(s.top-1); returnok;}//元素進栈statusPush(SqStack&s,SElemTypee){ if(s.top-s.base>=s.stacksize){ s.base=(SElemType*)realloc(s.base,(s.stacksize+stackincrement)*sizeof(SElemType)); if(!s.base)exit(overflow); s.top=s.base+s.stacksize; s.stacksize+=stackincrement; } *s.top++=e; returnok;}//元素出栈statusPop(SqStack&s,SElemType&e){ if(s.top==s.base)returnERROR; e=*--s.top; returnok;}statusStackEmpty(SqStacks){ if(s.top==s.base)returnok; else returnERROR;}//括号匹配voidcheck(){ SqStacks; SElemType*p,e; charch[80]; InitStack(s); printf("請输入带括号(()和{})的体現式\n"); gets(ch); p=ch; while(*p) switch(*p){ case'(': case'[':Push(s,*p++);break; case')': case']':if(!StackEmpty(s)){ Pop(s,e); if(!(e=='('&&*p==')'||e=='['&&*p==']')){ printf("左右括号不匹配\n"); exit(ERROR); } } else{ printf("缺乏左括号\n"); exit(ERROR); } default:p++; } if(StackEmpty(s)) printf("括号匹配\n"); else printf("缺乏右括号\n");}voidmain(){ check();}五、运行成果請输入带括号(()和{})的体現式23+(3*4)+{(5+6)*(2+3)}括号匹配Pressanykeytocontinue《数据构造》试验汇报三试验内容:算术体現式求值學号:

姓名:

梁闪星

一、上机试验的問題和规定(需求分析):[題目]1.算术体現式求值【問題描述】体現式求值是实現程序设计語言的基本問題之一,也是栈的应用的一种經典的例子,设计一种程序,演示用算符优先法對算术体現式求值的過程。

【基本规定】

以字符序列的形式從终端输入語法對的的、不含变量的整数体現式。运用教科書表3.1給出的算符优先关系,实現對算术四则混合运算体現式的求值。

【测试数据】3*(7-1);1+2+3+4;88-1*5;1024/4*8;(20+2)*(6/2);(6+2*(3+6))。

【实現提醒】(1)设置运算符栈和运算数栈辅助分析算符优先关系。(2)在讀入体現式的字符序列的同步,完毕运算符和运算数(整数)的识别处理,以及對应的运算。(3)识别出运算数的同步,要将其字符序列形式转换成整数形式。(4)在程序的合适位置输出运算符栈、运算数栈、输入字符和重要操作的内容。二、程序设计的基本思想,原理和算法描述:基本思想:先设定运算符的优先级,即四则运算的规则。设定两個栈,一种称作OPTR,用以寄存运算符,一种称作OPND,用以寄存操作数或运算成果。首先置操作数栈為空栈,体現式起始符“#”為运算符栈的栈底元素;然後依次讀入体現式中每個字符,若是操作数则進OPND,若是运算符则和OPTR栈的栈顶运算符比较优先权後作對应操作,直至整個体現式求值完毕(即OPTR栈的栈顶元素和目前讀入的字符均為“#”)。三、调试和运行程序過程中产生的問題及采用的措施:运算符优先级设置錯误;通過度析,總結,调试得出對的的优先级别。四、源程序及注释[源程序]#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10#include<iostream>#include<stdlib.h>usingnamespacestd;typedefdoubleSElemType;typedefstructSqStack//栈的次序存储构造{SElemType*base;SElemType*top;intstacksize;}SqStack;voidInitStack(SqStack&S)//构造一种空栈{S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));//分派储存空间if(!S.base)exit(-1);//空间分派失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;//空间初始分派}//InitStackboolGetTop(SqStackS,SElemType&e){//若栈不空,则用e返回S的栈顶元素,并返回true;否则返回falseif(S.top==S.base)returnfalse;e=*(S.top-1);returntrue;}//GetTopboolPush(SqStack&S,SElemTypee){//插入元素為e的新的栈顶元素if(S.top-S.base>=S.stacksize){//栈满,追加存储空间S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(-1);//存储空间分派失败S.top=S.base+S.stacksize;//此处内存有也許重新分派,S.base地址有也許會变,此句不能省S.stacksize+=STACKINCREMENT;}*S.top++=e;//top自增returntrue;}//PushboolPop(SqStack&S,SElemType&e)//若栈不空,则删除S的栈顶元素,用e返回其值{if(S.top==S.base)returnfalse;e=*--S.top;//删除一种元素,top減一returntrue;}//PopcharPrecede(chara1,chara2)//鉴定运算符的优先级。{charr;switch(a2){case'+':case'-':if(a1=='('||a1=='#')r='<';elser='>';break;case'*':case'/':if(a1=='*'||a1=='/'||a1==')')r='>';elser='<';break;case'(':if(a1==')'){cout<<"括号匹配錯误!"<<endl;exit(-1);}elser='<';break;case')':if(a1=='(')r='=';elseif(a1=='#'){cout<<"error!没有左括号"<<endl;exit(-1);}elser='>';break;case'#':switch(a1){case'#':r='=';break;case'(':cout<<"error!没有右括号"<<endl;exit(-1);default:r='>';}//switchbreak;}//switchreturnr;}//PrecedeboolIn(chard)//判断c与否為七种运算符之一{switch(d){case'+':case'-':case'*':case'/':case'(':case')':case'#':returntrue;default:returnfalse;}//switch}SElemTypeOperate(SElemTypea,SElemTypetheta,SElemTypeb){//Operate為進行二元运算的athetab的函数charn=char(theta);//此处把double型强制转换成int型,虽然會导致精度缺失,但自身theta是一种符号,也算是整型switch(n)//转换後相称于和符号匹配ACSII码{case'+':returna+b;case'-':returna-b;case'*':returna*b;default:if(b!=0)returna/b;else{cout<<"error!除数不能為零"<<endl;exit(-1);}}//switch}SElemTypeEvaluateExpression(){//算符体現式的优先算法。设OPTR和OPND分别為运算符栈和运算数栈SqStackOPTR,OPND;charc;charData[11];//定义此数组為了寄存整数或小数SElemTypea,b,d,e;InitStack(OPTR);//构造一种运算符栈InitStack(OPND);//构造一种运算数栈Push(OPTR,'#');//将#压入栈底c=getchar();GetTop(OPTR,e);while(c!='#'||e!='#')//栈顶不是#号且输入不是#号{if(In(c))//是符号则進栈{switch(Precede(e,c)){case'<'://栈顶元素优先级低Push(OPTR,c);c=getchar();break;case'='://脱括号并接受下一字符Pop(OPTR,e);c=getchar();break;case'>'://退栈并将运算成果入栈Pop(OPTR,e);Pop(OPND,b);Pop(OPND,a);Push(OPND,Operate(a,e,b));break;}//switch}elseif(c>='0'&&c<='9'||c=='.'){inti=0;while(c>='0'&&c<='9'||c=='.'){Data[i]=c;i++;c=getchar();}Data[i]='\0';//数字没有存满,输入字符串結束符d=atof(Data);//此处是把数组裏的数字,实际上是按字符串;转换為double类型,然後把浮點型数字入栈Push(OPND,d);//atof函数的形参是指针类型,故用数组名}else{cout<<"error!输入錯误!"<<endl;exit(-1);}GetTop(OPTR,e);}//whileGetTop(OPND,e);returne;}//EvaluateExpressionintmain(){SElemTyperesult;cout<<"請输入体現式,以#号結束"<<endl;result=EvaluateExpression();cout<<"成果為:"<<result<<endl;return0;五、运行成果請输入体現式,以#号結束(5+7)*(24/4)#成果為:72Pressanykeytocontinue《数据构造》试验汇报四试验内容:二叉树及其应用學号:

姓名:

梁闪星

一、上机试验的問題和规定(需求分析):1.二叉树的建立与遍历【問題描述】

【基本规定】

從键盘接受输入(先序),以二叉链表作為存储构造,建立二叉树(以先序来建立),并采用递归算法對其進行遍历(先序、中序、後序),将遍历成果打印输出。

【测试数据】

ABC##DE#G##F###(其中#表达建立空指针)

则输出成果為先序序列:ABCDEGF

中序序列:CBEGDFA

後序序列:CGBFDBA二、程序设计的基本思想,原理和算法描述:基本思想:采用递归算法,對二叉树進行遍历。二叉树是由3個基本單元构成:根結點、左子树和右子树。因此,若能依次遍历這三個部分,便是遍历了整個二叉树。三、调试和运行程序過程中产生的問題及采用的措施:没碰到問題。四、源程序及注释[源程序]#include<stdio.h>#include<stdlib.h>#defineNULL0#defineSTACK_INIT_SIZE 100#defineSTACKINCREMENT 10#defineOVERFLOWER -2#defineERROR 0#defineOK 1typedef int Status;typedefstructBiTNode{chardata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;#defineSElemTypeBiTreetypedef struct{ SElemType *base; SElemType *top; int stacksize;}SqStack;//数据构造的定义StatusInitStack(SqStack&S){ //栈的初始化 S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base)exit(OVERFLOWER); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return(OK);}StatusPush(SqStack&S,SElemTypee){ //進栈 if(S.top-S.base>=S.stacksize){ S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base)exit(OVERFLOWER); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return(OK);}StatusStackEmpty(SqStackS){if(S.top==S.base)return(OK);elsereturn(ERROR);}StatusPop(SqStack&S,SElemType&e){ //出栈 if(S.top==S.base)return(ERROR); e=*--S.top; return(OK);}SElemTypeGetTop(SqStackS){ //取栈顶元素 SElemTypee; if(S.base==S.top)exit(OVERFLOWER); e=*(S.top-1); return(e);}StatusCreatBiTree(BiTree&T){charch;scanf("%c",&ch);if(ch=='#')T=NULL;else{T=(BiTree)malloc(sizeof(BiTNode));if(!T)return0;T->data=ch;CreatBiTree(T->lchild);CreatBiTree(T->rchild);}returnOK;}//CreatBiTreevoidPreorder(BiTreeT){if(T){printf("%c",T->data);Preorder(T->lchild);Preorder(T->rchild);}}voidInorder(BiTreeT){if(T){Inorder(T->lchild);printf("%c",T->data);Inorder(T->rchild);}}voidPostorder(BiTreeT){if(T){Postorder(T->lchild);Postorder(T->rchild);printf("%c",T->data);}}voidPreOrder_Nonrecursive(BiTreeT)//先序遍历二叉树的非递归算法{SqStackS;BiTreep;InitStack(S);Push(S,T);//根指针進栈while(!StackEmpty(S)){while(p=GetTop(S)){printf("%c",p->data);Push(S,p->lchild);}//向左走到尽頭Pop(S,p);if(!StackEmpty(S)){Pop(S,p);Push(S,p->rchild);//向右一步}}//while}//PreOrder_NonrecursivevoidInOrder_Nonrecursive(BiTreeT)//中序遍历二叉树的非递归算法{SqStackS;BiTreep;InitStack(S);Push(S,T);//根指针進栈while(!StackEmpty(S)){while(p=GetTop(S))Push(S,p->lchild);//向左走到尽頭Pop(S,p);if(!StackEmpty(S)){Pop(S,p); printf("%c",p->data);Push(S,p->rchild);//向右一步}}//while}//InOrder_Nonrecursivevoidmain(){BiTreeT;CreatBiTree(T);printf("递归的先序遍历的成果為:");Preorder(T);printf("\n");printf("递归的中序遍历的成果為:");Inorder(T);printf("\n");printf("後序遍历的成果為:");Postorder(T);printf("\n");}五、运行成果abc##de#g##f###递归的先序遍历的成果為:abcdegf递归的中序遍历的成果為:cbegdfa後序遍历的成果為:cgefdbaPressanykeytocontinue《数据构造》试验汇报五试验内容:图學号:

姓名:

梁闪星

一、上机试验的問題和规定(需求分析):1.阅讀理解上面第一种有关图的邻接矩阵的程序,做下列題目。根据教科書P157页的G2图(無向图),输入数据运行程序。再合适修改上述程序,使它合用于G1图(有向图),输入数据运行程序。提醒:無向图的邻接矩阵是對称的,而有向图的邻接矩阵是非對称的。二、程序设计的基本思想,原理和算法描述:基本思想:無向图的邻接矩阵是對称的,而有向图的邻接矩阵是非對称的。只需把無向图中G[i][j]=1;G[j][i]=1;改為G[i][j]=1;即可。三、调试和运行程序過程中产生的問題及采用的措施:调试和运行程序顺利。四、源程序及注释#include<stdio.h>#include<stdlib.h>#defineMAX20typedefintVexType;typedefVexTypeMgraph[MAX][MAX];/*Mgraph是二维数组类型標识符*//*函数原形申明*/voidcreat_mg(MgraphG);voidout_mg(MgraphG);MgraphG1;/*G1是邻接矩阵的二维数组名*/intn,e,v0;/*主函数*/voidmain(){creat_mg(G1);out_mg(G1);}/*main*//*建立邻接矩阵*/voidcreat_mg(MgraphG){inti,j,k;printf("\nn,e=?");scanf("%d%d",&n,&e);/*输入顶點数n,边数e*/for(i=1;i<=n;i++)for(j=1;j<=n;j++)G[i][j]=0;/*假如是网,G[i][j]=0该為G[i][j]=32767(無穷)*/for(k=1;k<=e;k++)/*组织边数的循环*/{printf("\nvi,vj=?");scanf("%d%d",&i,&j);/*输入一条边的两個顶點编号i,j*/G[i][j]=1;/*無向图的邻接矩阵是對称矩阵*//*假如是网,還要输入边的权值w,再让G[i][j]=w*/}}/*creat_mg*//*邻接矩阵简朴输出,為了检查输入与否對的*/voidout_mg(MgraphG){inti,j,k;charch;for(i=1;i<=n;i++)/*矩阵原样输出*/{printf("\n");for(j=1;j<=n;j++)printf("%5d",G[i][j]);}/*输出所存在的边*/for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(G[i][j]==1)printf("\n存在边<%d,%d>",i,j);printf("\n\n打回車键,继续。");ch=getchar();}/*out_mg*/五、运行成果n,e=?44vi,vj=?12vi,vj=?13vi,vj=?34vi,vj=?410110000000011000存在边<1,2>存在边<1,3>存在边<3,4>存在边<4,1>打回車键,继续。Pressanykeytocontinue《数据构造》试验汇报六试验内容:查找學号:

姓名:

梁闪星

一、上机试验的問題和规定(需求分析):

1.二叉排序树的建立与查找

【問題描述】(1)设计一种讀入一串整数构成一棵二叉排序树的算法并实現。(2)對该排序二叉树進行中序遍历,输出其成果。

【实現提醒】二叉排序树的构成,可從空的二叉树開始,每输入一种結點数据,就建立一种新結點插入到目前已生成的二叉排序树中,因此它的重要操作是二叉排序树插入运算。在二叉排序树中插入新結點,只要保证插入後仍符合二叉排序树的定义即可。【测试数据】设有一组数据(33,88,22,55,90,11,66,99),边输入边插入建立二叉排序树,然後中序遍历该二叉排序树。二、程序设计的基本思想,原理和算法描述:基本思想:當二叉排序树不空時,首先将給定值和根結點的关键字比较,若相等,则查找成功,否则将根据給定值和根結點的关键字之间的大小关系,分别在左子树或右子树上继续進行查找。原理:二叉排序树或者是一颗空树;或者是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上所有結點的值均不不小于它的根結點的值;(2)若它的右子树不空,则右子树上所有的結點的值均不小于它的根結點的值;(3)它的左右子树也分别為二叉排序树。三、调试和运行程序過程中产生的問題及采用的措施:(略)四、源程序及注释[源程序]#include<stdio.h>#include<stdlib.h>typedefintStatus;typedefintKeyType;typedefcharElemType;#defineFALSE0#defineMAX_TREE_SIZE1000#defineTRUE1#defineNULL0#defineN10#defineEQ(a,b)((a)==(b))#defineLT(a,b)((a)<=(b))#defineLQ(a,b)((a)>=(b))typedefstruct{ KeyTypekey; charm;}DataType;typedefstructBiTNode{ DataTypedata; structBiTNode*lchild,*rchild;}BiTNode,*BiTree;voidInitBiTree(BiTreeT){ T=NULL;}StatusSearchBST(BiTreeT,KeyTypekey,BiTreef,BiTree&p){//在根指针T所指二叉排序树中递归的查找其关键字等于key的数据元素,若查找成功,则指针p指向该数据元素結點,并返回TRUE,否则指针p指向查//找途径上访問的最终一种結點并返回FALSE,指针f指向T的双亲,其初始调用值為NULLif(!T){ p=f;returnFALSE;}elseifEQ(key,T->data.key){ p=T; returnTRUE;}elseifLT(key,T->data.key) returnSearchBST(T->lchild,key,T,p);else returnSearchBST(T->rchild,key,T,p);}//SearchBSTStatusInsertBST(BiTree&T,DataTypee){//當二叉排序树T中不存在关键字等于e.key的数据元素時,插入e并返回//TURE,否则返回FALSE BiTrees,f,p;if(!SearchBST(T,e.key,f,p)){//查找不成功s=(BiTree)malloc(sizeof(BiTNode));s->data=e;s->lchild=s->rchild=NULL;if(!p)T=s;//被插結點*s為新的根結點elseifLT(e.key,p->data.key)p->lchild=s;//被插結點*s為左孩子elsep->rchild=s;//被插結點*s為右孩子returnTRUE;}elsereturnFALSE;}//InsertBSTvoidmain(){ BiTreet,p,f; t=p=f=NULL; inti,q; KeyTypekey; DataTyper[N]={{45,'a'},{12,'b'},{53,'c'},{3,'d'},{37,'e'},{24,'f'},{100,'g'},{61,'h'},{90,'i'},{78,'j'}}; InitBiTree(t); InsertBST(t,r[0]); //當二叉排序树T中不存在关键字等于e.key的数据元素時,插入e并返回//TURE,否则返回FALSE BiTrees;if(!SearchBST(t,r[0].key,f,p)){//查找不成功s=(BiTree)malloc(sizeof(BiTNode));s->data=r[0];s->lchild=s->rchild=NULL;if(!p)t=s;//被插結點*s為新的根結點elseifLT(r[0].key,p->data.key)p->lchild=s;//被插結點*s為左孩子elsep->rchild=s;//被插結點*s為右孩子} for(i=1;i<N;i++){ InsertBST(t,r[i]); /*printf("請输入待查找的值:"); scanf("%d",&key); q=SearchBST(t,key,f,p); if(q) printf("表中存在此值。");*/ } for(i=0;;i++){ printf("請输入待查找的值:"); scanf("%d",&key); if(key==0)break; q=SearchBST(t,key,f,p); if(q) printf("表中存在此值。"); } }《数据构造》试验汇报七试验内容:排序學号:

姓名:

梁闪星

一、上机试验的問題和规定(需求分析):[題目]迅速排序【問題描述】设有关键字序列k={

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论