zoukankan      html  css  js  c++  java
  • 两个单链表的合并,并排序

    /*先看看单链表的知识很快就能做出来

    这个用三个结构体指针,两个p1,p2指向建立的链表,一个p3指向新的链表
    判断判断p1p2指向的数据那个小,小的赋值给p3->next(升序),小的那个p1(p2)下移一个
    赋值顺序要搞对,要不然指向有误

    */

    #include<stdlib.h>
    #include<stdio.h>
    #include<malloc.h>
    typedef struct node
    {
    int data;
    struct node *next;
    }lnode,*linklist;

    int len(linklist l);
    void sort(linklist l);
    void print(linklist l);
    linklist creat();
    linklist gb(linklist p,linklist q);

    int main()
    {
    linklist l,p,q,r,s;
    l=(linklist)malloc(sizeof(lnode));
    l->next=NULL;
    p=l;q=l;

    p=creat();
    // sort(p);
    // print(p);
    printf(" ");

    q=creat();
    // sort(q);
    // print(q);
    printf(" ");

    r=gb(p,q);
    print(r);
    sort(r);
    print(r);

    return 0;
    }

    linklist creat()
    {
    linklist l,p,s;int i,n;
    l=(linklist)malloc(sizeof(lnode));
    if(l==NULL)
    {
    printf("分配内存失败");
    exit(-1);
    }
    l->next=NULL;
    l->data=-1;
    p=l;
    printf("输入链表的长度:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    s=(linklist)malloc(sizeof(lnode));
    if(s==NULL)
    {
    printf("分配内存失败");
    exit(-1);
    }
    s->next=NULL;
    scanf("%d",&s->data);
    p->next=s;
    p=s;
    }

    return l;
    }


    linklist gb(linklist p,linklist q)
    {
    linklist r,s,t,C;
    C=(linklist)malloc(sizeof(lnode));
    C->next=NULL;
    t=C;
    r=p->next;
    s=q->next;

    while(r&&s)
    {
    if(r->data>=s->data)
    {
    t->next=s;
    t=s;
    s=s->next;

    }
    else
    {
    t->next=r;
    t=r;
    r=r->next;

    }
    }

    t->next=r?r:s;//将剩余的数放到链表C中


    return C;
    }

    void print(linklist l)
    {
    linklist p;
    int n,j,i;
    p=l->next;
    while(p!=NULL)
    {
    printf("%d ",p->data);
    p=p->next;
    }
    printf(" ");
    }

    void sort(linklist l)
    {
    linklist q,p,s;
    int i,j,temp;

    for(i=0,p=l->next;i<len(l)-1; i++,p=p->next)

    for(j=i+1,q=p->next;j<len(l);j++,q=q->next)
    {
    if( p->data > q->data )
    { temp=p->data;
    p->data=q->data;
    q->data=temp;
    }
    }
    }

    int len(linklist l)
    {
    linklist p,s;
    int j=0;
    p=l->next;
    while(p!=NULL)
    {
    j++;
    p=p->next;
    }
    return j;
    }

  • 相关阅读:
    一文看懂:史上最通俗的视频编码技术详解
    浅谈常见的七种加密算法及实现
    自毁程序
    windows下, 宽字符和窄字符的打印输出
    修改Django自带auth模块的表名
    苹果IOS微信网页cookie缓存清理
    django_rest_framework ModelViewSet不支持PUT方法,PUT修改后不生效
    nginx的access日志打印十六进制x16x03x01x02x00x01
    解决/usr/bin/ld: cannot find -lmariadb报错
    使用antd的Upload组件和axios上传文件
  • 原文地址:https://www.cnblogs.com/mykonons/p/5863390.html
Copyright © 2011-2022 走看看