| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 331 人关注过本帖
标题:下面是链表的排序,可在注释处存在疑问,请大神指教。
只看楼主 加入收藏
涧边幽草
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-11-4
结帖率:88.89%
收藏
 问题点数:0 回复次数:0 
下面是链表的排序,可在注释处存在疑问,请大神指教。
#include "stdio.h"
#include "malloc.h"
#define LEN sizeof(struct student)

struct student
{
     long num;
     int score;
     struct student *next;
};

struct student *create(int n)
{
     struct student *head=NULL,*p1=NULL,*p2=NULL;
     int i;
     for(i=1;i<=n;i++)
     {  p1=(struct student *)malloc(LEN);
        scanf("%ld",&p1->num);
        scanf("%d",&p1->score);
        p1->next=NULL;
        if(i==1) head=p1;
        else p2->next=p1;
        p2=p1;
      }
      return(head);
}

void print(struct student *head)
{
    struct student *p;
    p=head;
    while(p!=NULL)
    {
        printf("%8ld%8d",p->num,p->score);
        p=p->next;
        printf("\n");
    }
}

struct student *insert(struct student *head, struct student *stud)
{  struct student *p0,*p1,*p2;
    p1=head;  p0=stud;
    if(head==NULL)
      {head=p0;}
    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;}
     }
    return(head);
}

struct student *del(struct student *head,long num)
{
    struct student *p1,*p2;
    p1=head;
    while(p1!=NULL)
    {
        if(p1->num == num)
        {
          if(p1 == head) head=p1->next;
          else p2->next=p1->next;
          free(p1);
          break;
        }
        p2=p1;
        p1=p1->next;
    }
    return(head);
}

struct student *sort(struct student *head)
{
    struct student *p1,*p2;
    p2=head;p1=head;/*
    p2=p2->next;为何要这三步,然而没了这三条语句,却没法交换,
    可我不知道为什么要用这三条语句。为何下面循环中p1要从第二个结点开始。
    p1->next=NULL;
    p1=p2;*/

    while(p2->next!=NULL)
    {
        p2=p2->next;
        p1->next=NULL;
        head=insert(head,p1);
        p1=p2;
    }
    head=insert(head,p1);
    return (head);
}

main()
{
    struct student *head,*stu;
    int n;
    scanf("%d",&n);
    head=create(n);
    print(head);
    head=sort(head);
    print(head);
}
2015-11-28 00:16
快速回复:下面是链表的排序,可在注释处存在疑问,请大神指教。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022708 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved