数据结构顺序查找和折半查找
1.代码
#include<stdio.h> #include<stdlib.h> #define MAXNUM 100 typedef struct{ int *elem; //查找表的数据结构(顺序表) int TableLen; //表的长度 }SSTable; //初始化 void InitList(SSTable &ST){ int i,n; ST.elem=(int *)malloc(MAXNUM*sizeof(int)); printf("请输入元素个数:"); scanf("%d",&n); printf("请输入各元素的值:"); for(i=1;i<=n;i++){ scanf("%d",&ST.elem[i]); } ST.TableLen=n; } //顺序查找 int Search_Seq(SSTable ST,int key){ int i; for(i=0;i<ST.TableLen && ST.elem[i]!=key;i++); //查找成功,则返回元素下标;查找失败,则返回-1 return i==ST.TableLen ? -1 : i; } //折半查找 int Binary_Search(SSTable L,int key){ int low=0,high=L.TableLen-1,mid; while(low<=high){ mid=(low+high)/2; //取中间位置 if(L.elem[mid]==key) return mid; //查找成功则返回元素所在位置 else if(L.elem[mid]>key) high=mid-1; //从前半部分继续查找 else low=mid+1; //从后半部分继续查找 } return -1; //查找失败,返回-1 } int main(){ int key; SSTable ST; InitList(ST); printf("请输入要查找元素的值:"); scanf("%d",&key); printf("顺序查找的元素所在位置:%d\n", Search_Seq(ST,key)); printf("折半查找的元素所在位置:%d\n", Binary_Search(ST,key)); return 0; }
2.运行结果