表查询算法
❶ 有序表查找的递归算法
int Search_Bin(SSTable ST, keyType key)
{
return Search_Bin(ST, key, 1, ST.length);
}
int Search_Bin(SSTable ST,keyType key, int low, int high)
{
if(low==high)
{
if(ST.elem[low].key == key)
return low;
else
return 0;
}
int mid = (low+high)/2;
int result = 0;
if( (result=Search_Bin(ST, key, low, mid))!=0)
return result;
else
return Search_Bin(ST, key, mid+1, high)
}
❷ 线性表查找算法有哪些常见的内部排序算法有哪些
【知识点】
若矩阵A的特征值为λ1,λ2,...,λn,那么|A|=λ1·λ2·...·λn
【解答】
|A|=1×2×...×n= n!
设A的特征值为λ,对于的特征向量为α。
则 Aα = λα
那么 (A²-A)α = A²α - Aα = λ²α - λα = (λ²-λ)α
所以A²-A的特征值为 λ²-λ,对应的特征向量为α
A²-A的特征值为 0 ,2,6,...,n²-n
【评注】
对于A的多项式,其特征值为对应的特征多项式。
线性代数包括行列式、矩阵、线性方程组、向量空间与线性变换、特征值和特征向量、矩阵的对角化,二次型及应用问题等内容。
❸ 用顺序表实现二分查找算法
#include<iostream>
using namespace std;
int a[100];
int find1(int l,int r,int x)
{
int m=(l+r)/2;
if(l>r)//查找失败
return -1;
if(x==a[m])//查找成功返回下标
return m;
else if(x>a[m])
find1(m+1,r,x);//查找右边
else if(x<a[m])
find1(l,m-1,x);//查找左边
}
int main()
{//折半查找,待查找数列必须有序(升序或降序)
int x,n,num;
cin>>n;//输出n待查找数列长度
for(int i=0;i<n;i++)
cin>>a[i];//输入n个数
cin>>x;//输入查找值
num=find1(0,n,x);//调用折半查找函数(返回下标)
if(num!=-1)//数组下标0~n-1;返回-1查找失败
{
cout<<x<<":在数组中的位置 ";
cout<<num<<endl;
}
else
cout<<"查找失败"<<endl;
return 0;
}
❹ “单链表的查找算法”谢谢各位
对单链表进行查找的思路为:对单链表的结点依次扫描,检测其数据域是否是我们所要查好的值,若是返回该结点的指针,否则返回NULL。
因为在单链表的链域中包含了后继结点的存储地址,所以当我们实现的时候,只要知道该单链表的头指针,即可依次对每个结点的数据域进行检测。
以下是应用查找算法的一个例子:
#include <stdio.h>
#include <malloc.h>
#include <string.h> /*包含一些字符串处理函数的头文件*/
#define N 10
typedef struct node
{
char name[20];
struct node *link;
}stud;
stud * creat(int n) /*建立链表的函数*/
{
stud *p,*h,*s;
int i;
if((h=(stud *)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
h->name[0]='\0';
h->link=NULL;
p=h;
for(i=0;i<n;i++)
{
if((s= (stud *) malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
p->link=s;
printf("请输入第%d个人的姓名",i+1);
scanf("%s",s->name);
s->link=NULL;
p=s;
}
return(h);
}
stud * search(stud *h,char *x) /*查找链表的函数,其中h指针是链表的表头指针,x指针是要查找的人的姓名*/
{
stud *p; /*当前指针,指向要与所查找的姓名比较的结点*/
char *y; /*保存结点数据域内姓名的指针*/
p=h->link;
while(p!=NULL)
{
y=p->name;
if(strcmp(y,x)==0) /*把数据域里的姓名与所要查找的姓名比较,若相同则返回0,即条件成立*/
return(p); /*返回与所要查找结点的地址*/
else p=p->link;
}
if(p==NULL)
printf("没有查找到该数据!");
}
main()
{
int number;
char fullname[20];
stud *head,*searchpoint; /*head是表头指针,searchpoint是保存符合条件的结点地址的指针*/
number=N;
head=creat(number);
printf("请输入你要查找的人的姓名:");
scanf("%s",fullname);
searchpoint=search(head,fullname); /*调用查找函数,并把结果赋给searchpoint指针*/
}
❺ 怎样才能快速搜索路由表有哪些着名的搜索算法
有三个路由器,a,b和c。路由器a的两个网络接口f0和s0
分别连接在
10.1.0.0和10.2.0.0网段上;路由器b的两个网络接口s0和s1
分别连接在
10.2.0.0和10.3.0.0网段上;路由器c的两个网络接口s0和e0
分别连接在
10.3.0.0和10.4.0.0网段上;
如上图中各路由表的前两行所示,通过路由表的网络接口到与之直接相连的网
络的网络连接,其向量距离设置为0。这即是最初的路由表。
当路由器b和a以及b和c之间相互交换路由信息后,它们会更新各自的路由表。
例如,路由器b通过网络端口s1收到路由器c的路由信息(10.3.0.0,s0,0)和(10.4.0.0,e0,0)后,在自己的路由表中增加一条(10.4.0.0,s1,1)路由信息。该信息表示:通过路由器b的网络接
口s1可以访问到10.4.0.0网段,其向量距离为1,该向量距离是在路由器c的基础上加1获得的。
同样道理,路由器b还会产生一条(10.1.0.0,s0,1)路由,这条路由是通过网络端口s0从路由器a
获得的。如此反复,直到最终收敛,形成图中所示的路由表。
概括地说,距离向量算法要求每一个路由器把它的整个路由表发送给与它直接连接的其它路由
器。路由表中的每一条记录都包括目标逻辑地址、相应的网络接口和该条路由的向量距离。当一个路
由器从它的相邻处收到更新信息时,它会将更新信息与本身的路由表相比较。如果该路由器比较出一条
新路由或是找到一条比当前路由更好的路由时,它会对路由表进行更新:将从该路由器到邻居之间的
向量距离与更新信息中的向量距离相加作为新路由的向量距离。
❻ c语言怎么查表
查表是数据结构中的一个概念。查表的前提是先建表。
在C语言实现中,建表也就是将一系列的数据,或者有原始数据中提取出的特征值,存储到一定的数据结构中,如数组或链表中。
查表的时候,就是对数组或链表查询的过程。常用的方式有如下几种:
1 对于有序数组,可以采用折半查找的方式快速查询。
2 对于链表,可以根据链表的构建方式,进行针对性查询算法的编写。
3 大多数情况,可以通过遍历的方式进行查表。即从第一个元素开始,一直顺序查询到最后一个元素,逐一对比。
❼ 数据结构问题 顺序表 有序表 的查找算法分别是什么
顺序表用直接查找法,有序表用二分(折半)查找法。
❽ 查找算法有哪些
查找算法常用的有,顺序查找,二分查找,哈希表查找,等等。
❾ 查找算法的作用
查找就是在一个数据集合里查找到你需要的数据,查找算法就是在查找过程中使用的算法。查找算法有好多,最基础的就是线性表查找。
因为提到了算法,所以需要注意的是时间复杂度跟空间复杂度,进而涉及到数据的存储方式,比如数组,链表,矩阵,树,图等等数据结构,这些数据结构可以帮助你降低算法的复杂度。
如果有兴趣,随便找本数据结构书翻翻,里面或多或少都会有讲解。用关键字标识一个数据元素,查找时根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素。在计算机中进行查找的方法是根据表中的记录的组织结构确定的。顺序查找也称为线形查找,从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。二分查找要求线形表中的结点按关键字值升序或降序排列,用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。分块查找也称为索引查找,把线形分成若干块,在每一块中的数据元素的存储顺序是任意的,但要求块与块之间须按关键字值的大小有序排列,还要建立一个按关键字值递增顺序排列的索引表,索引表中的一项对应线形表中的一块,