赞
踩
顺序查找:从表的一端开始,依次将记录在表中的关键字与给定值进行比较,若某个记录的关键字和给定值相同,则查找成功;反之查找失败。
顺序查找既适用于顺序表,又适用于线性表,首先先介绍顺序表中的顺序查找
数据结构类型定义如下:
- typedef struct
- {
- KeyType key; //关键字域
- InfoType otherinfo; //其他域
- }ElemType;
定义单个结点后,再定义顺序表
- typedef struct
- {
- ElemType *R; //(ElemType a[100])存储空间基地址
- int length; //顺序表长度
- }List;
接下来就是顺序查找的算法描述
- bool Search(List B,KeyType key)
- {//再顺序表中查找关键字与key相等的元素,若找到要输出该元素所包含的所有信息并返回正确
- 找不到则返回错误
- for(int i=B.length;i>=1;i--)
- {//从后往前进行比较查找,因为0的位置没有值,所以比较到1就停止
- if(B.a[i]==key)
- {
- printf(该元素的所有信息);
- return Ture;
- break;
- }
- if(i==0)retur False;
- }
- }
源代码如下
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #define MAXSIZE 100
- //创建单个结点
- typedef struct
- {
- char name[6];
- int price;
- }book;
- //创建顺序表结构体
- typedef struct
- {
- book elem[MAXSIZE];
- int length;//顺序表的长度
- }books;
- //初始化顺序表
- void Init(books B)
- {
- B.length=0;
- }
- bool CreatList(books &B,int n)
- {
- if(n<0||n>MAXSIZE) return false;//当n数量不对时返回错误
- //从1开始赋值顺序表 ,让零闲置
- for(int i=1;i<=n;i++)
- {
- scanf("%s %d",&B.elem[i].name,&B.elem[i].price);
- B.length++;
- }
- return true;
- }
- //向顺序表中输入元素
- void PutIn(books &B)
- {
- int n;
- bool flag;//创建布尔类型变量
- printf("输入数量\n");
- scanf("%d",&n);
- printf("输入数据\n");
- flag=CreatList(B, n);
- if(flag) printf("创建成功\n");
- else printf("输入长度非法\n");
- }
- //顺序查找
- void Search_Seq(books B)
- {
- char b[6];
- printf("输入查询书籍\n");
- scanf("%s",b);
- //从后往前查找
- for(int i=B.length;i>=1;i--){
- if(strcmp(B.elem[i].name,b)==0){
- printf("查询成功\n");
- printf("%s %d",B.elem[i].name,B.elem[i].price);
- break;
- }
- if(i==0) printf("所查书籍不在系统中\n");
- }
- }
- //主函数
- int main()
- {
- books B;
- Init(B);
- PutIn(B);
- Search_Seq(B);
- return 0;
- }
在以上代码的顺序查找中,每步都要进行i>=1的比较,所用时间较长,改进这个程序将空闲的0的位置赋值关键字key,可以使程序运行时间减少很多,这时将a[0]称为监视哨
函数
- bool Search(List B,ElemType key)
- {
- B.a[0].key=key;
- for(int i=B.length;B.a[i].key!=key;i--)
- return i;
- }
具体使用方法将不再展示,与上一个方法大致相同
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。