数据结构链表部分内容,代码已有但有问题,希望修改

题目:设计一个程序,生成两个按值非递减有序排列的线性表LA和LB,再将LA和LB归并为一个新的线性表LC,且LC中的数据仍按值非递减有序排列,输出线性表LA、LB、LC。

以下是自己的代码,但是好像是main 函数的后半部分从设置完LA和LB的随机数之后就有错误,不知道错在哪,
##

#include <stdio.h>
#include <algorithm>
#include<time.h>
#include<cstdlib>
#include<iostream>
using namespace std;

bool cmp(int a,int b)
{
    return a <= b;
}
 
void print_array(int a[],int range)
{
    int i = 0;
    while(i < range)
    {
        printf("%d ",a[i ++]);
    }
    printf("\n");
} 
int main()
{
    int T1, T2;
    srand((unsigned)time(NULL));
    cout << "请输入第一个线性表元素的个数:" << endl;
    cin >> T1;
    int* LA= new int[T1];
    for (int i = 0; i < T1; i++) {
        LA[i] = rand()%10;
    }
    cout << "请输入第二个线性表元素的个数:" << endl;
    cin >> T2;
    int* LB = new int[T2];
    for (int i = 0; i < T2; i++)
    {
    
        LB[i] = rand()%10;;
    }
    int LC[T1+T2];
    sort(LA,LA + T1,cmp);
    printf("LA: ");
    print_array(LA,T1);   
    sort(LB,LB + T2,cmp);
    printf("LB: ");
    print_array(LB,T2); 
    int i = 0; 
    while(i < T2)
    {
        LC[i] = LA[i];
        LC[i + T2] = LB[i ++];
    }
    sort(LC,LC + T1+T2,cmp);
    printf("LC: ");
    print_array(LC,T1+T2); 
    system("pause");
    return 0;
}

img

img

这种题目是需要比较LA、LB中元素的大小,按照LA、LB元素的大小顺序添加到LC中, LC直接就是有序的。
不应该是简单的合并LA、LB元素到LC中之后再对LC用sort()重新排序。

你题目的解答代码如下:

#include <stdio.h>
#include <algorithm>
#include<time.h>
#include<cstdlib>
#include<iostream>
using namespace std;

bool cmp(int a,int b)
{
    return a <= b;
}

void print_array(int a[],int range)
{
    int i = 0;
    while(i < range)
    {
        printf("%d ",a[i ++]);
    }
    printf("\n");
}
int main()
{
    int T1, T2;
    srand((unsigned)time(NULL));
    cout << "请输入第一个线性表元素的个数:" << endl;
    cin >> T1;
    int* LA= new int[T1];
    for (int i = 0; i < T1; i++) {
        LA[i] = rand()%10;
    }
    cout << "请输入第二个线性表元素的个数:" << endl;
    cin >> T2;
    int* LB = new int[T2];
    for (int i = 0; i < T2; i++)
    {

        LB[i] = rand()%10;;
    }
    int LC[T1+T2];
    sort(LA,LA + T1,cmp);
    printf("LA: ");
    print_array(LA,T1);
    sort(LB,LB + T2,cmp);
    printf("LB: ");
    print_array(LB,T2);
    int i = 0, j = 0, k =0;
    while(i < T1 && j < T2)
    {
        if (LA[i] < LB[j])
            LC[k++] = LA[i++];
        else
            LC[k++] = LB[j++];
    }
    while(i < T1)
        LC[k++] = LA[i++];
    while(j < T2)
        LC[k++] = LB[j++];
    printf("LC: ");
    print_array(LC,T1+T2);
    system("pause");
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632