数据结构实验报告-实验五 查找

实验五   查找

 

实验目的

1、 查找的基本概念

  1. 掌握在数组上进行各种查找的方法和算法。
  2. 深刻理解各种方法的特点,并能灵活运用。
  3. 加深对查找的理解,逐步培养解决实际问题的能力。

实验内容

1、查找的基本概念

(一)基础题

1.编写各种查找方法的基本操作函数:

(1)search1(int *k,int n,int key)无序线性表的顺序查找;

(2)search2(int *k,int n,int key)有序线性表的顺序查找;

(3)bin_search(int *k,int n,int key)二分法查找。

2.调用上述函数实现下列操作:

(1)对于给定的数组E[N]={213,111,222,77,400,300,987,1024,632,555}调用无序线性表的顺序查找函数进行查找;

(2)调用有序线性表的顺序查找函数进行查找;

(3)调用二分法查找函数进行查找。

(二)提高题

【问题描述】采用随机函数产生职工的工号和他所完成产品个数的数据信息,对同一职工多次完成的产品个数进行累计,最后按“职工完成产品数量的名次,该名次每位职工完成的产品数量,同一名次的职工人数和他们的职工号”的格式输出。

【实现要求】输出统计结果,如下所示:

ORDER      QUANTITY    COUNT      NUMBER

1                 375        3            10         20     21

4                 250        2            3           5

6                 200        1             9

7                 150        2             11          14

实验结果

1、查找的基本概念

(一)基础题

(1)画出数据结构基本运算的流程图

 
   

(2)程序运行主要结果截图

(3)程序源代码

#include<stdio.h>

#include<conio.h>

#define N 10

int E[N]={213,111,222,77,400,300,987,1024,632,555};

void s_sort(int e[],int n)/*e:存储线性表的数组;n:线性表的结点个数*/

{

int i,j,k,t;

for(i=0;i<n-1;i++)

{

for(k=i,j=i+1;j<n;j++)

if(e[k]>e[j])

k=j;

if(k!=i)

{

t=e[i];

e[i]=e[k];

e[k]=t;

}

}

}

int search1(int *k,int n,int key) /*无序线性表的顺序查找*/

{

int i;

for(i=0;i<n;i++)

if(key==k[i])

return i;

return -1;

}

int search2(int *k,int n,int key)/*有序线性表的顺序查找*/

{

int i;

for(i=0;i<n&&key>k[i];i++)

if(i<n&&k[i]==key)

return i;

return -1;

}

int bin_search(int *k,int n,int key)/*二分法查找*/

{

int low=0,high=n-1,mid;

while(low<=high)

{

mid=(low+high)/2;

if(key==k[mid])

return mid;

if(key>k[mid])

low=mid+1;

else

high=mid-1;

}

return -1;

}

int  main()

{

int i,j,p;

printf("初始化数据序列为:\n");

for(i=0;i<N;i++)

printf("%d ",E[i]);

printf("\n1.无序表查找\n");

printf("\n输入要查找的关键码: ");

scanf("%d",&i);

if((j=search1(E,N,i))>=0)

printf("找到关键字,位置:%d\n",j+1);

else

printf("找不到!\n");

getch();

printf("\n顺序排序后的数据序列为:\n");

s_sort(E,N);

for(i=0;i<N;i++)

printf("%d ",E[i]);

printf("\n2.有序表查找\n");

printf("\n\n输入要查找的关键字:");

scanf("%d",&i);

if((j=search2(E,N,i))>=0)

printf("找到关键字,位置为:%d\n",j+1);

else

printf("找不到!\n");

getch();

printf("\n3.二分法查找\n");

printf("\n输入要查找的关键字:");

scanf("%d",&i);

if((j=bin_search(E,N,i))>=0)

printf("找到关键字,位置为:%d\n",j+1);

else

printf("找不到\n");

getch();

}

(二)提高题

(1)画出数据结构基本运算的流程图

(2)程序运行主要结果截图

(3)程序源代码

#include<stdio.h>

#include<stdlib.h>

#define MAXQ 5

typedef struct workload

{

int no;

int q;

struct workload *next;

}WL;

void Getdata(int maxno,int *no,int *q)

{

*no=rand()%maxno;

*q=rand()%MAXQ+1;

}

WL *creat_wl(int maxno,int maxrc)

{

int no,q,i;

WL *u,*v,*p,*head;

head=NULL;

for(i=0;i<maxrc;i++)

{

Getdata(maxno,&no,&q);

printf("[%4d]%4d",no,q);

for(v=head;v!=NULL&&v->no!=no;v=v->next)

u=v;

if(v!=NULL)

{

if(v==head)

head=v->next;

else

u->next=v->next;

v->q+=q;

}

else

{

if((v=(WL*)malloc(sizeof(WL)))==NULL)

{

printf("申请空间失败!");

exit(-1);

}

v->no=no;

v->q=q;

}

p=head;

while(p!=NULL&&(p->q<v->q||p->q==v->q&&p->no>no))

{

u=p;

p=p->next;

}

if(p==head)

head=v;

else

u->next=v;

v->next=p;

}

return head;

}

void print_wl(WL *head)

{

int count,order;

WL *u,*v;

printf("order quantity count number\n");

u=head;

order=1;

while(u!=NULL)

{

for(count=1,v=u->next;v!=NULL&&v->q==u->q;v=v->next)

count++;

printf("%4d%9d%6d",order,u->q,count);

order+=count;

for( ;count--!=0;u=u->next)

printf("%4d",u->no);

printf("\n");

}

}

int main()

{

WL *wl,*tmp;

int i,j;

while(1)

{

printf("输入人工数(<1000,>0),工作量记录数(<10000,>0),<=0退出\n");

fflush(stdin);

scanf("%d %d",&i,&j);

if(i<=0||j<=0)

return 0;

if(i>=1000||j>=10000)

continue;

wl=creat_wl(i,j);

print_wl(wl);

while(wl!=NULL){

tmp=wl->next;

free(wl);

wl=tmp;

}

}

}

时间: 2024-10-05 04:09:40

数据结构实验报告-实验五 查找的相关文章

山东大学 机器学习 实验报告 实验2 模式分类 上机练习

[17级的同辈们,这是我实验报告真实且全部的内容,求求求求你们,不要让我后悔提前发布 ╥﹏╥... .真的挺简单的,1天就能搞定,而且在书里的位置我都标注出来了,让我们来一起学习吧!!!( ̄▽ ̄)",当然错了也概不负责哈~~~~] 3.实验内容及说明 使用上面给出的三维数据: 1. 编写程序,对类 1 和类 2 中的 3 个特征 x i 分别求解最大似然估计的均值???和方差?? ?2. 2. 编写程序,处理二维数据的情形??(??)~??(??,??).对类 1 和类 2 中任意两个特征的组合

实验报告 实验2 固件设计

北京电子科技学院(BESTI) 实     验    报     告 课程: 密码系统设计基础                                                               班级: 1352班.1353班 姓名:王玥.刘浩晨                                                                    学号:20135232.20135318 成绩:                      

数据结构实验报告-实验四 图的构造与遍历

实验四   图的构造与遍历   l  实验目的 1.图的的定义和遍历 (1)掌握图的邻接矩阵.邻接表的表示方法. (2)掌握建立图的邻接矩阵的算法. (3)掌握建立图的邻接表的算法. (4)加深对图的理解,逐步培养解决实际问题的能力. l  实验内容 1.图的定义和遍历 (一)基础题 1.编写图基本操作函数: (1)CreateALGraph(ALGraph &G) 建立无向图的邻接表表示: (2)LocateVex(ALGraph &G,char v)图查找信息: (3)DFSTrave

数据结构实验报告-实验一 顺序表、单链表基本操作的实现

实验一    顺序表.单链表基本操作的实现   l  实验目的 1.顺序表 (1)掌握线性表的基本运算. (2)掌握顺序存储的概念,学会对顺序存储数据结构进行操作. (3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力. l  实验内容 1. 顺序表 1.编写线性表基本操作函数: (1)InitList(LIST *L,int ms)初始化线性表: (2)InsertList(LIST *L,int item,int rc)向线性表的指定位置插入元素: (3)DeleteList1

第七周课程总结&amp;实验报告(五)

实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. 掌握创建自定义包的方法. 实验内容 (一)抽象类的使用 设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法. 继承该抽象类定义三角型.矩形.圆. 分别创建一个三角形.矩形.圆存对象,将各类图形的面积输出.注:三角形面积s=sqrt(p*(p-a)*(p-b)*(p-c)) 其

C语言实验报告(五) 两个正整数的最大公约数

编程实现求两个正整数的最大公约数,要求计算最大公约数用函数fun(int a,int b)实现. #include<stdio.h>void main(){  int n,a,b;  int fun(int a,int b);  printf("please input a,b:");  scanf("%d,%d",&a,&b);  n=fun(a,b);  printf("%d,%d的最大公约数为%d",a,b,n)

第七周实验报告(五)&amp;周总结

(一)抽象类的使用 题目:设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法. 继承该抽象类定义三角型.矩形.圆. 分别创建一个三角形.矩形.圆存对象,将各类图形的面积输出.注:三角形面积s=sqrt(p*(p-a)*(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2 抽象类-形状 1 package com.itcast.atd.demo06; 2 3 public abstract class Shape { 4 private String t

数据机构实验报告-实验三 二叉树基本操作的实现

实验三   二叉树基本操作的实现   l  实验目的 1.二叉树的基本操作 (1)掌握二叉树链表的结构和二叉排序树的建立过程. (2)掌握二叉树排序树的插入和删除操作. (3)加深对二叉树的理解,逐步培养解决实际问题的编程能力. 2.树的遍历和哈夫曼树 (1)掌握用递归方法实现二叉树遍历的操作. (2)掌握用非递归方法实现二叉树遍历的操作. (3)掌握建立Huffman树的操作. (4)加深对二叉树的理解,逐步培养解决实际问题的编程能力. l  实验内容 1.二叉树的基本操作 (一)基础题 (1

JAVA课程实验报告 实验二 JAVA面向对象程序设计

课程:Java程序设计  班级:1352  姓名:黄伟业  学号:20135315 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习程度:         实验时间:15:50--20:50 仪器组次:         必修/选修: 选修            实验序号:2 实验目的: 1.掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了