链表中查找关键字
/*
#include<stdio.h>
#include<stdlib.h>
void InArray(int *p,int p_length)
{
printf("请输入你的数组的值:\n");
int i;
for(i=0;i<p_length;i++){
scanf("%d",p+i);
}
}
int FindKey(int *p,int p_length,int Key)
{
int i;
for(i=0;i<p_length&&*(p+i)-Key;i++);
if(i==p_length){
i=-1;
}
return i;
}
int FindKey(int *p,int p_length,int Key)
{
int i,tag=-1,flag=1;
for(i=0;i<p_length&&flag;i++){
if(*(p+i)==Key){
tag=i;
flag=0;
}
}
return tag;
}
int main()
{
int Key,t;
printf("请输入你的关键字:");
scanf("%d",&Key);
int *p;
int p_length;
printf("请输入你的数组的长度:");
scanf("%d",&p_length);
p=(int *)malloc(sizeof(int)*p_length);
InArray(p,p_length);
//查找数组中的一个关键字
t=FindKey(p,p_length,Key);
if(t!=-1){
printf("数组中找到了这个关键字:%d\n",*(p+t));
}
else{
printf("数组中没有这个关键字\n");
}
free(p);
return 0;
}
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data ;
struct node *next;
}ElemSN;
ElemSN * creatlink(int *p,int p_length)
{
ElemSN *head=NULL,*tail,*np;
for(int i=0;i<p_length;i++){
np=(ElemSN*)malloc(sizeof(ElemSN));
np->data=*(p+i);
np->next=NULL;
if(!head)
head=tail=np;
else
tail=tail->next=np;
}
return head;
}
void InitArray(int *p,int p_length)
{
int i;
printf("请输入你的数据集合的值:\n");
for(i=0;i<p_length;i++){
scanf("%d",p+i);
}
}
void PrintLink(ElemSN*Head)
{
ElemSN*p=Head;
while(p){
printf("%d",p->data);
if(p->next){
printf("->");
}
p=p->next;
}
printf("\n");
}
ElemSN*Find(ElemSN*Head,int key)
{
ElemSN*p;
for(p=Head;p&&p->data!=key;p=p->next);
return p;
}
int main()
{
int *p;
int p_length;
ElemSN*Head,*t;
int key;
printf("请输入你的数据集合长度的值:\n");
scanf("%d",&p_length);
printf("请输入你的关键字key:");
scanf("%d",&key);
p=(int *)malloc(sizeof(int)*p_length);
InitArray(p,p_length);
//创建链表
Head=creatlink(p,p_length);
//输出链表
PrintLink(Head);
//查找关键字
t=Find(Head,key);
if(!t){
printf("链表中没有这个关键字\n");
}
else{
printf("查找到了关键字%d\n",t->data);
}
free(p);
return 0;
}