【输入形式】
第一行输入一个整数N;
第二行输入N个整数,创建有头结点单链表;
后面进行若干次查找,每输入一个关键字值,输出查找结果。(利用scanf()的返回值判断是否仍有数据输入)
【输出形式】
若找到关键字值,输出其在链表中首次出现的位序;
若未找到,输出-1。
【样例输入】
5
12 34 96 -67 100
12
100
96
28
【样例输出】
1
5
3
-1
/*建立带头结点的单链表并实现查找*/
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList *L,int n)
{
LNode *p,*q;
int i;
*L=(LinkList)malloc(sizeof(LNode));
if(!*L)
return ERROR;
(*L)->next=NULL;
p=*L;
for(i=0;i<n;i++)
{
q=(LNode *)malloc(sizeof(LNode));
if(!q)
return ERROR;
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
return OK;
}
int GstList(LinkList L,int n,ElemType *e)
{
LNode *p;
int j=1;
p=L->next;
while(p&&j<n)
{
p=p->next;
j++;
}
if(!p||j>n)
{
return ERROR;
}
*e=p->data;
return OK;
}
int main()
{
LinkList L=NULL;
int n,x,i,j;
scanf("%d",&n);
CreateList(&L,n);
while(scanf("%d",&x)!=EOF)
{
for(i=0;i<n;i++)
{
}
}
return 0;
}
查找那块应该是这么写的,但是主函数就不会写了
修改如下,供参考:
/*建立带头结点的单链表并实现查找*/
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList *L,int n)
{
LNode *p,*q;
int i;
*L=(LinkList)malloc(sizeof(LNode));
if(!*L)
return; //return ERROR;
(*L)->next=NULL;
p=*L;
for(i=0;i<n;i++)
{
q=(LNode *)malloc(sizeof(LNode));
if(!q)
return; //return ERROR;
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
return; //return OK;
}
int GstList(LinkList L,int n,ElemType *e)
{
LNode *p;
int j=1;
p=L->next;
while(p && p->data != n)//while(p&&j<n)
{
p=p->next;
j++;
}
if(!p)
{
return ERROR;
}
*e = j;//*e=p->data;
return OK;
}
int main()
{
LinkList L=NULL;
ElemType e;
int n,x,i,j;
scanf("%d",&n);
CreateList(&L,n);
while(scanf("%d",&x)!=EOF)
{
if(GstList(L,x,&e))
printf("%d\n",e);
else
printf("-1\n");
}
return 0;
}