现在的位置: 首页 > 综合 > 正文

链表排序

2013年04月04日 ⁄ 综合 ⁄ 共 878字 ⁄ 字号 评论关闭
# include "stdio.h"
# include "stdlib.h"
struct node
{
    int values;
    struct node *next;
};
struct node *create(int [],int);
void sort (struct node **);
int test_data[7]= {5,9,3,4,5,7,8};
main()
{
    struct node *h,*p;
    h=create(test_data,7);
    for(p=h; p; p=p->next) printf("%2d",p->values);
    printf("\n");
    sort(&h);
    for(p=h; p; p=p->next) printf("%2d" ,p->values);
    printf("\n");
}
struct node *create (int a[],int n)
{
    struct node *h,*q, *p;
    p=q=h=NULL;
    int flag=-1;
    for(; n; n--)
    {
        q=(struct node *) malloc(sizeof(struct node));
        q->values=a[n-1];
        if (flag==-1)
        {
            flag=1;
            q->next=NULL;
            p=h=q;
        }
        else
        {
            p->next=q;
            p=q;
            p->next=NULL;
        }
    }
    return h;
}
void sort (struct node **h)
{
    struct node *q,*p,*r,*s,*h1;
    h1=p=(struct node *)malloc(sizeof(struct node));
    p->next=*h;
    while(p->next!=NULL)
    {
        q=p->next;
        r=p;
        while (q->next!=NULL)
        {
            if(q->next->values<r->next->values) r=q;
            q=q->next;
        }
        if(r!=p)
        {
            s=r->next;
            r->next=s->next;
            s->next=p->next;
            p->next=s;
        }
        p=p->next;
    }
    *h=h1->next;/*问题:h1在程序中做了啥用?  */
    free(h1);
}

抱歉!评论已关闭.