| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3648 人关注过本帖
标题:归并两个递增序列链表为一个递减有序链表
取消只看楼主 加入收藏
天空Sky
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-9-22
收藏
 问题点数:0 回复次数:0 
归并两个递增序列链表为一个递减有序链表
刚学C语言,搞不懂链表。。。
假设有两个按元素值递增有序排列的线性表a和b,均以单链表作为存储结构,请编程实现将表a和表b归并成一个按元素值递减有序排列的线性表c(注意:非严格递减,也就是说本题中的数据有可能相等),并要求利用原表的结点空间构造c表。第一行先输入两个小于100的正整数m,n,第二行从小到大的输入m个整数,第三行从小到大的输入n个整数归并这两个序列为一个递减的序列c,用链表存储,之后输出按顺序输出链表c的值,每个数占一行。
输入样例4 3
2 6 6 10
3 10 50
输出样例
50
10
10
6
6
3
2

同学教我,教完我就出去了。。。但我发现输入与输出格式不对,只能分别输入两个链表的内容,不好意思再麻烦他,各位前辈,请问如何将下面的程序改成该题样式?
typedef struct node
{
    int data;
    struct node *next;
}node,*list;
void init(list &head)
{
    head=(list)malloc(sizeof(node));
    head->next=NULL;
}

void input(list &h)
{
    list p,q;
    q=h;
    //printf("输入数据的个数 n : ");
    int n;
    scanf("%d",&n);
    //printf("请输入 %d 个有序递增数据:\n",n);
    for (int i=0;i<n;i++)
    {
    // printf("第 %d 个: ",i+1);
    p=(list)malloc(sizeof(node));
    scanf("%d",&p->data);
    p->next=q->next;
    q->next=p;
    q=p;
    }
}

void output(list h)
{
    list p;
    p=h->next;
    //printf("输出数据\n");
    while(p!=NULL)
    {
    printf("%d\n",p->data);
    p=p->next;
    }
    printf("\n");
}

void combine(list &a,list &b,list &c)
{
    list p,q,t;
    p=a->next;
    q=b->next;
    free(b);
    b=q;
    c=a;
    a=p;
    c->next=NULL;
    while(p&&q)
    {
    if (p->data<=q->data)
    {
    a=a->next;
    p->next=c->next;
    c->next=p;
    p=a;
    }
    else
    {
    b=q->next;
    q->next=c->next;
    c->next=q;
    q=b;
    }
    }
    if (p!=NULL)
    {
    while(p)
    {
    a=a->next;
    p->next=c->next;
    c->next=p;
    p=a;
    }
    }
    if (q!=NULL)
    {
    while(q)
    {
    b=q->next;
    q->next=c->next;
    c->next=q;
    q=b;
    }
    }

}
int main()
{
    list a,b,c;
    init(a);init(b);
    //printf("\n输入链表A :\n");
    input(a);
    //printf("\n输入链表B :\n");
    input(b);

    //printf("输出合并后的链表:\n");
    combine(a,b,c);
    output(c);
}

[ 本帖最后由 天空Sky 于 2015-9-23 10:52 编辑 ]
搜索更多相关主题的帖子: 元素 空间 C语言 正整数 线性表 
2015-09-23 10:50
快速回复:归并两个递增序列链表为一个递减有序链表
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030102 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved