rt

解决方案 »

  1.   


    typedef struct node  
    {  
    int i;  
    node *next;  
    }NODE;  NODE *bubblesort(NODE *head)  
    {
    NODE *q,*tail,*p=(NODE*)malloc(sizeof(NODE)); // 使指针p指向新开辟的结点 
    p->next=head; // 使新结点的next成员指向旧链表的头head 
    head=p; // 旧链表头head指向新结点 
    // 以上三条语句的作用是在旧链表head的前面增加一个结点 
    tail=NULL;  
    while(tail!=head->next)   
    {
    p=head;  
    q=p->next;  // q总是指向"p所指结点"的下一结点 
    while(q->next!=tail)  // 当q->next的值为NULL是,表示已达链表结尾 

    if(p->next->i <q->next->i)  // 当前一结点的i值小于后一结点的i值是, 
    {
    p->next=q->next;  
    q->next=q->next->next;  
    p->next->next=q;  
    }  
    p=p->next;  
    q=p->next; // 以上两条语句使p、q分别指向各自的下一结点 
    }  
    tail=q; // 使tail指向"每次排序后的q所指的结点" 
    }  
    p=head->next;  // p指向head->next,也就是p指向旧链表的表头 
    free(head);  // 释放在函数内新开辟的结点 
    return(p); 
    }  具体参见数据结构,算法等书籍