码迷,mamicode.com
首页 > 其他好文 > 详细

顺序查找和折半查找

时间:2019-08-29 23:40:08      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:scanf   bsp   break   bre   arch   线性   bin   table   eof   

顺序查找可以是线性表也可以是链表,同是既可以是有序的也可以是无序。

折半查找仅适用于有序的线性表

#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct{
    ElemType *elem;
    int TableLen;
}SSTable;//表的数据结构
void CreatSS(SSTable *st){
    printf("表的长度:");
    scanf("%d",&st->TableLen);
    st->elem=(ElemType*)malloc(st->TableLen*sizeof(ElemType));
    ElemType *p=st->elem;
    printf("输入数据:");
    for(int i=0;i<st->TableLen;i++){
        scanf("%d",p);
        p=p+1;
    }
}//创建线性表
void PrintSS(SSTable *st){
    printf("顺序表:");
    ElemType *p=st->elem;
    for(int i=0;i<st->TableLen;i++){
        printf("%d ",*p);
        p=p+1;
    }
    printf("\n");
}
void SearchSS(SSTable *st,ElemType key){
    ElemType *p=st->elem;
    int flag=0;
    for(int i=0;i<st->TableLen;i++){
        if(key!=*p){
            p=p+1;
        }
        else{printf("关键字的位置为:%d\n",i+1);flag=1;break;}//位置一般从1开始
    }
    if(flag==0){printf("未找到相应的关键字\n");}
}//一般线性表查找
void SearchBin(SSTable *st,ElemType key){
    int mid,low=0;
    int high=st->TableLen-1,flag=0;
    while(low<=high){
        mid=(low+high)/2;
        if(st->elem[mid]==key){flag=1;break;}
        else if(st->elem[mid]>key){high=mid-1;}
        else low=mid+1;
    }
    if(flag==0){printf("未找到相应的关键字\n");}
    else{printf("关键字的位置为:%d\n",mid+1);}//位置一般从1开始
}//折半查找
void main(){
    SSTable st;
    CreatSS(&st);
    PrintSS(&st);
    SearchSS(&st,16);
    SearchBin(&st,7);
}

 

顺序查找和折半查找

标签:scanf   bsp   break   bre   arch   线性   bin   table   eof   

原文地址:https://www.cnblogs.com/Yshun/p/11432344.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!