查找算法的实现的实验报告

时间:2024.3.31

                                     

班级        学号            姓名        实验组别            

试验日期          室温              报告日期           成绩               

报告内容:(目的和要求、原理、步骤、数据、计算、小结等)

实验名称:查找算法的实现

实验目的:

1.  掌握顺序表上查找的实现及监视哨的作用。

2.  掌握折半查找所需的条件,折半查找的过程和实现方法。

3.  掌握二叉顺序树的创建过程,掌握二叉顺序树查找过程的实现。

4.  掌握哈希表的基本概念,熟悉哈希函数的选择方法,掌握使用线性探测法和链地址法进行冲突解决的方法

实验环境(硬/软件要求):

Windows 2000, Visual C++ 6.0

实验内容:

通过具体算法程序,进一步加深对各种查找方法的掌握,以及对实际应用中问题解决方法的掌握。

各查找算法的输入序列为:26 5 37 1 61  11 59 15 48 19.

输出要求:查找关键字37,给出查找结果。

实验要求

1.顺序查找

首先从键盘输入一个数据序列生成一个顺序表,然后从键盘上任意输入一个值,在顺序表中进行查找。

【C语言源程序】

#include<stdio.h>

#define MAX 100

typedef int keytype;

typedef struct

{  keytype key;

}elemtype;

typedef struct

{  elemtype elem[MAX+1];

   int length;

}SStable;

void create_seq(SStable *list);

int seq_search(SStable *list,keytype k);

void main()                //主函数

{  SStable *list,table;

   keytype key;

   int i;

   list=&table;

   printf("请输入顺序表的长度:");

   scanf("%d",&list->length);

   create_seq(list);

   printf("创建的顺序表内容:\n");

   for(i=0;i<list->length;i++)

            printf("list.elem[%d].key=%d\n",i+1,list->elem[i].key);

   printf("输入查找关键字:");

   scanf("%d",&key);

   seq_search(list,key);

}

void create_seq(SStable *list)         //创建顺序表list的函数

{  int i;

   printf("请输入顺序表的内容:\n");

   for(i=0;i<list->length;i++)

   {  printf("list.elem[%d].key=",i+1);

      scanf("%d",&list->elem[i].key);

   }

}

int seq_search(SStable *list,keytype k)      //在顺序表中查找给定的k值

{  int i=0,flag=0;

   while(i<list->length)

  {  if(list->elem[i].key==k)

   {  printf("查找成功.\n");

      flag=1;

           printf("list.elem[%d].key=%d\n",i+1,k);

   }

   i++;

  }

if(flag==0)

   printf("没有找到数据%d!\n",k);

return(flag);

}

2.折半查找

任意输入一组数据作为个数据元素的键值,首先将此序列进行排序,然后在该有序表上进行折半查找算法进行对给定值key的查找。

【C语言源程序】

#include<stdio.h>

#define MAX 100

typedef struct

{  int elem[MAX+1];

   int length;

}Stable;

void creat_seq(Stable *list);

int sort_seq(Stable *list);

int bin_search(Stable *list,int k,int low,int high);

void main()

{  Stable *list,table;

   int i,key;

   list=&table;

   printf("请输入线性表的长度:");

   scanf("%d",&list->length);

   creat_seq(list);

   sort_seq(list);

   printf("排序后的数据\n");

   for(i=1;i<=list->length;i++)

            printf("list.elem[%d].key=%d\n",i,list->elem[i]);

   printf("\n请输入查找的值:");

   scanf("%d",&key);

   bin_search(list,key,1,list->length);

}

void creat_seq(Stable *list)

{  int i;

   printf("请输入顺序表的内容:\n");

   for(i=1;i<=list->length;i++)

   {  printf("list.elem[%d].key=",i);

      scanf("%d",&list->elem[i]);

   }

}

int sort_seq(Stable *list)       //冒泡法排序

{  int i,j,flag;

   for(i=1;i<list->length;i++)

   {  flag=0;

      for(j=1;j<list->length-i+1;j++)

                     if(list->elem[j]>list->elem[j+1])

                     {  list->elem[0]=list->elem[j+1];

             list->elem[j+1]=list->elem[j];

             list->elem[j]=list->elem[0];

                             flag=1;

                     }

                     if(flag==0)return 1;

   }

}

int bin_search(Stable *list,int k,int low,int high)    //折半查找法的递归函数

{  int mid;

   if(low>high)

   {  printf("没有找到要查找的值\n");

      return(0);

   }

   mid=(low+high)/2;

   if(list->elem[mid]==k)

   {  printf("查找成功\n");

      printf("list[%d]=%d\n",mid,k);

           return(mid);

   }

   else

            if(list->elem[mid]<k)

                      return(bin_search(list,k,mid+1,high));

            else

           return(bin_search(list,k,low,mid-1));

3.二叉树查找

任意输入一组数据作为二叉排序树中结点的键值,首先创建一颗二叉排序树,然后在此二叉排序树上实现对给定值K的查找过程。

【C语言源程序】

#include<stdio.h>

#include <stdlib.h>

typedef struct bitnode

{

    int key;

         struct bitnode *lchild;

         struct bitnode *rchild;

} bnode;

void ins_bitree(bnode *p,int k)

{

     bnode *q;

          if(p->key>k&&p->lchild)

                    ins_bitree(p->lchild,k);

          else

         if(p->key<=k&&p->rchild)

                   ins_bitree(p->rchild,k);

         else

         {

            q=(bnode*)malloc(sizeof(bnode));

            q->key=k;

            q->lchild=NULL;

            q->rchild=NULL;

            if(p->key>k)

                      p->lchild=q;

            else

                      p->rchild=q;

         }

}

    void bit_search(bnode *p,int k)

         {

           if(p->key>k&&p->lchild)

                     bit_search(p->lchild,k);

           else

                    if(p->key<k&&p->rchild)

                             bit_search(p->rchild,k);

                    else

                             if(p->key==k)

                                      printf("查找成功!\n");

                             else

                                      printf("%d不存在\n",k);

         }

void inorder(bnode *p)

{

   if(p)

           {

            inorder(p->lchild);

            printf("%4d",p->key);

            inorder(p->rchild);}

}

void main()

{

  int k;

  bnode *p;

  p=NULL;

  printf("请输入二叉树节点的值,输入0结束:\n");

  scanf("%d",&k);

  p=(bnode*)malloc(sizeof(bnode));

  p->key=k;

  p->lchild=NULL;

  p->rchild=NULL;

  scanf("%d",&k);

  while(k>0)

  {

    ins_bitree(p,k);

         scanf("%d",&k);}

         printf("\n");

         printf("二叉树排序结果\n");

         inorder(p);

         printf("\n请直接输入查找的值\n");

         scanf("%d",&k);

         bit_search(p,k);

 

}

4.哈夫曼查找

任意输入一组数据作为各元素的键值,哈希函数为Hash(key)=key%11,用线性探测再散列法解决冲突问题。

【C语言源程序】

#include<stdio.h>

#define MAX 11

void ins_hash(int hash[],int key)

{

         int k,k1,k2;

         k=key%MAX;

         if(hash[k]==0)

         {

                   hash[k]=key;

                   return;

         }

         else

         {

                   k1=k+1;

                   while(k1<MAX&&hash[k1]!=0)

                            k1++;

                   if(k1<MAX)

                   {

                            hash[k1]=key;

                            return;

                   }

                   k2=0;

                   while(k2<k&&hash[k2]!=0)

                            k2++;

                   if(k2<k)

                   {

                            hash[k2]=key;

                            return;

                   }

         }

}

void out_hash(int hash[])

{

         int i;

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

                   if(hash[i])

                            printf("hash[%d]=%d\n",i,hash[i]);

}

void hash_search(int hash[],int key)

{

         int k,k1,k2,flag=0;

         k=key%MAX;

         if(hash[k]==key)

         {

                   printf("hash[%d]=%d",k,key);

                   flag=1;

         }

         else

         {

                   k1=k+1;

                   while(k1<MAX&&hash[k1]!=key)

                            k1++;

                   if(k1<MAX)

                   {

                            printf("hash[%d]=%d",k1,key);

                            flag=1;

                   }

                   k2=0;

                   if(!flag)

                   {

                            while(k2<k&&hash[k2]!=key)

                                     k2++;

                            if(k2<k)

                            {

                                     printf("hash[%d]=%d",k2,key);

                                     flag=1;

                            }

                   }

                   if(flag)

                   {

                            printf("查找成功!\n");

                            return;

                   }

                   else

                   {

                            printf("查找失败!\n");

                            return;

                   }

         }

}

void main()

{

         int i,key,k,sum=0;

         int hash[MAX];

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

                   hash[i]=0;

         printf("请输入数据,以0结束:\n");

         scanf("%d",&key);

         sum++;

         while(key&&sum<MAX)

         {

                   ins_hash(hash,key);

                   scanf("%d",&key);

                   sum++;

         }

         printf("\n");

         out_hash(hash);

         printf("\n");

         printf("请输入查找的值:");

         scanf("%d",&k);

         hash_search(hash,k);

         printf("\n");

}


第二篇:实验报告——实验1:处理机调度算法的实现


 


天津理工大学

计算机与通信工程学院

实验报告

20##    2011  学年       学期


附录(可包括源程序清单或其它说明)

更多相关推荐:
查找实验报告

实验报告姓课程名称:院(系专业/年级:

查找排序实验报告

实验十查找排序计算机学院12级2班1211020xx李龙实验目的1掌握折半查找算法的思想2实现折半查找的算法3掌握常见的排序算法插入排序交换排序选择排序等的思想特点及其适用条件4能够分析各种算法的效率5熟练的掌...

排序查找实验报告

实验五查找与排序实验课程名数据结构与算法专业班级12级软件工程1班学号20xx40450149姓名刘浩实验时间61462134节实验地点K4201指导教师邓丹君

实验报告_排序与查找

电子科技大学信息与软件工程学院实验报告电子科技大学实验报告课程名称学生姓名学号点名序号指导教师实验地点实验时间20xx20xx2学期信息与软件工程学院第1页电子科技大学信息与软件工程学院实验报告实验报告二学生姓...

数据结构查找实验报告

实验题91设计一个程序exp91cpp输出在顺序表36210185749中采用顺序方法找关键字5的过程程序如下文件名exp91cppincludeltstdiohgtdefineMAXL100typedefin...

查找与排序实验报告

实验四查找与排序实验目的1掌握顺序查找算法的实现2掌握折半查找算法的实现实验内容1编写顺序查找程序对以下数据查找37所在的位置5131921375664758088922编写折半查找程序对以下数据查找37所在的...

实验七 查找技术的编程实现 实验报告

HUBEIUNIVERSITYOFAUTOMOTIVETECHNOLOGY数据结构实验七查找技术的编程实现实验目的查找技术的编程实现要求查找技术的编程实现2学时综合型掌握查找技术的编程实现可以实现一种也可以实现...

实验16:哈希查找实验报告

深圳大学实验报告课程名称学院计算机与软件学院班级实验时间实验报告提交时间教务处制一实验目的1掌握哈希查找算法的基本思想2掌握哈希查找表的构造方法3掌握链表法解决冲突的方法4掌握哈希查找的时间性能二实验要求1熟悉...

实验十 查找技术验证实验报告

特殊线性表班级计算机111学号姓名成绩实验十查找技术验证实验一实验目的1掌握折半查找算法的基本思想2掌握折半查找算法的实现方法3掌握折半查找算法的时间性能4掌握二叉排序树定义和特性5掌握二叉排序树的建立方法6实...

静态查找表实验报告

1题目采用长整型整型字符型为元素类型和顺序存储为存储结构实现抽象数据类型静态查找表软件环境为VisualC20xxExpress2抽象数据类型定义以及各基本操作的简要描述ADTStaticSearchTable...

数据结构之顺序查找实验报告--郭治民

深圳大学实验报告课程名称学院计算机与软件学院班级实验时间实验报告提交时间教务部制注1报告内的项目或内容设置可根据实际情况加以调整和补充2教师批改学生实验报告时间应在学生提交实验报告时间后10日内

数据库数据查询实验报告

数据库应用设计实验报告实验名称实验3数据查询实验类型验证型实验实验环境指导教师专业班级计科0802班姓名学号联系电话电子邮件实验地点实验日期20xx年4月13日实验报告日期20xx年4月17日成绩一实验目的掌握...

查找实验报告(42篇)