搜索
查看: 8|回复: 0

运行后输入6会出现问题,就是删除位置比正确的多一时有问题

[复制链接]
 楼主| 发表于 6 天前 | 显示全部楼层 |阅读模式
5啊哈币
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define LEN sizeof(struct Student)
  4. struct Student
  5. {
  6.    long num;
  7.    float score;
  8.    struct Student *next;  
  9. };
  10. int n;


  11. //初始化
  12. struct Student* initiate(void)
  13. {
  14.     struct Student* head;
  15.     head=(struct Student *)malloc(LEN);
  16.     head->next=NULL;
  17.     return head;
  18. }


  19. void add(struct Student *head)
  20. {
  21.     struct Student *p,*q;
  22.     q=p=(struct Student*)malloc(LEN);
  23.     scanf("%ld,%f",&p->num,&p->score);           
  24.     while(p->num!=0)
  25.     {
  26.         n=n+1;
  27.         if(n==1)q=head;
  28.         q->next=p;
  29.         q=p;
  30.         p=(struct Student*)malloc(LEN);
  31.         scanf("%ld,%f",&p->num,&p->score);
  32.     }
  33.     q->next=NULL;
  34. }


  35. void print(struct Student *head)
  36. {   struct Student *p;
  37.     printf("Now,These %d record are:",n);
  38.     p=head->next;
  39.     while(p!=NULL)
  40.         {   
  41.             printf("%d,%5.1f",p->num,p->score);
  42.             p=p->next;
  43.         }
  44. }


  45. //逆置
  46. void reverse(struct Student *head)
  47. {
  48.     struct Student *p,*q;
  49.     p=head->next;
  50.     head->next=NULL;
  51.     while(p!=NULL)
  52.     {
  53.         q=p->next;
  54.         p->next=head->next;
  55.         head->next=p;
  56.         p=q;
  57.     }
  58. }


  59. //插入
  60. void insert(struct Student *head,int i,long x,float y)
  61. {
  62.     struct Student *p,*q;
  63.     int j=0;
  64.     p=head;
  65.     while(p!=NULL&&j<i-1)
  66.     {
  67.         p=p->next;
  68.         j++;
  69.     }
  70.     if(j!=i-1)
  71.         printf("Error!");
  72.     else
  73.     {
  74.         q=(struct Student*)malloc(LEN);
  75.         q->num=x;
  76.         q->score=y;
  77.         q->next=p->next;
  78.         p->next=q;
  79.     }
  80. }


  81. void scan(struct Student *head)
  82. {
  83.     struct Student *p,*q;
  84.     int i=1;
  85.   q=p=(struct Student*)malloc(LEN);
  86.   q->num=100;
  87.   q->score=1;           
  88.     while(i<6)
  89.     {
  90.       i++;
  91.         n=n+1;
  92.         if(n==1)q=head;
  93.         q->next=p;
  94.         q=p;
  95.         p=(struct Student*)malloc(LEN);
  96.         p->num=i*100;
  97.     p->score=i;
  98.     }
  99.     q->next=NULL;
  100. }


  101. //删除
  102. void delet(struct Student *head,int i)
  103. {
  104.     struct Student *p,*q;
  105.     int j=0;
  106.     p=head;
  107.     while(p->next!=NULL&&j<i-1)
  108.     {
  109.       p=p->next;
  110.       j++;
  111.   }
  112.   if(j!=i-1)
  113.       printf("Error!");
  114.     else
  115.     {
  116.       q=p->next;
  117.       p->next=q->next;
  118.       free(q);
  119.   }
  120. }


  121. //主函数
  122. int main()
  123. {
  124.     struct Student *head;
  125.     struct Student *p;
  126.     int i,k;
  127.     long x;
  128.     float y;
  129.     head=initiate();
  130.     scan(head);
  131.     print(head);
  132.     reverse(head);
  133.     print(head);
  134.     printf("请输入插入位置及学号与分数:");
  135.     scanf("%d,%ld,%f",&i,&x,&y);
  136.     insert(head,i,x,y);
  137.     print(head);
  138.   printf("请输入删除位置:");
  139.   scanf("%d",&k);
  140.   delet(head,k);
  141.     print(head);
  142.   return 0;   
  143. }




复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表