查找-顺序查找

野性酷女 2022-05-13 07:28 277阅读 0赞

顺序查找的思路:

从数据的第一个元素开始,依次将扫描到的关键字和给定值key比较。若当前扫描到的关键字和key相等,则查找成功;若扫描结束还没有找到和key相等的元素,就表示查找给定的值不在表中。

时间复杂度:

O(n).

优点:

1.算法简单

2.对表结构没有任何要求,用顺序表或者用链表都可以。

3.表中元素之间是否有序,仍然可适用。

例子:查找数组{3,6,2,10,1,8,5,7,4,9}中的关键字为5的元素位置

查找过程演示图:

2018120719230463.gif

算法例子:

(1)顺序表顺序查找-结构体数组:

  1. #include<stdio.h>
  2. #define MAXL 100
  3. typedef struct
  4. {
  5. int key;
  6. }Table;
  7. typedef Table SeqList[MAXL];
  8. int SeqSearch(SeqList r,int n,int key2)
  9. {
  10. int i=0;
  11. while(i<n && r[i].key!=key2)
  12. {
  13. i++;
  14. }
  15. if(i>=n)
  16. return -1;
  17. else
  18. {
  19. return i;
  20. }
  21. }
  22. void main()
  23. {
  24. SeqList r;
  25. int n=10,i;
  26. int key3=5;
  27. int a[]={3,6,2,10,1,8,5,7,4,9};
  28. for(i=0;i<n;i++)
  29. {
  30. r[i].key=a[i];
  31. }
  32. if((i=SeqSearch(r,n,key3))!=-1)
  33. {
  34. printf("%d元素的位置:%d\n",key3,i);
  35. }
  36. else
  37. printf("该元素不在表中",key3);
  38. }

(2)顺序表顺序查找-数组1:

  1. #include<stdio.h>
  2. int SeqSearch(int *a,int lengh,int key)
  3. {
  4. for(int i = 0 ; i < lengh ; i++)
  5. {
  6. if(a[i] == key)
  7. return i;
  8. }
  9. return -1;
  10. }
  11. void main()
  12. {
  13. int arr[] = {3,6,2,10,1,8,5,7,4,9};
  14. int result, num =5;
  15. result = SeqSearch(arr,sizeof(arr),num);
  16. if(result == -1)
  17. printf("该元素不在表中");
  18. else
  19. printf("%d元素的位置:%d\n",num,result);
  20. }

(3)顺序表顺序查找-数组2:

  1. #include<stdio.h>
  2. int SeqSearch(int a[],int value)
  3. {
  4. for(int i=0;i<sizeof(a);i++)
  5. {
  6. if(a[i]==value)
  7. return i;
  8. }
  9. return -1;
  10. }
  11. void main()
  12. {
  13. int a[]={3,6,2,10,1,8,5,7,4,9};
  14. int value=5;
  15. int i;
  16. if(i=(SeqSearch(a,value))!=-1)
  17. printf("%d元素的位置:%d",value,i);
  18. }

(4)链表顺序查找

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. typedef struct ListNode
  4. {
  5. int key;
  6. ListNode* nextNode;
  7. }ListNodeTable;
  8. //创建链表
  9. void InitList(ListNodeTable *&l)
  10. {
  11. l=(ListNodeTable*)malloc(sizeof(ListNodeTable));
  12. l->nextNode=NULL;
  13. }
  14. //链表插入元素
  15. bool ListInsert(ListNodeTable *&l,int n,int keyvalue)
  16. {
  17. int i=0;
  18. ListNodeTable *p=l,*templist;
  19. while(i<n-1&&p!=NULL)
  20. {
  21. i++;
  22. p=p->nextNode;
  23. }
  24. if(p==NULL)
  25. {
  26. return false;
  27. }
  28. else
  29. {
  30. templist=(ListNodeTable*)malloc(sizeof(ListNodeTable));
  31. templist->key=keyvalue;
  32. templist->nextNode=p->nextNode;
  33. p->nextNode=templist;
  34. return true;
  35. }
  36. }
  37. //顺序查找
  38. int seqsearch(ListNodeTable *l,int key)
  39. {
  40. int i=1;
  41. ListNodeTable *p=l->nextNode;
  42. while(p!=NULL&&p->key!=key)
  43. {
  44. p=p->nextNode;
  45. i++;
  46. }
  47. if(p==NULL)
  48. {
  49. printf("该元素不存在表中");
  50. return -1;
  51. }
  52. else
  53. return i;
  54. }
  55. void main()
  56. {
  57. ListNodeTable *l;
  58. int key;
  59. InitList(l);
  60. int n=10;
  61. int a[]={3,6,2,10,1,8,5,7,4,9};
  62. int j;
  63. for(int i=1;i<=n;i++)
  64. {
  65. ListInsert(l,i,a[i-1]);
  66. }
  67. if((j=seqsearch(l,5))!=-1)
  68. {
  69. printf("5元素的位置:%d\n",j);
  70. }
  71. }

发表评论

表情:
评论列表 (有 0 条评论,277人围观)

还没有评论,来说两句吧...

相关阅读

    相关 顺序查找

    序表的查找分为三种。简单顺序查找、有序表的二分查找、索引表的顺序查找。这里主要介绍前两种。 一、简单顺序查找 简单顺序查找对数据表的特性没有要求,即是否具有递增递减特...

    相关 顺序查找

    一 概述 顺序查找又称为线性查找,主要用于在顺序表中的查找。顺序查找通常分为对一般的无序线性表的顺序查找和对按关键字有序的顺序表的顺序查找。 二 一般线性表的顺序查找

    相关 二分查找顺序查找

    顺序查找可以处理有序数组,也可以处理无序数组,依次遍历数组,查找待找元素,其时间复杂度为o(n);折半查找只能处理有序数组,每次查找的过程中,都会将查找范围缩小一半,其时间复杂

    相关 查找-顺序查找

    1.顺序查找定义 > 顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关

    相关 顺序查找

    1、基本思路:从表的一端开始,顺序扫描线性表,以此将扫描到的关键字 和给定的值K进行比较,若当前扫描到的值和给定值相等,则查找成功,返回它所在的位置,否则查找失败,返回0.

    相关 查找-顺序查找

    顺序查找的思路: 从数据的第一个元素开始,依次将扫描到的关键字和给定值key比较。若当前扫描到的关键字和key相等,则查找成功;若扫描结束还没有找到和key相等的元素,就表示

    相关 查找——简单顺序查找

    基本思想 从顺序表的一端开始扫描,将给定值K依次与顺序表中各数据元素的关键字进行比较,若当前扫描到的结点关键字与给定值K相等,则查找成功;若扫描结束后,仍未找到关键字等