网络设计实验报告.docx
《网络设计实验报告.docx》由会员分享,可在线阅读,更多相关《网络设计实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
网络设计实验报告
实验名称:
第9章实验
实验类型:
验证性实验
姓名:
车红岫
实验日期:
2013.6
1.问题描述
以下四个验证性实验都做。
(1)顺序查找验证
(2)折半查找验证
(3)二叉排序树的建立
(4)哈希表的建立
2.数据结构设计
(1)顺序查找验证
typedefstruct{
KeyType*elem;//零号单元留空
intlength;//表长度
}SSTable;
(2)折半查找验证
intscore[100];
intlength;
intkey;
(3)二叉排序树的建立
typedefstructnode
{
datatypekey;
structnode*lchild,*rchild;
}bsnode;
(4)哈希表的建立
typedefstructLnode
{
intdata;
structLnode*next;
}Lnode,*ListLink;//建立链表结点
typedefstruct
{
intpos;
ListLinkfirstnode;//建立数组结点
}HashBox;
typedefstruct
{
HashBoxHArrary[INIT_MAXSIZE];//建立哈希数组(哈希表的地址表头)
}HashArray;
3.算法设计
4.界面设计
(1)顺序查找验证
(2)折半查找验证
(3)二叉排序树的建立
(4)哈希表的建立
5.运行、测试
(一)顺序查找验证
(1)运行程序,显示菜单
(2)输入n
(3)输出结果
(2)折半查找验证
(1)运行程序,显示菜单
(2)输入n
(3)输出结果
(3)二叉排序树的建立
(1)运行程序,显示菜单
(2)输入n
(3)输出结果
(4)哈希表的建立
(1)运行程序,显示菜单
(2)输入n
(3)输出结果
6.实验收获及思考
建立哈希表时没有考虑冲突处理问题,做程序时要谨慎小心。
附录:
源代码
(1)顺序查找验证
#include
#include
#defineMAX_LENGTH100
typedefintKeyType;
typedefstruct{
KeyType*elem;//零号单元留空
intlength;//表长度
}SSTable;
intSearch_Seq(SSTableST,KeyTypekey){
inti;
ST.elem[0]=key;//“哨兵”
for(i=ST.length;ST.elem[i]!
=key;i--)
;//从后往前找
returni;//找不到时,i为0
}
voidmain()
{
inti,key;
SSTableT;
T.elem=(KeyType*)malloc(sizeof(KeyType));
printf("输入数据个数\n");
scanf("%d",&T.length);
for(i=1;i<=T.length;i++){
printf("输入数据%d;\n",i);
scanf("%d",&T.elem[i]);
}
for(i=1;i<=T.length;i++)
printf("%5d",T.elem[i]);
printf("\n输入要查找的数据\n");
scanf("%d",&key);
i=Search_Seq(T,key);
printf("位置是%d\n",i);
system("pause");
}
(2)折半查找验证
#include
#include
#defineOK1
#defineERROR0
voidmain()
{
intscore[100];
intlength;
intkey;
printf("输入数据个数:
\n");
scanf("%d",&length);
for(inti=1;i<=length;i++)
{printf("输入第%d个元素",i);
scanf("%d",&score[i]);
}
printf("\n输入要查找的关键字\n");
scanf("%d",&key);
intlow,high,mid;
low=1;
high=length;
while(low<=high)
{
mid=(low+high)/2;
if(score[mid]==key)//找到待查元素
{printf("数据位置%d",mid);
system("pause");
}
elseif(keyhigh=mid-1;//继续在前半区间进行查找
elseif(key>score[mid])
low=mid+1;//继续在后半区间进行查找
}
printf("无此数据");
system("pause");
}
(3)二叉排序树的建立
#include
#include
typedefintdatatype;
typedefstructnode
{
datatypekey;
structnode*lchild,*rchild;
}bsnode;
typedefbsnode*bstree;
voidinsertbstree(bstree*t,datatypex)
{
bstreef,p;
p=*t;
while(p)
{
f=p;
if(xkey)
p=p->lchild;
else
p=p->rchild;
}
p=(bstree)malloc(sizeof(bsnode));
p->key=x;
p->lchild=p->rchild=NULL;
if(*t==NULL)
*t=p;
else
{
if(x<(f->key))
f->lchild=p;
else
f->rchild=p;
}
}
bstreecreatbstree(bstreet)
{
datatypekey;
scanf("%d",&key);
while(key!
=-1)
{
insertbstree(&t,key);
scanf("%d",&key);
}
returnt;
}
voidinorder(bstreet)
{
if(t)
{
inorder(t->lchild);
printf("%d",t->key);
inorder(t->rchild);
}
}
voidqorder(bstreet)
{if(t)
{
printf("%d",t->key);
qorder(t->lchild);
qorder(t->rchild);
}
}
voidhorder(bstreet)
{
if(t)
{
horder(t->lchild);
horder(t->rchild);
printf("%d",t->key);
}
}
intmain()
{
bstreet=NULL,p;
printf("请输入一个-1为结束标记的结点序列:
\n");
p=creatbstree(t);
printf("中序遍历:
");
inorder(p);
printf("\n");
printf("先序遍历:
");
qorder(p);
printf("\n");
printf("后序遍历:
");
horder(p);
system("pause");
return0;
}
(4)哈希表的建立
#include
#include
#defineINIT_MAXSIZE10
typedefstructLnode
{
intdata;
structLnode*next;
}Lnode,*ListLink;//建立链表结点
typedefstruct
{
intpos;
ListLinkfirstnode;//建立数组结点
}HashBox;
typedefstruct
{
HashBoxHArrary[INIT_MAXSIZE];//建立哈希数组(哈希表的地址表头)
}HashArray;
voidInitHashList(HashArray&l,intinput[],intaccount);//建立哈希表
voidVistHashList(HashArray&l);//遍历输出哈希表
intmain(void)
{intaccount=0,i=0,input[256];
HashArrayl;
printf("请输入要插入哈希表元素的个数:
");
scanf("%d",&account);
printf("请输入要插入哈希表的元素:
");
for(i=0;i{scanf("%d",&input[i]);
}
InitHashList(l,input,account);
printf("\n哈希表如下:
\n");
VistHashList(l);
return0;
}
voidInitHashList(HashArray&l,intinput[],intaccount)//建立哈希表
{inti=0,j=0,pos=0;
ListLinkq,p;
charch='A';
for(i=0;i{l.HArrary[i].pos=ch++;
l.HArrary[i].firstnode=NULL;
}
for(i=0;i{pos=input[i]%INIT_MAXSIZE;//计算元素地址
q=newLnode;//申请结点
q->data=input[i];
q->next=NULL;
if(l.HArrary[pos].firstnode==NULL)//判断当前地址表头是否还没有元素连入
l.HArrary[pos].firstnode=q;
else
{p=l.HArrary[pos].firstnode;
while(p->next!
=NULL)
{p=p->next;//找到链表表尾
}
p->next=q;//将要插入的结点接入表尾
}
}
}
voidVistHashList(HashArray&l)//输出哈希表
{ListLinkp;
inti;
for(i=0;i{printf("%c.",l.HArrary[i].pos);
p=l.HArrary[i].firstnode;
while(p!
=NULL)
{printf("->%d",p->data);
p=p->next;
}
printf("\n");
}
}