按值查找**
#include<stdio.h>#include<malloc.h>typedef struct node /*定义结点的存储结构*/{ int data; struct node *next;}NODE;NODE *create() /*此函数采用后插入方式建立单链表,并返回一个指向链表表头的指针*/{ NODE *head,*q,*p; /*定义指针变量*/ char ch; int a; head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/ q=head; ch='*'; printf("\nInput the list :"); while(ch!='?') /*"ch"为是否建立新结点的标志,若"ch"为"?"则输入结束*/ { scanf("%d",&a); /*输入新元素*/ p=(NODE*)malloc(sizeof(NODE)); p->data=a; q->next=p; q=p; ch=getchar(); /*读入输入与否的标志*/ } q->next=NULL; return(head); /*返回表头指针head*/}NODE *locate(NODE *head,int x) /*在已知链表中查找给定的值x*/{ NODE *p; p=head->next; while((p!=NULL)&&(p->data!=x)) /*未到表尾且未找到给定数据*/ p=p->next; /*指向下一个元素*/ return(p);}main() /*主程序*/{ int y; NODE *a,*b; a=create(); printf("Input x: "); scanf("%d",&y); b=locate(a,y); if(b!=NULL) { printf("find:"); printf("%5d",b->data); /*查找成功*/ } else printf("error"); /*查找失败*/}
按序号查找
#include<stdio.h>#include<malloc.h> typedef struct node /*定义结点的存储结构*/{ int data; struct node *next;}NODE;NODE *create() /*此函数采用后插入方式建立单链表,并返回一个指向链表表头的指针*/{ NODE *head,*q,*p; /*定义指针变量*/ char ch; int a; head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/ q=head; ch='*'; printf("\nInput the list :"); while(ch!='?') /*"ch"为是否建立新结点的标志,若"ch"为"?"则输入结束*/ { scanf("%d",&a); /*输入新元素*/ p=(NODE*)malloc(sizeof(NODE)); p->data=a; q->next=p; q=p; ch=getchar(); /*读入输入与否的标志*/ } q->next=NULL; return(head); /*返回表头指针head*/}NODE *find(NODE *head,int i) /*在已知链表中查找给定的值i*/{ int j=1; NODE *p; p=head->next; while((p!=NULL)&&(j<i)) /*未到表尾且未找到给定数据*/ { p=p->next; /*指向下一个元素*/ j++; } return(p);}main() /*主程序*/{ int i; NODE *a,*b; a=create(); printf("Input i: "); scanf("%d",&i); b=find(a,i); if(b!=NULL) { printf("find:"); printf("%5d",b->data); /*查找成功*/ } else printf("error"); /*查找失败*/}