编写一个函数link_sort(),用链表将数组int a[] = {49, 38, 65, 97, 76, 13, 27} 按升序排序

来源:互联网 发布:360怎么禁止软件联网 编辑:程序博客网 时间:2024/06/05 03:41
//编写一个函数link_sort(),用链表将数组int a[] = {49, 38, 65, 97, 76, 13, 27} 按升序排序#include <stdio.h>#include <stdlib.h>typedef int datatype;typedef struct linklist{    datatype a;    struct linklist * next;}link_list,*link_plist;void linklist_init(link_plist *H);void linklist_insert(link_plist p,link_plist new);void linklist_show(link_plist h);void linklist_create(link_plist h);struct linklist *link_sort(link_plist h);int main(void){    link_plist h;    linklist_init(&h);    linklist_create(h);    link_sort(h);    linklist_show(h);    return 0;}//初始化,传入指针的指针void linklist_init(link_plist *H){    *H = (link_plist)malloc(sizeof(link_list));    if(*H == NULL)    {        perror("malloc failed");        exit(1);    }    (*H)->next = NULL;//把头结点的next指针赋值为NULL}//插入void linklist_insert(link_plist p,link_plist new){    new->next = p->next;    p->next = new;}//遍历(厉害啊)void linklist_show(link_plist h){    link_plist t;    printf("|_|");    for(t=h->next;t!=NULL;t=t->next)//移动t        printf("---->%d",t->a);    printf("\n");}//创建一个表void linklist_create(link_plist h){    int i;    link_plist new,p=h;    int a[] = {49, 38, 65, 97, 76, 13, 27} ;    for(i=0;i<7;i++)    {        new = (link_plist)malloc(sizeof(link_list));//用malloc动态分配内存        //malloc之后一般要判断是否申请成功        if(NULL == new)        {            perror("malloc failed");//用perror            exit(1);        }        new->a = a[i];        //插入        new->next = p->next;        p->next = new;        //linklist_insert(p,new);        p = p->next;//让p始终指向表尾        linklist_show(h);    }}struct linklist *link_sort(link_plist h){    //将原链表拆分成两个表:一个空表,一个数据表    link_plist p,t;    link_list tmp;    p=h->next;//数据表 跳过头节点    t=h->next;//目的是指向链表的尾节点    while(t != NULL)//如果尾节点不为空 就一直遍历下去    {        while(p->next != NULL)//如果指向新开辟的结点不为空就一直遍历下去        {            p = p->next;//指向下一个新开辟的结点            if(t->a > p->a)            {                tmp.a = t->a;                t->a = p->a;                p->a = tmp.a;            }        }        t = t->next;        p = t;//保存p在t的下一个节点    }    return h;}/*$ ./a.out|_|---->49|_|---->49---->38|_|---->49---->38---->65|_|---->49---->38---->65---->97|_|---->49---->38---->65---->97---->76|_|---->49---->38---->65---->97---->76---->13|_|---->49---->38---->65---->97---->76---->13---->27|_|---->13---->27---->38---->49---->65---->76---->97*/
阅读全文
0 0
原创粉丝点击