校园十大优秀青年评比由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“校园十大优秀青年评比”。
实验四:
校园十大优秀青年评比
1、数据存储:使用散列结构存储(hash结构)
2、哈希表的建立:
哈希函数:h(key)=key%HashLength,其中:k关键字为姓名所有拼音的ASCII码的累加值,HashLength为哈希表长,要有足够长。提取学生姓名的法有很多种,一可以采用直接输入姓名拼音,二可以把被选学生的拼音库存,通过一定的方法去提取。
3、解决冲突的方法:
可以使用开放地址法中的线性探测再散列:
hi=(h(key)+di)MOD m,i=1,2,……k(km-1)
增量取值di=1,2,3,……m-1(m一般为表长)
4、排序榜的解决:
不能使用一般的排序方法,因为此哈希表是散列结构,数据的存储并不是联系的,数据元素与数据元素之间并没有明显的关系。因此最好的解决方式就是利用一种特定关系,使这些数据元素通过一次性组织起来,使他们既具有一定的关系,又具有顺序关系(从大到小或从小到大)。最好
1的一种解决方案就是建立二叉排序树,以散列信息建立二叉排序树后,通过二叉树的中序,就可以得到排行榜,前10个或后10个就是上榜者。
5、数据结构的设计。在这里只给出数据元素的结构
typedef struct{
char name[20];姓名
char cla[30];班级专业
int count;
char YouXiuShiJi[50];
……
}
6、可能用到的函数:
哈希表构造函数
冲突处理函数
读取被选任姓名,解析姓名拼音,计算Key的函数
显示某个或全部被选人信息的函数
被选人得票排行榜函数
7、二叉排序树
定义:二叉排序树或是一棵空树,或是具有下列性质的二叉树:
1)若它的左子树不空,则左子树上所有结点的值均小
于它的根结点的值
2)若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值
3)它的左、右子树也分别为二叉排序树
二叉排序树的插入
插入原则:若二叉排序树为空,则插入结点应为
新的根结点;否则,继续在其左、右子树上查找,直至某个叶子结点的左子树或右子树为空为止,则插入结点应为该叶子结点的左孩子或右孩子
二叉排序树生成:
从空树出发,经过一系列的查找、插入操作之后,可生成一棵二叉排序树
例{10,18,3,8,12,2,7,3}
算法:
typedef struct node
{int data;
struct node *lchild,*rchild;
}JD;
JD *insertbst(JD *r,int x)
{JD *p,*q,*s;
s=(JD *)malloc(sizeof(JD));
s->data=x;s->lchild=s->rchild=NULL;q=NULL;
if(r==NULL){r=s;return(r);}
p=r;
while(p!=NULL)
{q=p;
if(x
data)
p=p->lchild;
else
p=p->rchild;
}
if(xdata)
q->lchild=s;
else
q->rchild=s;
return(r);}