按值查找**
#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"); /*查找失败*/
}