「已注销」 2022-04-20 15:22 采纳率: 33.3%
浏览 116
已结题

单链表查找和插入无法执行 返回值3221225477

代码如下,运行到插入和查找的时候会没办法继续,返回值3221225477,请问是哪里出了问题?如何检查修改 谢谢

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include<string.h>
#define N 10
#define error 0
#define ok 1
struct {
char id[N];
char name[N];
float price;
}book;

struct lnode {
book data;
struct lnode* next;
};

//头插法
struct lnode* creatlist1(struct lnodet l, int n) {
lnode
p;
int i;
for (i = 0; i < n; i++)
{
p = (struct lnode*)malloc(sizeof(lnode));
printf("输入数据 %d:", i + 1);
scanf("%s %s %f", p->data.id, p->data.name, &p->data.price);
p->next = l->next;
l->next = p;
}
return l;
}

//输出
int printlist(struct lnode* l)
{
lnode* p;
int i;
p = l->next;
while (p != NULL)
{
printf("data:%s %s %f\n", p->data.id, p->data.name, p->data.price);
p = p->next;
}
return ok;
}

//插入
int insertlist(struct lnode* l,int i,book e){
int j;
lnode* p;
lnode* s;
j=0;
p = l;
while(p && (j<i-1)){
p=p->next;
j++;
}
if(!p||j>i-1)
{ return error;
}
s->data=e;
s->next=p->next;
p->next=s;
return ok;

}

//查找
void sreach(struct lnode* l)
{ lnode *p;
char id[N];
int i;
int j;
int flag;
p=l;
i=1;
printf("请输入书的id:\n");
scanf("%s",id);
while(p!=NULL){
if(strcmp(p->data.id,id) == 0)
{
flag=1;
j=i;
}
p=p->next;
i++;
}
if(flag==1){
printf("书的位置e:%d\n",j);
}
else
{
printf("表中无此书e\n");
}
}

int main()
{
struct lnode* l;
int n;
int p;
book e;
printf("请输入表L元素个数n:\n");
scanf("%d", &n);
intlist(&l);
creatlist1(l, n);
printlist(l);
printf("请输入要插入的位置p:\n");
scanf("%d",&p);
printf("请输入要插入的元素e:\n");
scanf("%s %s %f",e.id,e.name,e.price);
insertlist(l,p,e);
printlist(l);
sreach(l);
}

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-04-21 08:47
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    #define N 10
    #define error 0
    #define ok 1
    typedef struct {
        char id[N];
        char name[N];
        float price;
    }book;
    
    typedef book elemtype;
    
    typedef struct lnode {
        elemtype data;
        struct lnode* next;
    }lnode, * linklist;
    
    
    void intlist(linklist* l)
    {
        (*l) = (linklist)malloc(sizeof(lnode));
        (*l)->next = NULL;
    }
    
    //头插法
    linklist creatlist1(linklist l, int n) {
        lnode* p;
        //linklist l;
        int i;
        for (i = 0; i < n; i++)
        {
            p = (linklist)malloc(sizeof(lnode));
            printf("输入数据 %d:", i + 1);
            scanf("%s %s %f", p->data.id, p->data.name, &p->data.price);
            p->next = l->next;
            l->next = p;
        }
        return l;
    }
    
    //输出
    int printlist(linklist l)
    {
        lnode* p;
        int i;
        p = l->next;
        while (p != NULL)
        {
            printf("data:%s %s %f\n", p->data.id, p->data.name, p->data.price);
            p = p->next;
        }
        return ok;
    }
    
    //插入
    int insertlist(linklist l, int i, elemtype e) {
        int j;
        lnode* p;
        lnode* s;
        if (i < 1)  return error;      //修改
        j = 0;
        p = l;
        while (p && j < (i - 1)) {  
            p = p->next;
            j++;
        }
        if (!p || j > i - 1)  
        {
            return error;
        }
        s = (linklist)malloc(sizeof(lnode)); //修改
        s->data = e;
        s->next = p->next;
        p->next = s;
        return ok;
    }
    
    //查找
    void sreach(linklist l)
    {
        lnode* p;
        char id[N];
        int i = 1, j;
        int flag = 0;   //int flag;
        p = l->next;    //p = l;
                        //i = 1;
        printf("请输入书的id:\n");
        scanf("%s", id);   //scanf("%s", id[N]);
        while (p != NULL) {
            if (strcmp(p->data.id, id) == 0)
            {
                flag = 1;
                j = i;
            }
            p = p->next;
            i++;
        }
        if (flag == 1) {
            printf("书的位置e:%d\n", j);
        }
        else
        {
            printf("表中无此书e\n");
        }
    }
    
    int main()
    {
        linklist l;
        int n;
        int p;
        elemtype e;
        printf("请输入表L元素个数n:\n");
        scanf("%d", &n);
        intlist(&l);
        creatlist1(l, n);
        printlist(l);
    
        printf("请输入要插入的位置p:\n");
        scanf("%d", &p);
        printf("请输入要插入的元素e:\n");
        scanf("%s %s %f", e.id, e.name, &e.price); //修改
        //scanf("%s %s %f", e.id, e.name, e.price);
        insertlist(l, p, e);
        printlist(l);
    
        sreach(l);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 修改了问题 4月20日
  • 创建了问题 4月20日

悬赏问题

  • ¥15 在不同的执行界面调用同一个页面
  • ¥20 基于51单片机的数字频率计
  • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
  • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
  • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
  • ¥15 C++map释放不掉
  • ¥15 Mabatis查询数据
  • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
  • ¥15 关于E22-400T22S的LORA模块的通信问题
  • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路