数据结构动态查找表实验报告Word文档格式.docx

上传人:b****6 文档编号:20698728 上传时间:2023-01-25 格式:DOCX 页数:25 大小:32.33KB
下载 相关 举报
数据结构动态查找表实验报告Word文档格式.docx_第1页
第1页 / 共25页
数据结构动态查找表实验报告Word文档格式.docx_第2页
第2页 / 共25页
数据结构动态查找表实验报告Word文档格式.docx_第3页
第3页 / 共25页
数据结构动态查找表实验报告Word文档格式.docx_第4页
第4页 / 共25页
数据结构动态查找表实验报告Word文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

数据结构动态查找表实验报告Word文档格式.docx

《数据结构动态查找表实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构动态查找表实验报告Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

数据结构动态查找表实验报告Word文档格式.docx

2、空指针异常,老问题了,指针在使用之前必须要初始化分配空间才能够使用;

3、调试过程中输入数据时出现的低级错误,忘加地址符,导致异常;

4、对文件的操作出现了问题,写入的数据,读出来不正确或是读不出来,解决方法是以相同的格式和方法读写文件,中途加些printf语句检查读出来是否正确,并多次采用单步调试法,一步一步的调试即可。

六【上机调试后的源程序及还存在的问题】

//文件dtczb.h

#include<

stdio.h>

stdlib.h>

string.h>

#defineEQ(a,b)((a)==(b))

#defineLT(a,b)((a)<

(b))

#defineLQ(a,b)((a)>

#defineTRUE1

#defineFALSE0

#defineOVERFLOW-1

#defineLH+1

#defineEH0

#defineRH-1

typedefintStatus;

typedefintKeyType;

typedefcharName;

typedefcharSex;

typedefintAge;

//结点数据域的定义

typedefstruct

{

KeyTypekey;

Namename[20];

Sexsex[20];

Ageage;

}ElemType;

//动态表的数据结构

typedefstructDSTable

ElemTypedata;

Statusbf;

structDSTable*lchild,*rchild;

}*BiTree,BiTNode;

//构造一个只含根节点的动态表

StatusInitDSTable(BiTree*DT);

//动态表中数据元素序列的输入

voidInputData(ElemTypearray[],intn);

//销毁一个动态表

StatusDestroyDSTable(BiTree*DT);

//查找表中是否有关键字等于key的记录

StatusSearchDSTable(BiTreeDT,KeyTypekey,BiTreef,BiTree*p);

//动态表的插入函数

StatusInsertDSTable(BiTree*DT,ElemTypee);

//动态表的删除函数

StatusDeleteDSTable(BiTree*DT,KeyTypekey);

StatusDelete(BiTree*p);

//动态表中节点的右旋

voidR_Rotate(BiTree*p);

//动态表中节点的左旋

voidL_Rotate(BiTree*p);

//二叉平衡树的插入

StatusInsertAVL(BiTree*DT,ElemTypee,Status*taller);

//左平衡函数

voidLeftBalance(BiTree*DT);

//右平衡函数

voidRightBalance(BiTree*DT);

voidPrint(BiTreeDT);

//小界面的函数

voidmenu();

//dtczb.c文件

#include"

dtczb.h"

StatusInitDSTable(BiTree*DT)

*DT=NULL;

return(TRUE);

}

voidInputData(ElemTypearray[],intn)

inti;

for(i=0;

i<

n;

i++)

{

printf("

******请输入第%d学生的信息******:

\n"

i+1);

请输入该学生的学号、姓名、性别、年龄:

);

scanf("

%d%s%s%d"

&

array[i].key,array[i].name,array[i].sex,&

array[i].age);

}

StatusSearchDSTable(BiTreeDT,KeyTypekey,BiTreef,BiTree*p)

if(!

DT)

*p=f;

return(FALSE);

elseifEQ(key,DT->

data.key)

*p=DT;

return(TRUE);

elseifLT(key,DT->

return(SearchDSTable(DT->

lchild,key,DT,p));

else

rchild,key,DT,p));

StatusInsertDSTable(BiTree*DT,ElemTypee)

BiTrees;

BiTreep;

p=(BiTree)malloc(sizeof(BiTNode));

SearchDSTable(*DT,e.key,NULL,&

p))

s=(BiTree)malloc(sizeof(BiTNode));

s->

data=e;

lchild=NULL;

rchild=NULL;

if(!

p)

{

*DT=s;

}

elseifLT(e.key,p->

p->

lchild=s;

else

rchild=s;

StatusDeleteDSTable(BiTree*DT,KeyTypekey)

(*DT))

你要删除的学生不存在!

else

if(EQ(key,(*DT)->

data.key))

return(Delete(DT));

elseif(LT(key,(*DT)->

return(DeleteDSTable(&

((*DT)->

lchild),key));

rchild),key));

StatusDelete(BiTree*p)

BiTreeq,s;

(*p)->

rchild)

q=*p;

*p=(*p)->

lchild;

free(q);

elseif(!

lchild)

rchild;

s=(*p)->

while(s->

q=s;

s=s->

(*p)->

data=s->

data;

if(q!

=*p)

q->

rchild=s->

lchild=s->

free(s);

//动态表结点的右旋函数

voidR_Rotate(BiTree*p)

BiTreelc;

lc=(*p)->

(*p)->

lchild=lc->

lc->

rchild=*p;

*p=lc;

voidL_Rotate(BiTree*p)

BiTreerc;

rc=(*p)->

rchild=rc->

rc->

lchild=*p;

*p=rc;

StatusInsertAVL(BiTree*DT,ElemTypee,Status*taller)

*DT=(BiTree)malloc(sizeof(BiTNode));

(*DT)->

lchild=(*DT)->

bf=EH;

*taller=TRUE;

if(EQ(e.key,(*DT)->

*taller=FALSE;

return(0);

if(LT(e.key,(*DT)->

if(!

InsertAVL(&

lchild),e,taller))

return(0);

if(*taller)

{

switch((*DT)->

bf)

{

caseLH:

LeftBalance(DT);

*taller=FALSE;

break;

caseEH:

(*DT)->

bf=LH;

caseRH:

}

}

rchild),e,taller))

bf=RH;

RightBalance(DT);

return

(1);

voidLeftBalance(BiTree*DT)

BiTreelc,rd;

lc=(*DT)->

switch(lc->

caseLH:

(*DT)->

bf=lc->

R_Rotate(DT);

break;

caseRH:

rd=lc->

switch(rd->

caseLH:

(*DT)->

lc->

break;

caseEH:

caseRH:

rd->

L_Rotate(&

lchild));

voidRightBalance(BiTree*DT)

BiTreerc,ld;

rc=(*DT)->

switch(rc->

rc->

L_Rotate(DT);

ld=rc->

switch(ld->

ld->

//中序遍历,打印出二叉树中的结点数据值

voidPrint(BiTreeDT)

if(DT)

Print(DT->

lchild);

%d%s%s%d\n"

DT->

data.key,DT->

data.name,DT->

data.sex,DT->

data.age);

rchild);

voidmenu()

printf("

**********欢迎进入二叉排序树系统**********\n"

##########0、文件信息的读取************\n"

&

1、文件A的动态查找表<

A、平衡,B、排序,C、删除>

**********2、文件B的动态查找表<

************\n"

##########3、文件C的动态查找表<

############\n"

^^^^^^^^^^4、文件的生成%%%%%%%%%%%%\n"

@@@@@@@@@@5、退出系统@@@@@@@@@@@@@\n"

//zhuhanshu.c文件

//主函数的实现

windows.h>

LARGE_INTEGERstart;

LARGE_INTEGERend;

LARGE_INTEGERfrequency;

intmain(void)

ElemTypeblock[120],group[120];

intn,i,j,k,m;

inttall;

BiTreeT[3];

intnumber;

charfilename[3][20],gilename[3][20];

chardecided[20],c;

FILE*fp,*fq,*fr;

menu();

while

(1)

\n请输入数字选择你要进行的操作:

"

%d"

k);

getchar();

switch(k)

case0:

fr=fopen("

fname"

"

rb"

if(fr==NULL)

puts("

文件尚未写入,请写入文件!

exit(0);

for(i=0;

3;

fread(gilename[i],sizeof(gilename[i]),1,fr);

fclose(fr);

printf("

文件读取成功!

break;

case1:

InitDSTable(&

T[0]);

\n欢迎进入文件A的动态查找表\n"

fq=fopen(gilename[0],"

if(fq==NULL)

printf("

\n打开文件失败,程序自动退出!

\n"

fread(&

m,sizeof(int),1,fq);

m;

fread(&

group[i],sizeof(ElemType),1,fq);

fclose(fq);

请输入AorBorC选择:

scanf("

%c"

c);

switch(c)

case'

A'

:

{

if(!

QueryPerformanceFrequency(&

frequency))

{

return-1;

}

QueryPerformanceCounter(&

start);

//开始计时

for(i=0;

InsertDSTable(&

T[0],group[i]);

end);

//结束计时

printf("

\n此次查找耗时:

%lf(us)微秒"

(double)(end.QuadPart-start.QuadPart)/(double)frequency.QuadPart);

\n学生的学号姓名性别年龄为:

Print(T[0]);

}

B'

InsertAVL(&

T[0],group[i],&

tall);

C'

\n请输入你要删除的学生学号:

scanf("

number);

if(DeleteDSTable(&

T[0],number))

Print(T[0]);

printf("

\n删除成功\n"

case2:

T[1]);

\n欢迎进入文件B的动态查找表\n"

fq=fopen(gilename[1],"

if(!

fq)

\n"

group[i],sizeof(group[i]),1,fq);

T[1],group[i]);

Query

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1