当前位置:   article > 正文

顺序查找(C语言)_顺序查找c语言程序

顺序查找c语言程序

一.不带哨兵:

1. 线性表结构体

  1. typedef struct List
  2. {
  3. int *data;//元素数组
  4. int length;//可以写入多少元素
  5. int num;//目前元素个数
  6. }List;

 2.初始化列表

  1. List *initList(int length)
  2. {/*参数length:有多少元素空位*/
  3. List *list = (List*)malloc(sizeof(List));//为列表申请空间
  4. list->length = length;//元素长度写入
  5. list->data = (int*)malloc(sizeof(int)*length);//为列表内的数组申请空间
  6. list->num = 0;//初始元素个数为0
  7. return list; //返回列表
  8. }

 3.向列表内写入元素

  1. void listAdd(List *list,int data)
  2. {/*参数一:列表指针
  3. 参数二:要写入的元素*/
  4. list->data[list->num] = data;//将元素按序写入
  5. list->num += 1;//列表内元素数量加一
  6. }

 4.查找元素

  1. int search(List *list,int key)
  2. {/*参数一:列表指针
  3. 参数二:要查找的元素*/
  4. int i;
  5. for(i=0;i<list->num;i++)//循环遍历列表中的每一个元素直到与要查找的元素值相等
  6. {
  7. if(list->data[i]==key)
  8. return key;
  9. }
  10. return -1;//没查到返回-1
  11. }

5.遍历输出列表内的元素

  1. void printList(List *list)
  2. {/*参数list:列表指针*/
  3. int i;
  4. for(i=0;i<list->num;i++)//循环遍历,按序输出列表内data的值
  5. printf("%d ",list->data[i]);
  6. printf("\n");
  7. }

 6.主函数

  1. int main()
  2. {
  3. List *list = initList(5);//初始化,列表长度设为5
  4. int i,key,n;
  5. for(i=0;i<5;i++)
  6. listAdd(list,i);//往列表内写入元素
  7. printf("列表内元素:");
  8. printList(list);//遍历输出列表
  9. printf("请输入要查找的元素:");
  10. scanf("%d",&key);
  11. n = search(list,key);//查找元素
  12. if(n>=0)
  13. printf("查找到该元素n:%d\n",n);
  14. else
  15. printf("未查找到该元素!\n");
  16. return 0;
  17. }

 二.带哨兵

 和不带哨兵的区别仅在初始化列表,查找元素,遍历输出列表内的元素,和主函数某几行代码不同.

1. 初始化列表

  1. List *initList(int length)
  2. {/*参数length:有多少元素空位*/
  3. List *list = (List*)malloc(sizeof(List));//为列表申请空间
  4. list->length = length;//元素长度写入
  5. list->data = (int*)malloc(sizeof(int)*length);//为列表内的数组申请空间
  6. list->num = 1;//初始元素个数为0,加上哨兵num为1
  7. return list; //返回列表
  8. }

 2.查找元素

  1. int search(List *list,int key)
  2. {/*参数一:列表指针
  3. 参数二:要查找的元素*/
  4. int i;
  5. list->data[0] = key;//将要查找的元素写入哨兵位置
  6. for(i=(list->num)-1;list->data[i]!=key;i--);//从后往前找,找到要查找的元素时就停止循环
  7. return i;//返回元素下标
  8. }

 3.遍历输出列表内的元素

  1. void printList(List *list)
  2. {/*参数list:列表指针*/
  3. int i;
  4. for(i=1;i<list->num;i++)//循环遍历,按序输出列表内data的值
  5. printf("%d ",list->data[i]);
  6. printf("\n");
  7. }

 4.主函数

  1. int main()
  2. {
  3. List *list = initList(5);//初始化,列表长度设为5
  4. int i,key,n;
  5. for(i=0;i<5;i++)
  6. listAdd(list,i);//往列表内写入元素
  7. printf("列表内元素:");
  8. printList(list);//遍历输出列表
  9. printf("请输入要查找的元素:");
  10. scanf("%d",&key);
  11. n = search(list,key);//查找元素
  12. if(n!=0)//没有找到第0个位置,说明查找到了
  13. printf("查找到该元素n:%d\n",list->data[n]);
  14. else//查找到哨兵位置说明没有该元素
  15. printf("未查找到该元素!\n");
  16. return 0;
  17. }

三. 完整代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*线性表结构体*/
  4. typedef struct List
  5. {
  6. int *data;//元素数组
  7. int length;//可以写入多少元素
  8. int num;//目前元素个数
  9. }List;
  10. /*初始化列表*/
  11. List *initList(int length)
  12. {/*参数length:有多少元素空位*/
  13. List *list = (List*)malloc(sizeof(List));//为列表申请空间
  14. list->length = length;//元素长度写入
  15. list->data = (int*)malloc(sizeof(int)*length);//为列表内的数组申请空间
  16. list->num = 0;//初始元素个数为0
  17. return list; //返回列表
  18. }
  19. /*向列表内写入元素*/
  20. void listAdd(List *list,int data)
  21. {/*参数一:列表指针
  22. 参数二:要写入的元素*/
  23. list->data[list->num] = data;//将元素按序写入
  24. list->num += 1;//列表内元素数量加一
  25. }
  26. /*查找元素*/
  27. int search(List *list,int key)
  28. {/*参数一:列表指针
  29. 参数二:要查找的元素*/
  30. int i;
  31. for(i=0;i<list->num;i++)//循环遍历列表中的每一个元素直到与要查找的元素值相等
  32. {
  33. if(list->data[i]==key)
  34. return key;
  35. }
  36. return -1;//没查到返回-1
  37. }
  38. /*遍历输出列表内的元素*/
  39. void printList(List *list)
  40. {/*参数list:列表指针*/
  41. int i;
  42. for(i=0;i<list->num;i++)//循环遍历,按序输出列表内data的值
  43. printf("%d ",list->data[i]);
  44. printf("\n");
  45. }
  46. int main()
  47. {
  48. List *list = initList(5);//初始化,列表长度设为5
  49. int i,key,n;
  50. for(i=0;i<5;i++)
  51. listAdd(list,i);//往列表内写入元素
  52. printf("列表内元素:");
  53. printList(list);//遍历输出列表
  54. printf("请输入要查找的元素:");
  55. scanf("%d",&key);
  56. n = search(list,key);//查找元素
  57. if(n>=0)
  58. printf("查找到该元素n:%d\n",n);
  59. else
  60. printf("未查找到该元素!\n");
  61. return 0;
  62. }

 四.运行结果

 

 

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

闽ICP备14008679号