顺序查找,二分查找

实验目的:

①  .顺序表的建立

②  顺序表的顺序查询

③  顺序表的折半查找

实验步骤:

1.                 结构体的建立

#include<STdio.h>

#include<math.h>

#include<STdlib.h>

#include<malloc.h>

 

#defineOK 1

#defineFALSE 0

#defineTRUE 1

#defineERROR 0

#defineINFEASIBLE -1

#defineOVERFLOw -2

 

typedefchar Elemtype;

typedefint status;

typedefint Keytype;

#defineMAXSIZE 100

typedefstruct

{

  Elemtype STrings[10];

  Keytype key;

}message;

 

typedefstruct

{

   message elem[MAXSIZE];

   int length;

}SSTable;

 

 

2.              函数的声明

statusInsert_Seq(SSTable &ST,int n)

{

  int i;

  ST.length=n;

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

  {

 printf("输入第%d个元素的序号:",i);

 scanf("%d",&ST.elem[i].key);

 

 printf("输入第%d个元素:",i);  //限制在十个字符以内

 scanf("%s",&ST.elem[i].STrings);

  }

  return OK;

}

 

 

 

intSearch_Seq(SSTable ST,int key)

{

   ST.elem[0].key=key;

   int i;

   for(i=ST.length;;i--)

   {

        printf("ST.elem[i].key的值%d\n",ST.elem[i].key);

      if(ST.elem[i].key==key)

        break;

   }

   printf("找到的值%d",i);

   return i;

}

 

intSearch_Bin(SSTable ST,int key)

{

    int low,high,mid;

    low=1;

    high=ST.length;

    while(low<=high)

    {

        mid=(low+high)/2;

        if(ST.elem[mid].key==key)

            return mid;

        else if(ST.elem[mid].key>key)

            high=mid-1;

        else

            low=mid+1;

    }

return 0;

}

 

3.             主函数的建立

int main(int argc, char* argv[])

{

SSTableST;

intsum,m;

   printf("输入你想要的输入的长度为:\n");

   scanf("%d",&sum);

printf("输入数据:\n");

   Insert_Seq(ST,sum);

   printf("<---------------------顺序查找------------------------------>\n");

printf("输入你想要输入的数据:");

scanf("%d",&m);

   int n;

n=Search_Seq(ST,m);

if(n==0)

     printf("没有与输入的数相符的数据\n");

else

{

     printf("相同数据对应的名称为%d\n",n);

  printf("数据对应的数据为:%s",ST.elem[n].STrings);

   printf("\n");

}

    printf("<---------------------折半查找------------------------------>\n");

    int l;

    printf("输入你想要查找的数据:");

    scanf("%d",&l);

    n=Search_Bin(ST,l);

if(n==0)

     printf("没有与输入的数相符的数据\n");

else

{

     printf("相同数据对应的名称为%d\n",n);

  printf("数据对应的数据为:%s",ST.elem[n].STrings);

}

 

       printf("\n<---------------------数据输出------------------------------>\n");

inti;

for(i=1;i<=ST.length;i++)

{

     printf("第%d个元素:%d\n",i,ST.elem[i].key);

     printf("输出第%d元素的数据:%s\n",i,ST.elem[i].STrings);

}

system("pause");

return0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StriveZs

用爱发电

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值