数据结构:查找

来源:互联网 发布:如何找淘宝隐藏优惠券 编辑:程序博客网 时间:2024/05/20 06:23

一. 静态查找表

静态查找表是仅对查找表进行查找操作,而不能改变其中数据的线性表,可以是基于数组的顺序存储或以线性链表存储。静态查找表主要有顺序表、有序顺序表和索引顺序表三种。

 1. 顺序查找

函数模型

int seqsearch(element list[], int searchnum, int n){int i;for (i=0;i < n; i++) //遍历这n个元素if (list[i].key == searchnum)  //若第i个元素的关键字等于searchnumreturn i;//若循环结束了,还没有返回,说明什么?那么如何返回?if(i == n)return -1;}

2.折半查找

2.1非递归折半查找

int binsearch(element list [], int searchnum, int n){int left = 0, right = n-1, middle; while (!(left == right)){middle = (left + right)/2;                             //计算中点下标if  (list[middle].key < searchnum)                     // 根据下一条语句,你说填什么?left = middle+1;                                   //这条语句说明查找的关键字在哪个半区?else if (list[middle].key == searchnum)                //什么条件下返回 middle啊?return middle;elseright = middle -1;                                 //剩下的你有的选择吗?}return -1;}
2.2递归折半查找
int binsearch2(element list[],int searchnum,int start,int end){int left = start,right = end,middle;//printf("left = %d,right = %d\n",left,right);middle = (left + right)/2;while(!(left == right)){if(list[middle].key > searchnum)return binsearch2(list,searchnum,left,middle - 1);if(list[middle].key == searchnum)return middle;if(list[middle].key < searchnum)return binsearch2(list,searchnum,middle + 1,right);}    return -1;}
3.索引表查找
int indexsequelsearch(indextype ls[] , elemtype s[] , int m, int n ,keytype key){int i , j ,last;i=0;                                        //找到key所在块的索引while(i < m && key > ls[i].key)i++;//printf("i = %d",i);if(i == m)                                 //若该索引超过了最大索引值,则表明key大于s中的最大值,查找失败return  -1;else { //key可能在第i块中,找到第i块在s中的起始下标赋值到j        j = ls[i].link;//last标识搜索的终点if (i<m-1) last = ls[i+1].link;else last = n;//在s中查找key,直到找到key值,或者与全部n个数据均比较完        while(key!=s[j].key && j < last)j++;//根据j值判断是否查找到key        if(j < last)return  j ;        else return -1;}}

0 0
原创粉丝点击