猿问

动态链表错哪了?


#include "stdio.h"

#include<malloc.h>

#include<string.h>

#include<ctype.h>

#define LEN struct student


struct student{

long num;

float score;

struct student*next;

};

struct student*create()

{

char ch;

    struct student *head;

    struct student*p1,*p2;

    int a=0;

    printf("是否输入新数据:\n");

   

     while(toupper(ch=getchar())=='Y')

    {

      p1=(LEN*)malloc(sizeof(LEN));

      printf("num:");

      scanf("%ld",&(*p1).num);

      printf("score:");

      scanf("%d",&(*p1).score);

      getchar();//getchar吸收回车

      printf("是否输入新数据:\n");

      a++;

      if(a==1)

       head=p1;

      else

       (*p2).next=p1;

      p2=p1;

      p1->next=NULL;

      }

    return(head);

}

struct student * insert(struct student * head)

{

    struct student *p0,*p1,*p2;

    p0=(struct student * )malloc(sizeof(LEN));

    printf("\n输入所要插入节点的数据:");

    scanf("%ld,%f",&p1->num,&p1->score);

    p1=head;

    if(head==NULL)

    {

      head=p0;

      p0->next=NULL;

    }

    else

    if(p1->num>p0->num)

    {

    p0->next=head;

    head=p0;

    }

    else

    {

    while(p1!=NULL)

    {

    if(p1->num<p0->num)

    {

    p2=p1;

    p1=p1->next;

    }

    else

    {

    p0->next=p1;

    p2->next=p0;

    break;

    }

    }

    if(p1->next==NULL)

    {

    p0->next=NULL;

    p2->next=p0;

    }

   

    }

    return(head);  

 }

void print(struct student *head)

{

struct student *p;

p=head;

while(p!=NULL)

{

printf("\n学生学号:%d,成绩:%4.1f",p->num,p->score);//只是一个名

p=p->next;//测试随便输

}

}


void main( )

{

struct student *stu;

stu=create();

stu=insert(stu);

print(stu);

}


溯源1
浏览 1349回答 1
1回答
随时随地看视频慕课网APP
我要回答