dic_seqlist_binsearch.c

来自「程序百例精解cyuyan_jcbc100li 程序百例精解cyuyan_jcbc」· C语言 代码 · 共 53 行

C
53
字号
/* 本程序提供了用顺序表实现字典的情况下
的二分法检索算法*/

#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define MAXNUM 100

typedef int KeyType ;

typedef struct {
    KeyType key;                  /* 字典元素的关键码字段     */
    /*DataType value;             /* 字典元素的属性字段    */
} DicElement;

typedef struct {
    int n;                          /* n<=MAXNUM,为字典中元素的个数 */
    DicElement element[MAXNUM];
} SeqDictionary;

/* 在字典中用二分法查找关键码为key的元素 */
int binarySearch(SeqDictionary * pdic, KeyType key, int *position) {
    int low = 0, high = pdic->n-1, mid;

    while(low<=high) {
        mid = (low+high)/2;                   /* 当前检索的中间位置 */
        if(pdic->element[mid].key == key) {   /* 检索成功 */
            *position = mid;  return TRUE;
        }
        else if (pdic->element[mid].key > key) 
            high = mid-1;                     /* 要检索的元素在左半区 */
        else low = mid+1;                     /* 要检索的元素在右半区 */
    }
    *position=low;
    return FALSE;                            /* 检索失败 */
}

SeqDictionary dic={
    10, 1,3,5,7,9,11,13,19,21,30};

int main(){
    int i, position;
    while(1){
        printf("Input the key you want to search: ");
        scanf("%d",&i);
        if(i==0)break;
        if(binarySearch(&dic,i,&position)==TRUE)
            printf("It is the %dth element!\n",position+1);
        else printf("It is not in the dictionary!\n");
    }
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?