拙木鸟


私信TA

用户名:723

访问量:17129

签 名:

等  级
排  名 1261
经  验 3037
参赛次数 0
文章发表 15
年  龄 0
在职情况 学生
学  校 上海大学
专  业

  自我简介:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct student
{
    int num;
    int score;
    struct student *link;
};
struct student *createlist(int n)//创建链表
{
    int i;
    struct student *dshead, *dslink, *dsnew;
    dshead = (struct student*)malloc(sizeof(struct student));
    dsnew = dslink = dshead;
    dshead->num = 0;
    dshead->score = 0;
    dshead->link = NULL;
    for (i = 0; i < n; i++)
    {
        dsnew = (struct student*)malloc(sizeof(struct student));
        dslink->link = dsnew;
        scanf("%d %d", &dsnew->num, &dsnew->score);
        dsnew->link = NULL;
        dslink = dsnew;
    }
    return dshead;
}
struct student *merge(struct student *dshead1, struct student *dshead2)//合并链条
{
    struct student *dslink = dshead1;
    while (dslink->link != NULL)
    {
        dslink = dslink->link;
    }
    dslink->link = dshead2->link;
    return dshead1;
}
void output(struct student *dshead2)//输出链条
{
    struct student *dsnow;
    dsnow = dshead2->link;
    do
    {
        printf("%d %d\n", dsnow->num, dsnow->score);
        dsnow = dsnow->link;
    } while (dsnow != NULL);
}
int main()
{
    int n, m;
    scanf("%d %d",&n,&m);
    struct student *dshead1 = createlist(n);
    struct student *dshead2 = createlist(m);
    struct student *p0,*p1;//p1记录当前位置,p0前一位置
    dshead1 = merge(dshead1, dshead2);//合并后的链条头
    p0 = dshead1;
    p1 = dshead1->link;
    int min,k = 0;
    struct student *dslink,*dsnew;
    for (int i = 1; i <= m + n; i++)//每次选出最小的序号
    {
        p1 = dshead1->link;
        min = p1->num;
        while (p1 != NULL)//找出剩下的最小值
        {
            if (p1->num < min)
            {
                min = p1->num;
            }
            p1 = p1->link;
        }
        k++;//用来区分是否是第一次,只有第一次需要对链头连接第二链
        p0 = dshead1;
        p1 = dshead1->link;
        while (p1->num != min)//找到最小值对应的位置,拼接在新的链条后面
        {
            p0 = p1;
            p1 = p1->link;
        }
        p0->link = p1->link;
        if (k == 1)
        {
            dshead2->link = p1;
            dslink = p1;
            dslink->link = NULL;
        }
        else
        {
            dslink->link = p1;
            dslink = dslink->link;
            dslink->link = NULL;
        }
    }
    output(dshead2);
    system("pause");
    return 0;
}

 

0.0分

0 人评分

  评论区

dsnew = dslink = dshead;然后return dshead;真的没问题吗?
2017-12-02 10:44:21
  • «
  • 1
  • »