标签:行修改 size code cout 动态 有序表 判断 strong lag
概念梳理:
1、查找表:是由同一类型的数据元素(或记录)构成的集合。
2、关键字:是数据元素(或记录)中某个数据项的值,用它可以标识一个数据元素(或记录)。
主关键字:若此关键字可以唯一地标识一个记录,则称此关键字为主关键字。
反之称为次关键字。
3、查找
(1)静态查找表:在查找的同时不对表进行修改操作。
(2)动态查找表:在查找的同时对表做修改操作(如插入、删除)。
4.学了几种查找,主要讲讲二分查找:
代码:
int Search_Bin(SSTable ST,KeyType key) {//在有序表ST表中折半查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0; int low = 1 ,high = ST.length;//置查找区间初值。 int mid; while(low<=high) { mid = (low+high)/2; if(key==ST.R[mid].key) //找到待查找元素; return mid; else if(key<ST.R[mid].key) high = mid - 1;//继续在前一子表进行查找; else low = mid + 1;//继续在后一子表中进行查找; } return 0; //表中不存在待查元素; }
时间复杂度为log2n,大大节省了搜索时间,但仅限于排好序的顺序表。
5.散列表查找代码
#include<iostream> #include<cmath> using namespace std; bool isprime(int Tsize); int main() { int hash[1000]={},i,j,k=1,Tsize,insize,key[10000],temp,temp1[10000]={},flag=0; cin>>Tsize>>insize; for(i=0;i<insize;i++) cin>>key[i];//输入待存储整数 if(!isprime(Tsize))//判断是否素数 { temp=Tsize; // cout<<"1"; while(!isprime(temp))//寻找大于Tsize的最小素数 { temp=temp+1; // cout<<temp<<"a"; if(isprime(temp))//如果是素数,将其赋值给Tsize { Tsize=temp; // cout<<Tsize; } } } for(i=0;i<Tsize;i++) hash[i]=-1; i=0; while(i<insize) {//求取地址值 temp=key[i]%Tsize; // cout<<temp<<endl; if(hash[temp]==-1)//不发生冲突直接赋值 { flag=1; hash[temp]=key[i]; if(i==0) cout<<temp; else cout<<" "<<temp;//用数组存储各个地址数值 } else while(temp<Tsize) {//当发生冲突时,采用二次探测法 temp=temp+k*k; k++; if(hash[temp]==-1&&temp<Tsize)//未赋值并且未超过长度则取其地址 { flag = 1; hash[temp]=key[i]; if(i==0) cout<<temp; else cout<<" "<<temp; break; } } if(flag==0&&i==0) cout<<"-"; else if(flag==0) cout<<" "<<"-"; flag = 0; k=1; i++; } // for(i=0;i<insize;i++)//输出地址值 // { // if(hash[i]!=-1) // cout<<" "<<temp1[i]; // else // cout<<" "<<"-"; // if(hash[i]!=-1) // cout<<" "<<hash[i]; // else // cout<<" "<<"-"; //} } bool isprime(int Tsize) { int k; for(k=2;k<=sqrt(Tsize);k++) if(Tsize%k==0) return false; return true; }
debug仍在进行中
标签:行修改 size code cout 动态 有序表 判断 strong lag
原文地址:https://www.cnblogs.com/AUlikeHER32/p/10965160.html