当前位置:   article > 正文

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

顺序表和顺序查找

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

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

数据结构类型定义如下:

  1. typedef struct
  2. {
  3. KeyType key; //关键字域
  4. InfoType otherinfo; //其他域
  5. }ElemType;

 定义单个结点后,再定义顺序表

  1. typedef struct
  2. {
  3. ElemType *R; //(ElemType a[100])存储空间基地址
  4. int length; //顺序表长度
  5. }List;

  接下来就是顺序查找的算法描述

  1. bool Search(List B,KeyType key)
  2. {//再顺序表中查找关键字与key相等的元素,若找到要输出该元素所包含的所有信息并返回正确
  3. 找不到则返回错误
  4. for(int i=B.length;i>=1;i--)
  5. {//从后往前进行比较查找,因为0的位置没有值,所以比较到1就停止
  6. if(B.a[i]==key)
  7. {
  8. printf(该元素的所有信息);
  9. return Ture;
  10. break;
  11. }
  12. if(i==0)retur False;
  13. }
  14. }

源代码如下

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define MAXSIZE 100
  5. //创建单个结点
  6. typedef struct
  7. {
  8. char name[6];
  9. int price;
  10. }book;
  11. //创建顺序表结构体
  12. typedef struct
  13. {
  14. book elem[MAXSIZE];
  15. int length;//顺序表的长度
  16. }books;
  17. //初始化顺序表
  18. void Init(books B)
  19. {
  20. B.length=0;
  21. }
  22. bool CreatList(books &B,int n)
  23. {
  24. if(n<0||n>MAXSIZE) return false;//当n数量不对时返回错误
  25. //从1开始赋值顺序表 ,让零闲置
  26. for(int i=1;i<=n;i++)
  27. {
  28. scanf("%s %d",&B.elem[i].name,&B.elem[i].price);
  29. B.length++;
  30. }
  31. return true;
  32. }
  33. //向顺序表中输入元素
  34. void PutIn(books &B)
  35. {
  36. int n;
  37. bool flag;//创建布尔类型变量
  38. printf("输入数量\n");
  39. scanf("%d",&n);
  40. printf("输入数据\n");
  41. flag=CreatList(B, n);
  42. if(flag) printf("创建成功\n");
  43. else printf("输入长度非法\n");
  44. }
  45. //顺序查找
  46. void Search_Seq(books B)
  47. {
  48. char b[6];
  49. printf("输入查询书籍\n");
  50. scanf("%s",b);
  51. //从后往前查找
  52. for(int i=B.length;i>=1;i--){
  53. if(strcmp(B.elem[i].name,b)==0){
  54. printf("查询成功\n");
  55. printf("%s %d",B.elem[i].name,B.elem[i].price);
  56. break;
  57. }
  58. if(i==0) printf("所查书籍不在系统中\n");
  59. }
  60. }
  61. //主函数
  62. int main()
  63. {
  64. books B;
  65. Init(B);
  66. PutIn(B);
  67. Search_Seq(B);
  68. return 0;
  69. }

在以上代码的顺序查找中,每步都要进行i>=1的比较,所用时间较长,改进这个程序将空闲的0的位置赋值关键字key,可以使程序运行时间减少很多,这时将a[0]称为监视哨

函数

  1. bool Search(List B,ElemType key)
  2. {
  3. B.a[0].key=key;
  4. for(int i=B.length;B.a[i].key!=key;i--)
  5. return i;
  6. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/922163
推荐阅读
相关标签
  

闽ICP备14008679号