对链表实现直接插入排序

#include 
#include 

typedef struct LNode{
    int data ;
    struct LNode *next ;
}LNode , *LinkList;

LinkList Createlist( LinkList L){
    int num ;
    LNode *p , *r = L ;
    printf("请输入数据:\n");
    scanf("%d",&num) ;
    while( num!= -1 ){
        p = (LNode *)malloc(sizeof(LNode));
        p->data = num ;
        r->next = p ;
        r = p ;
        scanf("%d",&num) ;
    }
    r->next = NULL ;
    return L ;
}

void ViewLinklist( LinkList L ){
    LNode *p = (LNode *)malloc(sizeof(LNode));
    p = L->next ;
    printf("链表为:");
    while( p->next ){
        printf("%d ->",p->data);
        p = p->next ;
    }
    printf("%d",p->data);
}

void InsertSort( LinkList L ){
    LNode *p , *r , *q ;
    p = L->next ;
    q = p->next ;                             //q保存p的后继
    p ->next = NULL;
    p = q ;
    while(p!=NULL){
        q = p->next;
        r = L ;
        while(r->next!=NULL&&r->next->datadata){
            r = r->next;                     //在有序表中查找p的前驱
        }
        p->next = r->next ;
        r->next = p ;
        p = q ;
    }
}

int main()
{
    LinkList L = (LinkList )malloc(sizeof(LNode));
    Createlist( L ) ;
    ViewLinklist(L);
    printf("\n");
    InsertSort(L);
    printf("直接插入排序:\n");
    ViewLinklist(L);
    return 0;
}

 

你可能感兴趣的:(链表)