5.4 索引查找

5-5 IndexSearch.c

 1 #include <stdio.h>
 2 #define INDEXTABLE_LEN 3
 3 #define TABLE_LEN 30
 4 typedef struct item
 5 {
 6     int index;    //索引值
 7     int start;    //开始位置
 8     int length;   //子表长度
 9 }INDEXITEM;
10 //定义主表数据
11 long stu[TABLE_LEN]={
12      1080101,1080102,1080103,1080104,1080105,1080106,0,0,0,0,
13      1080201,1080202,1080203,1080204,0,0,0,0,0,0,
14      1080301,1080302,1080303,1080304,0,0,0,0,0,0};
15 //定义索引表
16 INDEXITEM indextable[INDEXTABLE_LEN]={
17     {10801,0,6},
18     {10802,10,4},
19     {10803,20,4}};
20 int IndexSearch(int key) //按索引查找
21 {
22     int i,index1,start,length;
23     index1=key/100;//计算索引值
24     for(i=0;i<INDEXTABLE_LEN;i++) //在索引表中查找索引值
25     {
26         if(indextable[i].index==index1) //找到索引值
27         {
28             start=indextable[i].start; //获取数组开始序号
29             length=indextable[i].length; //获取元素长度
30             break; //跳出循环
31         }
32     }
33     if(i>=INDEXTABLE_LEN)
34         return -1;//索引表中查找失败
35     for(i=start;i<start+length;i++)
36     {
37         if(stu[i]==key) //找到关键字
38             return i; //返回序号
39     }
40     return -1; //查找失败,返回-1
41 }
42 int InsertNode(key)
43 {
44     int i,index1,start,length;
45     index1=key/100;//计算索引值
46     for(i=0;i<INDEXTABLE_LEN;i++) //在索引表中查找索引值
47     {
48         if(indextable[i].index==index1) //找到索引值
49         {
50             start=indextable[i].start; //获取数组开始序号
51             length=indextable[i].length; //获取元素长度
52             break; //跳出循环
53         }
54     }
55     for(i=0;i<INDEXTABLE_LEN;i++) //在索引表中查找索引值
56     {
57         if(indextable[i].index==index1) //找到索引值
58         {
59             start=indextable[i].start; //获取数组开始序号
60             length=indextable[i].length; //获取元素长度
61             break; //跳出循环
62         }
63     }
64     if(i>=INDEXTABLE_LEN)
65         return -1;//索引表中查找失败
66     stu[start+length]=key;//保存关键字到主表
67     indextable[i].length++;//修改索引表中的子表长度
68     return 0;
69 }
70
71 int main()
72 {
73     long key;
74     int i,pos;
75     printf("原数据:");
76     for(i=0;i<TABLE_LEN;i++)
77         printf("%ld ",stu[i]);
78     printf("\n");
79     printf("输入查找关键字:");
80     scanf("%ld",&key);
81     pos=IndexSearch(key);
82     if(pos>0)
83         printf("查找成功,该关键字位于数组的第%d个位置。\n",pos);
84     else
85         printf("查找失败!\n");
86     printf("输入插入关键字:");
87     scanf("%ld",&key);
88     if(InsertNode(key)==-1)
89         printf("插入数据失败!\n");
90     else
91     {
92         for(i=0;i<TABLE_LEN;i++)
93             printf("%ld ",stu[i]);
94         printf("\n");
95     }
96     getch();
97     return 0;
98 }
时间: 2024-10-26 02:52:28

5.4 索引查找的相关文章

15.有序表查找与线索索引查找

转载请表明出处:http://blog.csdn.net/u012637501 一.有序表查找 1.折半查找/二分查找算法 (1)基本思想:在顺序存储的有序表中,取中间纪录(a[mid]=key)作为比较对象,若给定值与中间纪录的关键字相等,则查找成功:若给定值小于中间纪录的关键字,则在中间纪录的左半区继续查找:若给定值大于中间纪录的关键字,则在中间纪录的右半边.不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止. (2)使用条件:线性表中的纪录是关键码有序的(通常是从小到大有序

查找算法(I) 顺序查找 二分查找 索引查找

查找 本文为查找算法的第一部分内容,包括了基本概念,顺序查找.二分查找和索引查找.关于散列表和B树查找的内容,待有空更新吧. 基本概念 查找(search)又称检索,在计算机上对数据表进行查找,就是根据所给条件查找出满足条件的第一条记录(元素)或全部记录. 若没有找到满足条件的记录,则返回特定值,表明查找失败:若查找到满足条件的 第一条记录,则表明查找成功,通常要求返回该记录的存储位置或记录值本身,以便进行进一步处理:若需要查找到满足条件的所有记录,则可看做在多个区间内连 续查找到满足条件的第一

索引扫描与索引查找

扫描与查找操作均是SQL Server从表或索引中读取数据采用的迭代器,这些也是SQL Server支持的最基本的运算.几乎在每一个查询计划中都可以找到,因此理解它们的不同是很重要的,扫描是在整张表上进行处理,而索引是在整个页级上进行处理,而查找则返回特定谓词上一个或多个范围内的数据行. 下面让我们看一个扫描的例子 SELECT[OrderId]FROM[Orders]WHERE[RequiedDate]='2015-03-21' 在Orders表中,并不存在对RequiredDate列的索引,

索引查找Java实现

package 索引查找; import java.util.Scanner; public class IndexSearch { public static long stu[] = { 1080101,1080102,1080103,1080104,1080105,1080106,0,0,0,0, 1080201,1080202,1080203,1080204,0,0,0,0,0,0, 1080301,1080302,1080303,1080304,0,0,0,0,0,0 }; stati

SQL SERVER中什么情况会导致索引查找变成索引扫描

SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳. 1:隐式转换会导致执行计划从索引查找(Index Seek)变为索引扫描(Index Scan) Implicit Conversion will cause index scan instead of index seek. While implicit conversions occur in SQL Serve

SQL 索引查找

索引查找信息 在非聚集索引里,会为每条记录存储一份非聚集索引索引键的值和一份聚集索引索引键 [在没有聚集索引的表格里,是RID值指向数据页面,有聚集索引的话指向聚集索引的键(在不使用include时)] 所以在这里,每条记录都会有一份[UnitPrice]和[SalesOrderDetailID]记录,按照[UnitPrice]的顺序存放 SELECT Types FROM dbo.News WHERE Types>10 计划:索引查找通过News_CL非聚集索引 返回的字段包含没有建立索引的字

大话数据结构—顺序表、有序表、线性索引查找

查找 根据给定的某个值,在查找表中确定一个其关键字(唯一的标识一个记录)等于给定值的数据元素或数据记录. 静态查找:只查找,不修改元素[线性表.顺序查找.二分查找] 动态查找:查找时,插入或者删除元素[二叉排序树] 顺序表查找 顺序查找(针对静态查找表),也叫线性查找O(n),从头开始遍历,直到最后一个记录. 优化:添加哨兵 //有哨兵的顺序查找 int foo(int *a,int n,int key) { int i; a[0]=key;//哨兵 i=n; while(a[i]!=key)

算法7 五大查找之:索引查找

上一篇总结了二分查找,这一篇要总结的是索引查找. 关于索引,我们很容易地联想到数据库中的索引,建立了索引,可以大大提高数据库的查询速度. 索引查找又称为分块查找,是一种介于顺序查找和二分查找之间的一种查找方法,索引查找的基本思想是:首先查找索引表,可用二分查找或顺序查找,然后在确定的块中进行顺序查找. 在实现索引查找算法前需要弄清楚以下三个术语. (1)主表.即要查找的序列. (2)索引项.一般我们会将主表分成几个块,每个块建立一个索引,这个索引就叫索引项. (3)索引表.即索引项的集合. 同时

SQL Server中LIKE %search_string% 走索引查找(Index Seek)浅析

  在SQL Server的SQL优化过程中,如果遇到WHERE条件中包含LIKE '%search_string%'是一件非常头痛的事情.这种情况下,一般要修改业务逻辑或改写SQL才能解决SQL执行计划走索引扫描或全表扫描的问题.最近在优化SQL语句的时候,遇到了一个很有意思的问题.某些使用LIKE '%' + @search_string + '%'(或者 LIKE @search_string)这样写法的SQL语句的执行计划居然走索引查找(Index Seek).下面这篇文章来分析一下这个