码迷,mamicode.com
首页 > 编程语言 > 详细

查找算法

时间:2019-02-21 09:45:43      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:als   有序   typedef   tab   ...   指针   失败   print   turn   

查找算法是典型的常用算法,查找算法对综合效率要求比较高,常用的查找算法有很多种,本文主要介绍顺序查找和折半查找(二分查找),更多的查找算法还请小伙伴们自行研究。

头文件:

/***************************************************************************************************** 
 *Copyright:Yue Workstation 
 * 
 *FileName:Seek.h 
 * 
 *Function:查找相关数据定义和函数声明 
 * 
 *Author:Abel Lee 
 * 
 *CreateOn:2012-2-9 
 * 
 *Log:2012-2-9 由Abel Lee创建 
 *****************************************************************************************************/ 

#ifndef SEEK_H 
#define SEEK_H 

#include "global.h" 

typedef struct SeekNode 
{ 
    ElemType *elem; 
    int length; 
}SSTable; 

int CreateTable(SSTable *ST, int n); 
void PrintTable(SSTable ST); 
int SequentialSearch(SSTable ST,ElemType key); 
void DestroyTable(SSTable *ST); 
int SearchBin(SSTable ST, ElemType key); 

#endif

源文件:

/***************************************************************************************************** 
 *Copyright:Yue Workstation 
 * 
 *FileName:Queue.c 
 * 
 *Function:排序基本算法 
 * 
 *Author:Abel Lee 
 * 
 *CreateOn:2012-2-9 
 * 
 *Log:2011-2-9 由Abel Lee创建 
 *****************************************************************************************************/ 

#include "../inc/Seek.h" 

/**************************************************************************************************** 
 *Function Name: CreateTable 
 * 
 *Function: 创建一个表 
 * 
 *Parameter:   ST:表头指针 
 *             n:表长度 
 * 
 *Return Value:成功返回0,失败返回-1 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-2-9 
 ***************************************************************************************************/ 
int CreateTable(SSTable *ST, int n) 
{ 
    int i = 0; 

    printf("Creating...\n"); 
    if(ST == NULL) 
    { 
        perror("ST is NULL!"); 
        return -1; 
    } 

    ST->elem = (ElemType *)malloc(n+1); 

    for(i = 1; i <= n; i++) 
    { 
        ST->elem[i] = i; 
    } 
    ST->elem[0] = 0; 
    ST->length = n; 

    printf("Create SSTable Success!\n"); 
    return 0; 
} 

/**************************************************************************************************** 
 *Function Name: PrintTable 
 * 
 *Function: 打印一个表中的内容 
 * 
 *Parameter:   ST:表头指针 
 * 
 *Return Value:无 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-2-9 
 ***************************************************************************************************/ 
void PrintTable(SSTable ST) 
{ 
    int i = 0; 

    for(i = 1; i <= ST.length; i++) 
    { 
        printf("%d-->",ST.elem[i]); 
    } 

    return; 
} 

/**************************************************************************************************** 
 *Function Name: DestroyTable 
 * 
 *Function: 销毁一个表 
 * 
 *Parameter:   ST:表头指针 
 * 
 *Return Value:无 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-2-9 
 ***************************************************************************************************/ 
void DestroyTable(SSTable *ST) 
{ 
    return ; 
} 

/**************************************************************************************************** 
 *Function Name:SequentialSearch 
 * 
 *Function:顺序查表法 
 * 
 *Parameter:   ST:查找对象 
 *             key:关键字 
 * 
 *Return Value:成功返回0,失败返回-1 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-2-9 
 ***************************************************************************************************/ 
int SequentialSearch(SSTable ST,ElemType key) 
{ 
    int i = 0; 

    for(i = 1; i < ST.length; i++) 
    { 
        if(ST.elem[i] == key) 
        { 
            return i; 
        } 
    } 
    return 0; 
} 

/**************************************************************************************************** 
 *Function Name:SequentialSearch 
 * 
 *Function: 折半查表法,针对于有序表 
 * 
 *Parameter:   ST:查找对象 
 *             key:关键字 
 * 
 *Return Value:成功返回0,失败返回-1 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-2-9 
 ***************************************************************************************************/ 
int SearchBin(SSTable ST, ElemType key) 
{ 
    int low = 1; 
    int high = ST.length; 
    int mid = 0; 

    while(low <= high) 
    { 
        mid = (low + high)/2; 
        if(key == ST.elem[mid]) 
        { 
            return mid; 
        } 
        else if(key < ST.elem[mid]) 
        { 
            high = mid - 1; 
        } 
        else 
        { 
            low = mid + 1; 
        } 
    } 

    return 0; 
}

查找算法

标签:als   有序   typedef   tab   ...   指针   失败   print   turn   

原文地址:http://blog.51cto.com/14207158/2352652

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