用C实现链表 能够运行

#include<stdio.h> #include<malloc.h> #define NULL 0 #define LEN sizeof(struct student)

 struct student  {   int num;   int score;   struct student *next;  };  int n; //--------------------------------------------------    struct student * creat()//返回头指针    {           struct student *head;    struct student *p1,*p2;       n = 0;    p1 = p2 = (struct student * )malloc(LEN);    scanf("%d%d",&p1->num,&p1->score);       head = NULL;        while(p1->num != 0)        {  n=n+1;        if(n==1)     {      head=p1;//当为第一个结点的时候,head作为头指针  p1作为输入的数

    }        else     {      p2->next = p1;//当有其他的输入的时候,作为p2下一个元素            p2 = p1;      p1 = (struct student*)malloc(LEN);      scanf("%d%d",&p1->num,&p1->score);     }     }    p2->next = NULL;

   return(head);//返回头指针     } //--------------------------------------------------    void print(struct student *head)    {     struct student *p;     printf("/nNow,These %d records are:/n",n);     p = head;     if(head != NULL)      do      {       printf("%d  %d/n",p->num,p->score);       p = p->next;      }while(p != NULL);    }

//------------------------------------------------

   struct student * del(struct student *head,int num)    {     struct student *p1,*p2;             if(head == NULL)     {      printf("/nlist null!/n");      goto end;     }              p1 = head;       while(num != p1->num && p1->next != NULL)//没找到    {                   p2 = p1;     p1 = p1->next;//p1后移一个    }

   if(num == p1->num)//找到了       {     if(p1 == head)      head = p1->next;     else      p2->next = p1->next;     printf("delect:%d/n",num);     n= n-1;    }    else    {     printf("%d not been found!",num);    }          end:    return (head);    } //----------------------------------------------------- struct student * insert(struct student *head,struct student *stud) {  struct student *p0;  struct student *p1,*p2;  p1 = head;  p0 = stud;  if(head == NULL)  {   head = p0;   p0->next = NULL;  }  else  {   while((p0->num>p1->num) && (p1->next != NULL))   {    p2 = p1;    p1 = p1->next;   }   if(p0->num <= p1->num)   {    if(head == p1)     head = p0;    else     p2->next = p0;    p0->next = p1;   }   else   {    p1->next = p0;    p0->next = NULL;   }   n = n+1;   return (head);  } }   //-----------------------------------------  void  main()  {   struct student *head;   struct student *stu;   int del_num;   printf("input records:/n");   head = creat();   print(head);   printf("/ninput the deleted number:");   scanf("%d",&del_num);   while(del_num != 0)   {    head = del(head,del_num);    print(head);    printf("input the deleted record:");    scanf("%d",&del_num);   }   printf("/ninput the inserted record:");   stu = (struct student *)malloc(LEN);   scanf("%d%d",&stu->num,&stu->score);   while(stu->num !=0)   {    head = insert(head,stu);    print(head);    printf("input the inserted record:");    stu = (struct student *)malloc(LEN);    scanf("%d%d",&stu->num,&stu->score);   }  }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值