数据结构查找--顺序表的顺序查找

       顺序查找:从表的一端开始,依次将记录在表中的关键字与给定值进行比较,若某个记录的关键字和给定值相同,则查找成功;反之查找失败。

    顺序查找既适用于顺序表,又适用于线性表,首先先介绍顺序表中的顺序查找

数据结构类型定义如下:

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;
}

具体使用方法将不再展示,与上一个方法大致相同

  • 7
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,顺序表是一种常见的数据结构,它是一种线性表,元素按照顺序存储在连续的内存空间中。顺序表查找操作是指在顺序表中根据给定的关键字查找对应的元素。 顺序表查找可以分为两种常见的方式:顺序查找和二分查找。 1. 顺序查找(Sequential Search): 顺序查找是一种简单直接的查找方法,它从顺序表的第一个元素开始逐个比较,直到找到目标元素或者遍历完整个顺序表。具体步骤如下: - 从顺序表的第一个元素开始,依次与目标元素进行比较。 - 如果找到目标元素,则返回其在顺序表中的位置。 - 如果遍历完整个顺序表仍未找到目标元素,则返回查找失败。 2. 二分查找(Binary Search): 二分查找是一种高效的查找方法,但要求顺序表中的元素必须是有序的。它通过将目标元素与顺序表中间位置的元素进行比较,根据比较结果确定继续在左半部分还是右半部分进行查找,以此类推,最终找到目标元素或者确定不存在。具体步骤如下: - 将顺序表按照关键字的大小进行排序。 - 比较目标元素与顺序表中间位置的元素。 - 如果目标元素等于中间位置的元素,则返回其位置。 - 如果目标元素小于中间位置的元素,则在左半部分继续进行二分查找。 - 如果目标元素大于中间位置的元素,则在右半部分继续进行二分查找。 - 重复以上步骤,直到找到目标元素或者确定不存在。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值