第七章小结
Posted aulikeher32
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第七章小结相关的知识,希望对你有一定的参考价值。
概念梳理:
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仍在进行中
以上是关于第七章小结的主要内容,如果未能解决你的问题,请参考以下文章