问题:明白思想,其他的没什么,记得结构体为指针时一定要动态分配内存。
代码:
#include <iostream> #include <cstdlib> using namespace std; #define MAXL 20 typedef struct seq { int key[MAXL]; int len; }data; typedef struct table { int start; int end; int d; }index[4]; int block_search(index s,data *list,int key) //分块查找 { int i=0; int j; while(i<4&&key>s[i].d) //确定块的地址 i++; if(i>=4) return -1; for(j=s[i].start;j<=s[i].end;j++) { if(list->key[j]==key) return j; } if(j>s[i].end) return -1; } int main() { data *list; index s; int i,j,p; int key; cout<<"/"<<"分块查找"<<"/"<<endl; cout<<"---------------------"<<endl; list=(data *)malloc(sizeof(struct seq)); if(!list) cout<<"allocate fail"<<endl; cout<<"input the len:"; cin>>list->len; for(i=0;i<list->len;i++) { cin>>list->key[i]; } cout<<"output the list:"<<endl; for(i=0;i<list->len;i++) { cout<<list->key[i]<<" "; } cout<<endl; for(j=0;j<4;j++) { cin>>s[j].start>>s[j].end>>s[j].d; } cout<<"please input the key:"; cin>>key; p=block_search(s,list,key); if(p==-1) cout<<"can not find"<<endl; else cout<<"the key pos is "<<p<<endl; return 0; }
运行截图: