《数据结构》查找 实验报告格式

合集下载

数据结构查找排序实验报告

数据结构查找排序实验报告

贵州大学实验报告学院:电子信息学院专业:通信工程班级:2012级1班姓名学号实验组实验时间2014.5.15 指导教师成绩实验项目名称查找排序实验目的和要求1、掌握常用的查找、排序方法,及相应的算法实现。

2、能实现并应用某一种查找算法。

理解各种排序方法的特点,并能加以灵活应用。

3、了解各种排序算法的时间复杂度分析。

实验原理1、根据实验内容编程,上机调试、得出正确的运行程序。

2、编译运行程序,观察运行情况和输出结果。

实验仪器运行Visual c++的微机一台实验内容和步骤1、查找相关实验内容及步骤。

①建立顺序存储结构,构建一个顺序表,实现顺序查找算法。

typedef struct {ElemType *elem; //数据元素存储空间基址,建表时按实际长度分配,号单元留空int length; //表的长度} SSTable;②对顺序表先排序后,实现行二分法查找相关操作。

③定义二叉树节点,根据节点的值进行查找,并且实现节点的插入,删除等操作。

typedef struct BiTnode { //定义二叉树节点int data; //节点的值struct BiTnode *lchild,*rchild;}BiTnode,*BiTree;④定义哈希表以及要查找的节点元素,创建哈希表,实现其相关查找操作。

typedef struct {int num;} Elemtype; //定义查找的结点元素typedef struct {Elemtype *elem; //数据元素存储基址int count; //数据元素个数int sizeindex;}HashTable;//定义哈希表。

2. 排序相关实验内容及步骤。

①定义记录类型。

typedef struct{int key; //关键字项}RecType;②实现直接插入排序:每次将一个待排序的记录,按其关键字大小插入到前面已排序好的子文件中的适当位置,直到全部记录插入完成为止。

数据结构中查找和排序算法实验报告

数据结构中查找和排序算法实验报告
ST.elme[0].key=key;
for(i=ST.length; !EQ(ST.elem[i].key,key); --i);
return i;
}
3.归并排序算法描述如下:
merge(ListType r,int l,int m,int n,ListType &r2)
{
i=l;j=m+1;k=l-1;
sift(ListType &r,int k,int m)
{
i=k;j=2*i;x=r[k].key;finished=FALSE;
t=r[k];
while((j<=m)&&(!finished))
{
if ((j<m)&&(r[j].key>r[j+1].key)) j++;
if (x<=r[j].key)
将两个或两个以上的有序表组合成一个新的有序表的方法叫归并。
假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,如此重复。
4.堆排序分析:
只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。
什么是堆?n个元素的序列{k1,k2,...,kn}当且仅当满足下列关系时,称之为堆。关系一:ki<=k2i关系二:ki<=k2i+1(i=1,2,...,n/2)
静态查找表的顺序存储结构:
typedef struct {ElemType *e源自em;int length;
}SSTable;
顺序查找:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,查找不成功。

《数据结构》项目实验报告格式

《数据结构》项目实验报告格式

《***》项目实验报告1、实验名称2、小组成员3、主要内容和步骤:(1)分析问题描述,明确问题目标[问题描述] 1976年。

美国科学家APPEL和HAKEN利用计算机证明了:对一张地图,可以用不超过4种颜色对其填色,使得相邻的区域填上不同的颜色。

要求输入一张行政区地图,用4种颜色对其填色,要求相邻的行政区域内没有相同的颜色,给出所有的填色方案,并统计方案的个数。

(2)分析问题数据描述[数据描述] 首先考虑如何存储行政区域图,由于邻接矩阵能更好地描述各行政区之间的关系,所以采用邻接矩阵G来存储地图。

G[I,J]=1表示I,J两个行政区相邻,为0表示不相邻可采用二维数组来表示邻接矩阵G;另外设一数级COLOR[I]记录各行政区域所填颜色,分别取值为{1(红色),2(黄色),3(蓝色),4(绿色)};数据描述如下:INT G[N][N];//存储地图INT COLOR[N+1];//存储地图各行政区颜色(3)确定算法思路,准确描述算法[算法描述] 对每一个行政区试填一种颜色,确定其合法性,如合法则填下一行政区,如非法则填下一种颜色,如4种颜色均填完仍不合法,则回到上一结点填另一种颜色。

COLOR[0..N-1]=0;选择第一个行政区为首先处理区域;DO{将当前区域顺序向后填一种颜色;IF (所填颜色合法){ 当前区域确定了所填颜色;IF (当前区域是最后一个区域){打印一种填色方案;IF (所填颜色是第4种颜色)回溯到上一个结点继续填色;} ELSE选择下一个行政区作为处理区域;}ELSEIF (所填颜色是第4种颜色)回溯到上一个结点继续填色;} WHILE (所有的方案全部确定)(4)运行数据记录略(5)实验效果图示略(6)实验总结:(心得体会、处理结果、存在的问题、建议和意见等)略。

(最新版)数据结构实验报告格式

(最新版)数据结构实验报告格式

《数据结构课程实验》大纲一、《数据结构课程实验》的地位与作用“数据结构”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。

本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了性能分析和比较,内容非常丰富。

本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。

由于以下原因,使得掌握这门课程具有较大的难度:(1)内容丰富,学习量大,给学习带来困难;(2)贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点;(3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度;(4)隐含在各部分的技术和方法丰富,也是学习的重点和难点。

根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。

通过实验实践内容的训练,突出构造性思维训练的特征, 目的是提高学生组织数据及编写大型程序的能力。

实验学时为18。

二、《数据结构课程实验》的目的和要求不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。

实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。

为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。

数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。

在掌握基本算法的基础上,掌握分析、解决实际问题的能力。

三、《数据结构课程实验》内容课程实验共18学时,要求完成以下六个题目:实习一约瑟夫环问题(2学时)用循环链表实现约瑟夫环问题,熟悉链表结构的使用。

数据结构与算法实验报告5-查找与排序

数据结构与算法实验报告5-查找与排序

北京物资学院信息学院实验报告
课程名_数据结构与算法
实验名称查找与排序
实验日期年月日实验报告日期年月日姓名______ ___ 班级_____ ________ 学号___
一、实验目的
1.掌握线性表查找的方法;
2.了解树表查找思想;
3.掌握散列表查找的方法.
4.掌握插入排序、交换排序和选择排序的思想和方法;
二、实验内容
查找部分
1.实现顺序查找的两个算法(P307), 可以完成对顺序表的查找操作, 并根据查到和未查到两种情况输出结果;
2.实现对有序表的二分查找;
3.实现散列查找算法(链接法),应能够解决冲突;
排序部分
4.分别实现直接插入排序、直接选择排序、冒泡排序和快速排序算法
三、实验地点与环境
3.1 实验地点
3.2实验环境
(操作系统、C语言环境)
四、实验步骤
(描述实验步骤及中间的结果或现象。

在实验中做了什么事情, 怎么做的, 发生的现象和中间结果, 给出关键函数和主函数中的关键段落)
五、实验结果
六、总结
(说明实验过程中遇到的问题及解决办法;个人的收获;未解决的问题等)。

数据结构实验报告—搜索结构

数据结构实验报告—搜索结构

《算法与数据结构》课程实验报告一、实验目的应用线性结构、树形结构实现搜索结构。

二、实验内容及要求1、有序顺序表的折半搜索(1)随机产生1000个整数(要求互不相同)存储于顺序表中(2)将顺序表变为有序顺序表(3)使用折半搜索方法实现搜索,计算平均搜索长度的2、二叉搜索树的查找(1)使用二叉链表创建二叉搜索树,数据元素仍使用随机数(1000个)(2)实现二叉树的插入、删除算法(3)实现搜索算法,计算平均搜索长度的值三、系统分析(1)数据方面:该实验在实现线性结构、树形结构实现搜索结构时采用数据均为整型,并约定-1为结束标识符。

在此基础上进行搜索相关操作。

(2)功能方面:针对线性结构、树形结构实现不同功能,包括以下几点:1、顺序表的搜索(1)能够实现产生指定数量、指定数据大小范围的不同的整形随机数。

(2)能够对所产生数据通过冒泡排序法进行排序。

(3)能够对顺序表数据利用顺序搜索进行搜索。

(4)能够利用迭代法、递归法两种不同方法进行折半搜索。

2、二叉搜索树的搜索(1)能够实现产生指定数量、指定数据大小范围的不同的整形随机数。

(2)能够对所产生数据建立二叉搜索树。

(3)能够对二叉搜索树前序遍历输出。

(4)能够在建立二叉搜索树基础上插入数据。

(5)能够在建立二叉搜索树基础上删除数据。

(6)能够在建立二叉搜索树基础上搜索数据。

(7)能够计算二叉搜索树平均检索长度(ASL)。

四、系统设计(1)设计的主要思路线性结构与树形结构在之前的实验中都有所完成,故基于这两种存储结构的搜索结构只需实现实验要求的顺序搜索、折半搜索、计算平均检索长度即可。

由于涉及两种结构的搜索实现,故分别设计两个菜单实现两种不同的搜索结构。

(2)数据结构的设计线性结构实现搜索结构,即将数据对象放于数组中,利用数组元素的下标作为数据对象的存放地址。

搜索算法根据给定需要搜索的数值,在数组中进行搜索。

直到找到该数值在数组中存放的位置或可确定数值不存在于数组中。

数据结构实验报告七查找

云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □序号学号姓名成绩123指导教师(签名)学期: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<stdio.h>#include<stdlib.h>#include<string>#include <windows.h>#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<HASHSIZE;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;case 5:c=0;SearchHash1(H,c);break;case 6:c=0;SearchHash2(H,c);break;case 7:Cls(a);break;case 8:Save();break;case 9:return 0;break;default:printf("你输错了,请重新输入!");printf("\n");}}system("pause");return 0;}三、【实现描述(Implement)】(30%)(本部分应包括:抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。

数据结构实验报告-查找算法

《数据结构》第八次实验报告学生姓名学生班级学生学号指导老师重庆邮电大学计算机学院一、实验内容1) 有序表的二分查找建立有序表,然后进行二分查找2) 二叉排序树的查找建立二叉排序树,然后查找二、需求分析二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x 做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.时间复杂度无非就是while循环的次数!总共有n个元素,渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数由于你n/2^k取整后>=1即令n/2^k=1可得k=log2n,(是以2为底,n的对数)所以时间复杂度可以表示O()=O(logn)下面提供一段二分查找实现的伪代码:BinarySearch(max,min,des)mid-<(max+min)/2while(min<=max)mid=(min+max)/2if mid=des thenreturn midelseif mid >des thenmax=mid-1elsemin=mid+1return max折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。

它的基本思想是,将n 个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。

如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。

如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。

三、概要设计1、顺序查找,在顺序表R[0..n-1]中查找关键字为k的记录,成功时返回找到的记录位置,失败时返回-1,具体的算法如下所示:int SeqSearch(SeqList R,int n,KeyType k){int i=0;while(i<n&&R[i].key!=k){printf("%d",R[i].key);i++;}if(i>=n)return -1;else{printf("%d",R[i].key);return i;}}2、二分查找,在有序表R[0..n-1]中进行二分查找,成功时返回记录的位置,失败时返回-1,具体的算法如下:int BinSearch(SeqList R,int n,KeyType k){int low=0,high=n-1,mid,count=0;while(low<=high){mid=(low+high)/2;printf("第%d次查找:在[ %d ,%d]中找到元素R[%d]:%d\n ",++count,low,high,mid,R[mid].key);if(R[mid].key==k)return mid;if(R[mid].key>k)high=mid-1;elselow=mid+1;}return -1;}四、详细设计源代码:#include<stdio.h>#include<stdlib.h>static int a[1024],count=0;void Find1(int low,int high,int x){int mid;if(low<=high){mid=(low+high)/2;count++;if(a[mid]>x)Find1(low,mid-1,x);else if(a[mid]<x)Find1(mid+1,high,x);else printf("\n查é找ò到?元a素?位?置?为a%d,?查é找ò次?数簓为a%d。

数据结构实验报告——查找与排序

哈尔滨工业大学(深圳)数据结构实验报告查找与排序学院: 计算机科学与技术一、问题分析此题是一道排序问题,排序的方法有很多种,此题我用的是堆排序,这是一种不稳定排序,但时间复杂度较低,比较快。

计算机首先需要把文件中的数据读入内存中,用动态数组存储数据,然后建立数据结构,然后建立堆,比较子节点和父节点大小,降序排列,之后互换头结点与尾节点,再递归重复即可。

查找的话,依次查找对比即可。

二、详细设计2.1 设计思想将股票的代码,交易日期,及开盘价等信息分别用不同的动态数组存储起来。

因为要根据交易量的降序进行排序所以应将交易量的信息另外用一个float型的数组保存起来便于比较。

排序:使用一个下标数组用来模拟交易量的堆排序,将下标数组进行降序排序。

再根据下标数组里的值将股票信息保存在新的文件中。

查看:因为录入文件时是先把股票的代码相同的信息存入数组的。

所以查找时比较股票的代码,找到该代码后比较交易日期。

最后输出交易量。

2.2 存储结构及操作(1) 存储结构(一般为自定义的数据类型,比如单链表,栈等。

)vector<string> a;//股票代码vector<string> b;//股票交易日期vector<string> c;//股票开盘价_最高价_最低价_收盘价vector<float> d;//将交易量转换为float用于比较不过有的会被舍去vector<string> e;//交易量的原始数据用于输出到排序的文件中(2)涉及的操作(一般为自定义函数,可不写过程,但要注明该函数的含义。

)read_file() 将文件信息分别保存在上述存储结构中HeapAdjust(vector<long>& x,long s,long n) 小顶堆的调整函数HeapSort() 用堆排序进行交易量的降序排序并存储在指定文件中serach() 查找某交易日期某股票的交易量2.3 程序整体流程开始 A读入文件,存入数组 B排序 C查找 D结束 E2.堆排序示意图(由于堆排序描述时需要具体数据,所以只弄到示意图)三、用户手册1>将股票文件先存入指定文件夹中,根据提示输入文件名字按回车即可2>先在指定文件夹新建你要保存的文件后将文件的名字输入3>根据提示输入股票代码及交易日期,以空格隔开。

数据结构bst的构建与查找实验报告参考模板

HUNAN UNIVERSITY 课程实验报告题目:BST的构建与查找学生姓名:学生学号:专业班级:指导老师:李晓鸿老师完成日期:2014年11月22号一.需求分析输入形式在该程序中,用户需要输入节点个数和节点数据以及查找的节点,节点数据间使用空格隔开,当用户输入有误时提示用户输入错误并重新输入。

具体格式如下:请输入节点个数:请依次节点数据:请输入需查找的节点:输出形式若用户需查找的节点查找成功,则输出查找成功以及比较的次数,若查找不成功则输入查找失败,具体格式如下:查找成功,比较次数为__查找失败, 比较次数为__程序功能该程序可以通过使用二叉链表构建一个BST,并实现BST内节点的插入和查找功能测试数据1.请输入节点个数:8请依次节点数据:12,4,35,78,56,34,89,0请输入需查找的节点:89查找成功,比较次数为32.请输入节点个数:8请依次节点数据:12,4,35,78,56,34,89,0请输入需查找的节点:678查找失败,比较次数为33.请输入节点个数:c输入有误请重新输入4. 请输入节点个数:8请依次节点数据:12,4,35,78,56,&,89.3,A输入有误,请重新输入二.概要设计抽象数据类型1.在本程序中,需要对插入的节点进行检索,而BST的插入和检索的速率都是很高的,所以我们选用构建BST的方法来解决这项问题;2.由用户输入的节点个数及节点数据均为正整数,可使用整型数据进行存储,并构建一个BST存储这些节点数据;3.为了节约空间,使用二叉链表实现BST;4.为了能查询表中数据,定义一个二叉树节点类,其ADT设计如下:数据类型:整型数据数据关系:二叉树所对应的数据关系基本操作:int val() ; //返回结点的数值void setLeft(Node* ) ; //设置左结点void setRight(Node* ); //设置右结点Node* left()const; //返回左结点Node* right()const ;//返回右结点4.为了存储这些数据,构建一个二叉查找树,其ADT设计如下:数据类型:整型数据数据关系:二叉树所对应的数据关系基本操作:void clear();//初始化操作bool insert(const Elem&);//插入元素的操作bool find(const Elem&)const;//查找元素的操作算法基本思想该算法主要包括表的构建和查询两项:①在表的构建上,通过用户输入的数据,将第一个输入的节点数据存入根节点中,从第二个节点元素开始,与根节点数据进行比较,如果该元素大于根节点的值,则与根节点的右子节点相比较,若右子节点为空,则将该元素存入这个节点,若不为空,则将该右子节点视为根节点,重复上述步骤。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河南工业大学实验报告
课程 数据结构 _ 实验名称 实验五: 查找
院 系___________________ 专业班级__ ____ 实验地点

姓 名__________ 学 号____________ 实验时间
指导老师 王云侠 实验成绩 批改日期
一. 实验目的
1. 熟悉静态查找的相关算法
二. 实验内容及要求
1. 实现顺序表的查找算法
2. 实现有序表的折半查找算法
三. 实验过程及结果
实验过程:
源程序:
1、 顺序查找:
#include
#define MAX_SIZE 100

typedef struct{
int key;
}element;

element list[MAX_SIZE];
int seqsearch(element list[],int searchnum,int num);

int main()
{
int i,num,searchnum,k;
printf("请输入元素的个数:");
scanf("%d",&num);
printf("请输入元素:\n");
for(i=0;i{
scanf("%d",&list[i].key);
}
while(1)
{
printf("请输入要查询的数据元素:");
scanf("%d",&searchnum);
k=seqsearch(list,searchnum,num);
if(k!=-1)
{
printf("所查询元素的下标为:");
printf("%d\n",k);
}
else
printf("查询元素不存在。\n");
}
return 0;
}

int seqsearch(element list[],int searchnum,int num)
{
int j;
list[num].key=searchnum;
for(j=0;list[j].key!=searchnum;j++)
;
return j}

2、 折半查找:
#include
#define MAX_SIZE 100
#define COMPARE(a,b) (a)>(b)?1:(a)==(b)?0:-1
typedef struct{
int key;
}element;
element list[MAX_SIZE];

int binsearch(element list[],int searchnum,int num);
int main()
{
int i,num,searchnum,k;
printf("请输入元素的个数:");
scanf("%d",&num);
printf("请输入元素:\n");
for(i=0;i{
scanf("%d",&list[i].key);
}
while(1)
{
printf("请输入要查询的数据元素:");
scanf("%d",&searchnum);
k=binsearch(list,searchnum,num);
if(k!=-1)
{
printf("所查询元素的下标为:");
printf("%d\n",k);
}
else
printf("查询元素不存在。\n");
}

return 0;
}

int binsearch(element list[],int searchnum,int num)
{
int left=0,right=num-1,middle;
while(left<=right)
{
middle=(left+right)/2;

switch(COMPARE(list[middle].key,searchnum))
{
case 1:right=middle-1;break;
case 0:return middle;
case -1:left=middle+1;
}
}
return -1;
}

实验结果:

四. 实验中的问题及心得
通过上机练习,我收获了很多,尤其是老师的耐心讲解让我受益颇深。经过这次实
验,加深了我对查找表的认识。但是,实验中也出现了问题,首先程序循环不能良好退
出,操作时经常出错。相信经过以后的学习我能解决这些问题。

相关文档
最新文档