按值查找**

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. typedef struct node /*定义结点的存储结构*/
  4. {
  5. int data;
  6. struct node *next;
  7. }NODE;
  8. NODE *create() /*此函数采用后插入方式建立单链表,并返回一个指向链表表头的指针*/
  9. {
  10. NODE *head,*q,*p; /*定义指针变量*/
  11. char ch;
  12. int a;
  13. head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/
  14. q=head;
  15. ch='*';
  16. printf("\nInput the list :");
  17. while(ch!='?') /*"ch"为是否建立新结点的标志,若"ch"为"?"则输入结束*/
  18. {
  19. scanf("%d",&a); /*输入新元素*/
  20. p=(NODE*)malloc(sizeof(NODE));
  21. p->data=a;
  22. q->next=p;
  23. q=p;
  24. ch=getchar(); /*读入输入与否的标志*/
  25. }
  26. q->next=NULL;
  27. return(head); /*返回表头指针head*/
  28. }
  29. NODE *locate(NODE *head,int x) /*在已知链表中查找给定的值x*/
  30. {
  31. NODE *p;
  32. p=head->next;
  33. while((p!=NULL)&&(p->data!=x)) /*未到表尾且未找到给定数据*/
  34. p=p->next; /*指向下一个元素*/
  35. return(p);
  36. }
  37. main() /*主程序*/
  38. {
  39. int y;
  40. NODE *a,*b;
  41. a=create();
  42. printf("Input x: ");
  43. scanf("%d",&y);
  44. b=locate(a,y);
  45. if(b!=NULL)
  46. {
  47. printf("find:");
  48. printf("%5d",b->data); /*查找成功*/
  49. }
  50. else
  51. printf("error"); /*查找失败*/
  52. }

按序号查找

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. typedef struct node /*定义结点的存储结构*/
  4. {
  5. int data;
  6. struct node *next;
  7. }NODE;
  8. NODE *create() /*此函数采用后插入方式建立单链表,并返回一个指向链表表头的指针*/
  9. {
  10. NODE *head,*q,*p; /*定义指针变量*/
  11. char ch;
  12. int a;
  13. head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/
  14. q=head;
  15. ch='*';
  16. printf("\nInput the list :");
  17. while(ch!='?') /*"ch"为是否建立新结点的标志,若"ch"为"?"则输入结束*/
  18. {
  19. scanf("%d",&a); /*输入新元素*/
  20. p=(NODE*)malloc(sizeof(NODE));
  21. p->data=a;
  22. q->next=p;
  23. q=p;
  24. ch=getchar(); /*读入输入与否的标志*/
  25. }
  26. q->next=NULL;
  27. return(head); /*返回表头指针head*/
  28. }
  29. NODE *find(NODE *head,int i) /*在已知链表中查找给定的值i*/
  30. {
  31. int j=1;
  32. NODE *p;
  33. p=head->next;
  34. while((p!=NULL)&&(j<i)) /*未到表尾且未找到给定数据*/
  35. {
  36. p=p->next; /*指向下一个元素*/
  37. j++;
  38. }
  39. return(p);
  40. }
  41. main() /*主程序*/
  42. {
  43. int i;
  44. NODE *a,*b;
  45. a=create();
  46. printf("Input i: ");
  47. scanf("%d",&i);
  48. b=find(a,i);
  49. if(b!=NULL)
  50. {
  51. printf("find:");
  52. printf("%5d",b->data); /*查找成功*/
  53. }
  54. else
  55. printf("error"); /*查找失败*/
  56. }