Manchester


私信TA

用户名:wenyajie

访问量:332009

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 65548
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
输入线性表LA,LB

据算法:首先i=0指向LA第一个元素,j=0指向LB第一个元素,k=0指向LC第一个元素

从LA,LB中第一个元素开始比较,若LA[i]<=LB[j]  ,则LC[k]=LA[i],同时i++,k++(i,k指针后移)
若LA[i]>LB[j]  ,则LC[k]=LB[j],同时j++,k++(j,k指针后移)

以上比较,插入操作当LA或者LB有一个遍历完结束

把未遍历完的表(LA或LB)中未遍历的部分加到LC最后一个元素后面

按要求输出LC


注意事项:
题目中:m大于等于0  n大于等于0,当输入的m和n 都为0 时,不能有任何输出,直接换行合并下一组数据
在代码中加了排序,怕输入数据不是非递减
参考代码:

#include<stdio.h>
#include<malloc.h>
int * creat_LA(int m);
int * creat_LB(int n);
int * creat_LC(int *LA,int *LB,int x,int m,int n);
void output_LC(int *LC,int x);
void sort_(int *L,int d);
/*在代码中加了排序,怕输入数据不是非递减*/
int main()
{
   int *LA=NULL,*LB=NULL,*LC=NULL;
   int m,n;

   while(scanf("%d",&m)!=EOF)
     {

         LA=creat_LA(m);
         scanf("%d",&n);
         LB=creat_LB(n);

         LC=creat_LC(LA,LB,m+n,m,n);
         if(m==0&&n==0)
         printf("\n");
         else
         output_LC(LC,n+m);

         free(LA);
         free(LB);
         free(LC);

     }
return 0;
}
/*---------------------------------------------*/
int * creat_LA(int m)
{
   int *la=(int *)malloc(m*sizeof(int));

     for(int i=0;i<m;i++)
      scanf("%d",&la[i]);

     sort_(la,m);
      return la;

}
/*---------------------------------------------*/
int * creat_LB(int n)
{
   int *lb=(int *)malloc(n*sizeof(int));

     for(int i=0;i<n;i++)
      scanf("%d",&lb[i]);

     sort_(lb,n);
      return lb;

}
/*---------------------------------------------*/
int * creat_LC(int *LA,int *LB,int x,int m,int n)
{

    int *lc=(int *)malloc(x*sizeof(int));

    int i=0,j=0,k=0;

    while(i<m&&j<n)
        if(LA[i]<=LB[j])
             lc[k++]=LA[i++];
           else
             lc[k++]=LB[j++];
    

    while(i<m)
    lc[k++]=LA[i++];

    while(j<n)
    lc[k++]=LB[j++];
 
return lc;
}
/*---------------------------------------------*/
void output_LC(int *LC,int x)
{
   for(int i=0;i<x-1;i++)
    printf("%d ",LC[i]);
    printf("%d\n",LC[x-1]);
}
/*---------------------------------------------*/
void sort_(int *L,int d)
{

   int min,term;

   for(int i=0;i<d;i++)
    {
       min=i;
       for(int j=i;j<d;j++)
          {
             if(L[j]<L[min])
             min=j;
          }

          term=L[i];
          L[i]=L[min];
          L[min]=term;

    }

}

别忘点赞哦-.-!

 

0.0分

8 人评分

  评论区

traverseList(pHead3);

    return 0;
}
大佬帮忙看看哪里出了错,codeblock输入样例运行正确,但是提交后错误50%,谢谢了。
2019-08-10 17:01:27
while (q != NULL)
    {
        PNODE pNew = (PNODE)malloc(sizeof(NODE));
        pNew->data = q->data;
        q = q->pNext;
        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
    }

    return pHead3;
}

void traverseList(PNODE pHead)
{
    PNODE p = pHead->pNext;

    while (p != NULL)
    {
        printf("%d ", p->data);
        p = p->pNext;
    }
    return;
}

int main(void)
{
    int m, n;

    scanf("%d", &m);
    PNODE pHead1 = createList(m);

    scanf("%d", &n);
    PNODE pHead2 = createList(n);


    PNODE pHead3 = mergeList(pHead1, pHead2, m, n);
2019-08-10 17:00:20
if (p->data <= q->data)
            {
                pNew->data = p->data;
                p = p->pNext;
            }
            else if (p->data > q->data)
            {
                pNew->data = q->data;
                q = q->pNext;
            }
            pTail->pNext = pNew;
            pNew->pNext = NULL;
            pTail = pNew;
        }
    }

    while (p != NULL)
    {
        PNODE pNew = (PNODE)malloc(sizeof(NODE));
        pNew->data = p->data;
        p = p->pNext;
        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
    }
2019-08-10 16:59:54
PNODE mergeList(PNODE pHead1, PNODE pHead2, int m, int n)
{
    int i;

    if (pHead1 == NULL || pHead2 == NULL)
    {
        printf("error");
        exit(-1);
    }

    PNODE p = pHead1->pNext;
    PNODE q = pHead2->pNext;
    PNODE pHead3 = (PNODE)malloc(sizeof(NODE));
    PNODE pTail = pHead3;
    pTail->pNext = NULL;

    if (pHead3 == NULL)
    {
        printf("error");
        exit(-1);
    }

    for (i = 0; i < m + n; i++)
    {
        while (p != NULL && q != NULL)
        {
            PNODE pNew = (PNODE)malloc(sizeof(NODE));
2019-08-10 16:59:16
#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
    int data;
    struct Node *pNext;
}NODE, *PNODE;

PNODE createList(int len)
{
    int i;

    PNODE pHead = (PNODE)malloc(sizeof(NODE));
    PNODE pTail = pHead;
    pTail->pNext = NULL;

    if (pHead == NULL)
    {
        printf("error");
        exit(-1);
    }

    for (i = 0; i < len; i++)
    {
        PNODE pNew = (PNODE)malloc(sizeof(NODE));

        scanf("%d", &pNew->data);

        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
    }

    return pHead;
}
2019-08-10 16:57:22
感谢,就是没想到都是0要直接换行解决下一组数据
2019-03-15 13:27:58
代码贴不上来。。。。。。
2018-10-12 09:10:40
大佬帮我看下这个哪里有问题好嘛,提交总是运行错误,我实在是找不到
2018-10-12 09:09:27