白日梦也迷茫
2021-09-28 21:01
采纳率: 88.9%
浏览 25

有头结点单链表查找关键字在链表中首次出现的位序

【输入形式】
第一行输入一个整数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;
}

查找那块应该是这么写的,但是主函数就不会写了

  • 好问题 提建议
  • 收藏

1条回答 默认 最新

  • qzjhjxj 2021-09-28 22:03
    已采纳

    修改如下,供参考:

    /*建立带头结点的单链表并实现查找*/
    #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;
    }
    
    
    已采纳该答案
    评论
    解决 1 无用
    打赏 举报

相关推荐 更多相似问题