数据结构实验报告七查找、
数据结构实验七 查找
数据结构实验七查找
数据结构实验七查找
一、实验目的
本实验旨在通过实际操作和编程实现不同查找算法,并对其进行性能比较。
二、实验内容
1.线性查找算法
2.二分查找算法
3.插值查找算法
4.哈希查找算法
三、线性查找算法
线性查找算法是最简单的查找算法之一,它的基本思想是从第一个元素开始逐个比较,直到找到目标元素或遍历完整个数组。
1.算法步骤:
●从数组的第一个元素开始遍历,比较当前元素与目标元素是否相等。
●如果相等,则查找成功,返回当前元素的索引。
●如果不相等,继续遍历下一个元素,重复上述步骤,直到遍历完整个数组。
●如果遍历完数组仍未找到目标元素,则查找失败,返回.1.
2.算法示例代码(Python):
```
def linear_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return .1
```
四、二分查找算法
二分查找算法适用于有序数组,它通过每次将目标值与数组的中间元素进行比较,并根据比较结果缩小搜索范围。
1.算法步骤:
●初始化左边界为数组的第一个元素的索引,右边界为数组的最后一个元素的索引。
●在每一次循环中,找到数组中间元素的索引(mid)。
●将目标值与中间元素进行比较:
●如果相等,则查找成功,返回中间元素的索引。
●如果目标值大于中间元素,则说明目标值在中间元素的右侧,将左边界更新为mid + 1.
●如果目标值小于中间元素,则说明目标值在中间元素的左侧,将右边界更新为mid ●1.
●重复上述步骤,直到左边界大于右边界,表示查找失败。
数据结构-第7章 查找
• 动态查找表:
对查找表具有修改操作
• 关键字
记录中某个数据项的值,可用来识别一个记录
• 主关键字:
唯一标识数据元素
• 次关键字:
可以标识若干个数据元素 北京林业大学信息学院
2020年12月16日
查找算法的评价指标
关键字的平均比较次数,也称平均搜索长度
ASL(Average Search Length)
2020年12月16日
折半查找的性能分析
– 查找过程:每次将待查记录所在区间缩小一半, 比顺序查找效率高,时间复杂度O(log2 n)
– 适用条件:采用顺序存储结构的有序表,不宜用 于链式结构
北京林业大学信息学院
2020年12月16日
7.3 树表的查找
表结构在查找过程中动态生成 对于给定值key 若表中存在,则成功返回; 否则插入关键字等于key 的记录
-1 2 3-4 5 6-7 8 9-10 11 h
1-2 2-3
4-5 5-6
7-8 8-9 10-11 11-
外结点
查找成功时比较次数:为该结点在判定树上的层次数,不超过树 的深度 d = log2 n + 1
查找不成功的过程就是走了一条从根结点到外部结点的路径d或 d-1。
北京林业大学信息学院
3.掌握二叉排序树的插入算法,了解二叉排序树的删 除算法;
数据结构实验七 查找
数据结构实验七查找
数据结构实验七查找
一、实验目的
本实验旨在通过编程实现常见的查找算法,包括顺序查找、二分查找和哈希查找,并比较它们的效率和适用场景。
二、实验内容
1.顺序查找
1.1 算法思想
顺序查找算法是一种简单直观的查找方法,它的基本思想是从数组的第一个元素开始逐个比较,直到找到目标元素或遍历完整个数组。
1.2 算法流程
a) 初始化目标元素的索引为 -1.
b) 从数组的第一个元素开始,依次与目标元素比较。
c) 如果找到目标元素,则记录其索引,并结束查找。
d) 如果遍历完整个数组仍未找到目标元素,则记录目标索引仍为 -1.
1.3 时间复杂度
顺序查找算法的时间复杂度为 O(n),其中 n 为数组的长度。
2.二分查找
2.1 算法思想
二分查找算法是一种高效的查找算法,但要求被查找的数
组必须是有序的。它的基本思想是将目标元素与数组的中间元素进
行比较,然后根据比较结果将查找的范围缩小一半,直到找到目标
元素或查找范围为空。
2.2 算法流程
a) 初始化目标元素的索引为 -1、查找范围的起始索引为0,终止索引为数组长度减一。
b) 计算查找范围的中间索引,取整数部分。
c) 将目标元素与中间索引对应的数组元素进行比较:
- 如果相等,则记录中间索引为目标索引,并结束查找。
- 如果目标元素小于中间元素,则在前一半查找范围中
进行二分查找。
- 如果目标元素大于中间元素,则在后一半查找范围中进行二分查找。
d) 如果查找范围的起始索引大于终止索引,则表示查找范围为空,记录目标索引仍为 -1.
2.3 时间复杂度
二分查找算法的时间复杂度为 O(log n),其中 n 为数组的长度。
数据结构实验七、八 查找排序及其应用
实验七、八查找排序应用问题实现一、实验目的
1.理解掌握动态查找表在计算机中的各种实现方法。
2.熟练掌握顺序查找、折半查找在顺序表上的实现及解决简单的应用问题。
3.熟练掌握常用排序算法在顺序表上的实现,能解决简单的应用问题。二、实验内容
⏹题目:从键盘上输入n个学生的基本信息(学号、姓名、班级、年龄等),
建立其顺存储结构,然后执行如下操作:
1、分别按学号、姓名、班级、年龄进行插入排序、交换排序和选择排序并显
示排序结果(排序算法任选,但必须保证每种算法至少使用一次);
2、可按学号、姓名、班级或其组合查找某一学生,若查找成功,则输出其基
本信息,否则提示出错。
试设计程序完成上述功能。
提示:上述操作可用菜单方式实现,字符数据类型可用字符串比较函数strcmp (const char *, const char *) ,在string.h 头文件中
测试数据:自定
⏹设计要求:
1、上机前,认真学习教材,理解掌握各种查找算法、排序算法的特点及在
计算机中的实现方法
2、上机前,认真独立地写出本次程序清单,流程图,该程序包括数据类型
以及每一种操作的具体的函数定义和主函数。有关算法分别参阅讲义和
参考教材事例。
⏹头文件中数据结构设计及相关函数声明:
#include<iostream.h>
#include<string.h>
#define MAXSIZE 20 //设记录不超过20个
typedef struct { //学生数据结构体定义
int Snumber; //学号
char Name[10]; //姓名
王道数据结构 第七章 查找思维导图-高清脑图模板
平衡二叉树的最大深度为O(log n),平均查找长度/查找的时间复杂度为O(log n)
查找效率分析
删除结点后,要保持二叉排序树的特性不变(左<中<右)
若删除节点导致不平衡,则需要调整平衡
1.删除结点(方法同“二叉排序树”)
2.一路向北找到最小不平衡子树
3.找最小不平衡子树下,“个头”最高的儿子、孙子
ASL 的数量级反应了查找算法时间复杂度
评价一个查找算法的效率时,通常考虑查找成功/查找失败两种情况的 ASL
查找算法的效率评价
通常认为查找任一元素的概率相同
算法思想
顺序查找,又叫“线性查找”,通常用于线性表。 从头到脚挨个找(或者从脚到头) 适用于顺序表、链表,表中元素有序无序都OK
含n个关键字的m阶B树,最小高度,最大高度是多少?(不包括叶子结点(失败 结点))
高度
在插入key后,若导致原结点关键字数超过上限,则从中间位置([m/2])将其中的 关键字分为两部分,左部分包含的关键字放在原结点中,右部分包含的关键字放 到新结点中,中间位置([m/2])的结点插入原结点的父结点
新元素一定是插入到最底层“终端节点”,用“查找”来确定插入位置
直接定址法
选取数码分布较为均匀的若干位作为散列地址
设关键字是r进制数,而r个数码在各位上出现的概率不一定相同,可能在某些数 位上分布均匀一些,每种数码出现的机会均等;而在某些位上分布不均匀,只有 某几种数码经常出现,此时可选取数码分布较为均匀的若干位作为散列地址。这 种方法适合于已知的关键字集合,若更换了关键字免责需要重新构造新的散列函 数。
数据结构实验七 查找
数据结构实验七查找
数据结构实验七查找
第一章实验目的
本实验旨在掌握查找算法的实现原理及应用,深入理解各种查找算法的性能特点。
第二章实验内容
1.实现顺序查找算法。
2.实现二分查找算法。
3.实现哈希查找算法。
4.实现二叉排序树查找算法。
5.实现平衡二叉树查找算法。
6.实现B+树查找算法。
7.使用不同的查找算法对随机的数据集进行查找,并比较它们的查找效率。
第三章实验步骤及详解
1.顺序查找算法实现
1..定义一个函数来实现顺序查找算法。
2..从待查找的数组的第一个元素开始遍历,逐个与目标元
素进行比较。
3..如果找到目标元素,返回元素所在的位置索引。
4..如果遍历完整个数组仍未找到目标元素,返回-1表示未
找到。
2.二分查找算法实现
1..定义一个函数来实现二分查找算法。
2..对有序数组进行查找,首先确定查找范围的左右边界。
3..取查找范围的中间元素与目标元素进行比较。
4..如果相等,返回中间元素所在的位置索引。
5..如果目标元素小于中间元素,说明目标元素在左半部分,更新右边界。
6..如果目标元素大于中间元素,说明目标元素在右半部分,更新左边界。
7..继续迭代直到找到目标元素或者查找范围为空。
3.哈希查找算法实现
1..定义一个哈希表数据结构。
2..将待查找的元素通过哈希函数转换为哈希值。
3..使用哈希值作为索引在哈希表中查找元素。
4..如果找到目标元素,返回元素所在的位置索引。
5..如果哈希表中对应的位置为空或者不匹配目标元素,表示未找到。
4.二叉排序树查找算法实现
1..定义一个二叉树数据结构。
2..将待查找的元素按照大小依次插入二叉排序树中。
数据结构与算法上机实验七__查找和排序
数据结构上机实验五
实验内容:查找表和内部排序的基本算法
实验要求:
1) 基本操作要作为函数被调用,做到模块化.
2) 基本上实现每个实验题目的要求.
分组要求:可单独完成,也可两人一组。
实验目的:
1)熟悉C/C++基本编程,培养动手能力.
2)通过实验,加深对查找算法的理解.
评分标准:
1) 只完成第一和第二题,根据情况得4,5-分;
2)完成前3题,根据情况得5,6分;
3)在2)基础上,选做四)中题目,根据情况得6,7分。
题目:
一)顺序表与有序表的查找
(1)建立一个顺序表,利用教材9.1.1的顺序查找算法进行查找;
(2)建立一个有序表,利用折半法进行查找;
(3)试将把(2)中的折半法改用递归算法实现;
二)二叉排序树的一些基本操作
(1)利用二叉链表的存储形式,从键盘输入建立一棵二叉排序树;
(2)对(1)中建立的二叉排序树进行中序遍历并打印;
(3)编写算法,判断一棵二叉树是否为二叉排序树。
(4)在(1)建立的二叉排序树中,查找一个树中不存在的关键字后并插入,之后打印该树;
三)排序
(1)插入排序——已知序列{17,18,60,40,7,32,73,65,85}
建立一个顺序表,采用插入排序算法的实现升序排序,打印排序结果;
(2)交换排序——已知序列{503,87,512,61,908,170,897,275,652,462}
(1)建立一个顺序表,采用冒泡排序法实现升序排序,并打印每趟排序结果;
(2)建立一个顺序表,采用快速排序法实现升序排序,并打印每趟排序结果,与(1)做比较;
(3)选择排序——已知序列{42,13,24,91,23,16,05,88}
数据结构-7顺序查找与二分查找
• break;
•}
• else
• i++; }
• j=idx[i].low;
• while(j<=idx[i].high)
•{
• if(key==r[j].key){
• return j;}
索引表
• else • j++; •}
最大关键字 起始地址
22 48 86 1 7 13
• return -1;
i=1,j=11, m=(i+j)/2=6。 K<r[m] : 在左半部分继续查找。 i=1,j=m-1=5, m=(i+j)/2=3 K>r[m] : 在右半部分继续查找。 i=m+1=4,j=5 m=(i+j)/2=4。 r[m]==k :查找成功。
二分法查找示例 (2)k=50
1 2 3 4 5 6 7 8 9 10 11
二、二分法思想:取中,比较
(1)求有序表的中间位置mid (2)若r[mid].key==k,查找成功;
若r[mid].key>k,在左子表中继续进行二 分查找;
若r[mid].key<k,则在右子表中继续进行二分查找。
二分法查找示例 (1)k=35
1 2 3 4 5 6 7 8 9 10 11
12 21 30 35 38 40 48 55 56 60 64
数据结构DS教程(07查找)
假定
在二叉排序树上被删结点为F,其双亲结点为P, 且不失一般性,可设P是F的左孩子。要删除二叉 排序树中的P结点,分三种情况: (1)若要删除的结点为叶子结点,可以直接进行 删除。
83
83
70
87 77
70 65
87 77
65
86
93
91 100
93
91 100
(a)删除前
(b)删除结点86后
(e)插入关键字77
83 87 77 86 91 93 65
(f)插入关键字65
83 70 77 86 91 87 93 100
(g)插入关键字93
(h)插入关键字91
(i)插入关键字100
图7-7 二叉排序树
7.3.4 二叉排序树的删除
删除要求:
对于二叉排序树,删去二叉树上一个结点相当于 删去有序序列中的一个记录,要求删除结点之后 剩下的二叉树依旧保持二叉排序树的特性
(1)若它的左子树不空,则左子树上所有结点的 值均小于它的根结点的值; (2)若它的右子树不空,则右子树上所有结点的 值均大于或等于它的根结点的值;
(3)它的左右子树都是二叉排序树。
83
给出中序遍历 结果?
87
70
65
77
86
93
91
100
图7-5 二叉排序树
数据结构 查找 实验报告
数据结构查找实验报告
数据结构查找实验报告
1. 简介
查找是计算机科学中一种常见的操作,它用于在一组数据中快
速定位特定的元素。数据结构是计算机存储、组织数据的方式,可
以有效地支持查找操作。本实验报告将介绍查找算法的原理和实现,以及实验结果的分析和总结。
2. 查找算法
2.1 顺序查找
顺序查找是一种简单直观的查找算法,它从数据集的第一个元
素开始逐个比较,直至找到目标元素或遍历完所有元素。顺序查找
的时间复杂度为O(n),其中n是数据集的大小。
2.2 二分查找
二分查找是一种高效的查找算法,它要求数据集必须是有序的。它通过将数据集分成两部分,并与目标元素进行比较,以确定目标
元素所在的区间,然后在该区间内继续二分查找,直至找到目标元
素或确定目标元素不存在。二分查找的时间复杂度为O(log n),其
中n是数据集的大小。
2.3 插值查找
插值查找是对二分查找的一种改进,它根据目标元素的估计位
置来确定比较的起始位置。它适用于数据集分布均匀的情况,可以
进一步减少查找的次数。插值查找的时间复杂度为O(log(log n))。
3. 实验结果
本次实验我们使用了三种查找算法(顺序查找、二分查找和插
值查找)在不同大小的数据集上进行了性能测试。实验结果如下表
所示:
---- 数据集大小 ---- 顺序查找时间(ms) ---- 二分查找时
间(ms) ---- 插值查找时间(ms) ----
-------------------------------------------------------
-------------------------------
数据结构实验报告七_顺序查找
实验七顺序查找
一、实验目的
1.掌握顺序查找操作的算法实现。
二、实验平台
操作系统:Windows7或Windows XP
开发环境:JA V A
三、实验内容及要求
1.建立顺序查找表,并在此查找表上实现顺序查找操作。
四、实验的软硬件环境要求
硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
Netbeans 6.5以上或Eclipse、MyEclipse等编程环境下。
五、知识准备
前期要求掌握查找的含义和顺序查找操作的方法。
六、验证性实验
1.实验要求
编程实现如下功能:
(1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。
2. 实验相关原理:
查找表分别静态查找表和动态查找表两种,其中只能做引用操作的查找表称为静态查找表。
静态查找表采用顺序存储结构,待查找的记录类可描述如下:
public class RecordNode {
private Comparable key; //关键字
private Object element; //数据元素
……
}
待排序的顺序表类描述如下:
public class SeqList {
private RecordNode[] r; //顺序表记录结点数组
private int curlen; //顺序表长度,即记录个数
// 顺序表的构造方法,构造一个存储空间容量为maxSize的顺序表
public SeqList(int maxSize) {
this.r = new RecordNode[maxSize]; // 为顺序表分配maxSize个存储单元
大数据结构实验七查找
实用标准
实验七查找
一、实验目的
掌握查找的不同方法,并能用高级语言实现查找算法;
熟练掌握二叉排序树的构造和查找方法。
熟练掌握静态查找表及哈希表查找方法。二、实验内容
设计一个读入一串整数,然后构造二叉排序树,进行查找。三、实验步骤
从空的二叉树开始,每输入一个结点数据,就建立一个新结点插入到当前已生成的二叉排序树中。
在二叉排序树中查找某一结点。
用其它查找算法进行排序〔课后自己做〕。
四、实现提示
定义结构
typedef struct node
{int key;
int other;
struct node *lchild,*rchild;
}bstnode;
void inorder(t)
{if (t!=Null)
{inorder(t →lchild);
printf( “%4d〞,t →key);
inorder(t →rchild);
}}
bstnode *insertbst(t,s)
bstnode *s, *t;
{bstnode *f, *p;
p=t;
文案大全
实用标准
while(p!=Null)
{f=p;
if(s →key==p→key)return t;
if(s →key<p→key)p=p→lchild;
else
p=p→rchild;
}
if(t==Null) return s;
if(s →key<f→key)f→lchild=s;
else
f→rchild=s;
return t;
}
bstnode *creatord( )
{bstnode *t,*s;
int key;
t=Null;
scanf(“%d〞,&key);
数据结构查找实验报告
数据结构查找实验报告
数据结构查找实验报告
一、引言
数据结构是计算机科学中的重要概念之一,它涉及到组织和管理数据的方式和方法。在实际应用中,我们经常需要对大量的数据进行查找操作,因此查找算法的效率和准确性显得尤为重要。本实验旨在通过对比不同的查找算法,探索其性能和适用场景。
二、实验目的
本实验的目的是比较常见的查找算法,包括线性查找、二分查找和哈希查找,分析它们的时间复杂度和空间复杂度,并通过实验数据验证其效率。
三、实验方法
1. 实验环境
本实验使用C++语言进行编程,选择了Visual Studio作为开发环境,以保证实验结果的准确性和可靠性。
2. 实验步骤
(1)线性查找
线性查找是最简单直接的查找算法,它的原理是从头到尾逐个比较待查找元素和数组中的元素,直到找到目标元素或遍历完整个数组。在实验中,我们随机生成一个包含一定数量元素的有序数组,并使用线性查找算法查找目标元素。(2)二分查找
二分查找是一种高效的查找算法,它基于有序数组的特点,通过不断缩小查找范围来快速定位目标元素。在实验中,我们同样生成一个有序数组,并使用二
分查找算法进行查找操作。
(3)哈希查找
哈希查找是一种基于哈希表的查找算法,它通过将关键字映射到哈希表中的位置来实现快速查找。在实验中,我们使用哈希查找算法对一个包含大量元素的数组进行查找。
四、实验结果与分析
1. 时间复杂度
通过实验数据统计,我们可以得到不同查找算法的平均时间复杂度。线性查找的时间复杂度为O(n),其中n为数组的大小;二分查找的时间复杂度为
O(logn),哈希查找的时间复杂度为O(1)。可以看出,随着数据规模增大,二分查找和哈希查找的效率明显高于线性查找。
湘潭大学 数据结构实验7 实验报告 源代码 查找和排序算法
“数据结构和算法II”课程实验报告
实验名称:查找和排序算法的实现
班级姓名学号实验日期:
实验机时:2 学时实验成绩:
-------------------------------------------------------------------------------
一.实验目的:
掌握有序表、无序表查找的基本思想及存储、运算的实现
熟练掌握常用排序算法的基本思想及实现
深刻理解各种算法的特点,并加以灵活应用
加深对查找和排序的理解,逐步培养解决实际问题的编程能力
加深对图的理解,逐步培养解决实际问题的编程能力实验内容:
(1)基本实验内容:
建立一个无序表并实现其上的顺序查找;建立一个有序表并实现其上的折半查找;
实现插入排序、起泡排序、快速排序和希尔排序的基本算法;
(2)扩展实验内容:
建立二叉排序树并在其上查找指定关键字。
二.程序及注释:
1.顺序查找与二分法查找:
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int status ;
typedef int ElemType ;
typedef struct{
ElemType *elem;
int length,listsize;
}SqList;
《数据结构》第七章查找
7.3 二分法查找
在顺序存储的条件下,若各记录是按其关键字 值的大小依次存放的,则这个查找表称为有序表。
在有序表中可采用二分法查找(或称为折半查 找)的方法进行查找。
假设表中元素为升序排列。
7.3 二分法查找
基本思想:取表的中间记录的关键字值与给定 关键字的值相比较,如果给定值比该记录的关键字 值大,则要查找的记录一定在表的后半部分;若给定 值比该记录的关键字值小,则要查找的记录一定在 表的前半部分。
7.2 顺序查找
成功查找的平均查找长度为(n+1)/2。显然不成功 查找次数为n+1,其时间复杂度均为 O(n)。
顺序查找的优点是:算法简单且适用面广,它对表的 结构无任何要求。无论记录是否按关键字的大小有序,其 算法均可应用,而且上述讨论对线性链表也同样适用。
顺序查找的缺点是:查找效率低,当 n 较大时,不 宜采用顺序查找。
如:关键字序列
99346532 99372242 99387433 99301367 99322817 99338967 99368537 99368532 ......
分析:前3位相同,第8位只可 取2、3、7,因此,这四位不 可取。中间的四位的数字变 化多些,可看成是随机的, 若规定地址取3位,则哈希函 数可取它的第4、5、6位。于 是有:
在一般的情况下,冲突只能尽可能地减少,而不能完 全避免。
实验七 查找技术的编程实现 实验报告
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY Array
数据结构
实验七查找技术的编程实现
【实验目的】
查找技术的编程实现
要求:
查找技术的编程实现(2学时,综合型),掌握查找技术的编程实现,可以实现一种,也可以实现多种。也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】
综合性实验,其综合性体现在本实验的内容具有的实际应用价值,多种数据结构的综合应用,各种具有代表性的算法设计和程序实现。(学时数:2H)
【实验内容】
1.顺序、二分等查找程序设计。
2.鼓励学生实现哈希法等查找程序设计。只要是本章讨论的查找技术都可以作为编程的内容。
3.鼓励将多种方法进行同时编程进行对比。
【注意事项】
1.开发语言:使用C。
2.可以自己增加其他功能。
【实验分析、说明过程】
【思考问题】
【实验小结】 (总结本次实验的重难点及心得、体会、收获)
【附录-实验代码】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
云南大学软件学院数据结构实验报告
(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □
学期:2010秋季学期
任课教师:
实验题目: 查找算法设计与实现
姓名: 王辉
学号: 20091120154
电子邮件:
完成提交时间: 2010 年 12 月 27 日
云南大学软件学院2010学年秋季学期
《数据结构实验》成绩考核表
学号:姓名:本人承担角色:
综合得分:(满分100分)
指导教师:年月日(注:此表在难度为C时使用,每个成员一份。)
(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%)
1 哈希表查找。根据全年级学生的姓名,构造一个哈希表,选择适当的哈希函数和解决冲突的方法,设计并实现插入、删除和查找算法。
熟悉各种查找算法的思想。
2、掌握查找的实现过程。
3、学会在不同情况下运用不同结构和算法求解问题。
4 把每个学生的信息放在结构体中:
typedef struct //记录
{
NA name;
NA tel;
NA add;
}Record;
5 void getin(Record* a)函数依次输入学生信息
6 人名折叠处理,先将用户名进行折叠处理折叠处理后的数,用除留余数法构造哈希函数,并返回模值。并采用二次探测再散列法解决冲突。
7姓名以汉语拼音形式,待填入哈希表的人名约30个,自行设计哈希函数,用线性探测再散列法或链地址法处理冲突;在查找的过程中给出比较的次数。完成按姓名查询的操作。将初始班级的通讯录信息存入文件。
二、【实验设计(Design)】(20%)
(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)
1抽象数据类型的功能规格说明和结构体:
#include
#include
#include
#include
#define MAXSIZE 20 //电话薄记录数量
#define MAX_SIZE 20 //人名的最大长度
#define HASHSIZE 53 //定义表长
#define SUCCESS 1
#define UNSUCCESS -1
#define LEN sizeof(HashTable)
typedef int Status;
typedef char NA[MAX_SIZE];
typedef struct //记录
{
NA name;
NA tel;
NA add;
}Record;
typedef struct //哈希表
{
Record *elem[HASHSIZE]; //数据元素存储基址
int count; //当前数据元素个数
int size; //当前容量
}HashTable;
2 主函数与各子函数的调用关系:(通过switch(num)函数按不同功能要求分别调用相关函数)int main(int argc, char* argv[]){
system("color 61");
int c,flag=1;
HashTable *H;
H=(HashTable*)malloc(LEN);
for(int i=0;i H->elem[i]=NULL; H->size=HASHSIZE; H->count=0; Record a[MAXSIZE]; while (1) { printf("\n ★☆★☆★☆★☆★☆wang hui★☆★☆★☆★☆★☆★☆"); printf("\n ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"); printf("\n ★☆★☆我的未来不是梦★☆★☆"); printf("\n ★☆★☆无聊中郁闷死★☆★☆"); printf("\n ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"); printf("\n ┏━━━━━━━━━━━━━┓"); printf("\n ★┃欢迎欢迎欢迎欢迎欢迎欢迎┃★"); printf("\n 〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒〒"); printf("\n ★★★★★★★哈希表的设计与实现★★★★★★"); printf("\n 【】. 添加用户信息"); printf("\n 【】. 读取所有用户信息"); printf("\n 【】. 以姓名建立哈希表(再哈希法解决冲突) "); printf("\n 【】. 以电话号码建立哈希表(再哈希法解决冲突) "); printf("\n 【】. 查找并显示给定用户名的记录"); printf("\n 【】. 查找并显示给定电话号码的记录"); printf("\n 【】. 清屏"); printf("\n 【】. 保存"); printf("\n 【】. 退出程序"); printf("\n 温馨提示:"); printf("\n Ⅰ.进行操作前请先输出"); printf("\n Ⅱ.进行操作前请先输出"); printf("\n ★★★★★★★〒〒〒〒〒〒〒〒〒★★★★★★"); printf("\n"); printf("请输入一个任务选项>>>"); printf("\n"); int num; scanf("%d",&num); switch(num){ case 1: getin(a); break; case 2: ShowInformation(a); break; case 3: CreateHash1(H,a); /* 以姓名建立哈希表*/ break; case 4: CreateHash2(H,a); /* 以电话号码建立哈希表*/ break;