【PTA】数据结构与算法,5-5,将顺序表B的元素合并到顺序表A表尾部【可本地编译器调试】成信大,DS课程组

该程序定义了一个顺序表结构,实现了初始化、插入元素和遍历列表的功能。主要任务是将B表中的所有元素插入到A表的尾部,最终将结果存储在A表中。在main函数中,先读取并输入A、B表的数据,然后通过调用InsertList函数将B表元素逐个插入A表。最后,显示合并后的A表内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有两个顺序表A、B,通过键盘向A、B表输入数据元素,在main函数里要求实现将B表中数据全部插入到A表中(将B表元素插入到A表尾部,结果存放于A表中)。

#include <stdio.h>
#define  NumSize  100
typedef  int  ElemType;
typedef  struct
{
    ElemType  dat[NumSize];
    int  Length;
} List;

void  InitList(List* L)  // 顺序表初始化 
{
    L->Length = 0;
}
void DispList(List L)  // 遍历顺序表
{
    int i;
    for (i = 0; i < L.Length; i++)
    {
        printf("%d ", L.dat[i]);
    }
    printf("\n");
}
int InsertList(List* L, int n, ElemType x)     // 在指定位置n插入元素
{
    int i, j;
    j = L->Length;
    i = n - 1;
    if (i > j) 
    {
        printf("\nInsert Pose Error!\n");
        return 0;
    }
    for (i = j – 1; i >= n – 1; i--)
        L->dat[i + 1] = L->dat[i];
    __________________;
    L->Length_____________;
    return 1;
}

int main()
{
    List A, B;//B表中已存数据
    int i, j, k;
    ElemType x;
    InitList(&A);
    InitList(&B);
    scanf("%d", &j);         // 输入A表长度,某些编译器要求此处改为scanf_s
    for (i = 0; i < j; i++)   // 输入A表数据
    {
        scanf("%d", &k); //某些编译器要求此处改为scanf_s
        InsertList(&A, i + 1, k);
    }
    scanf("%d", &j);     // 输入B表数据长度,某些编译器要求此处改为scanf_s
    for (i = 0; i < j; i++)  // 输入B表数据
    {
        scanf("%d", &k); //某些编译器要求此处改为scanf_s
        InsertList(&B, i + 1, k);
    }
    // 完成A、B两表简单合并算法
    k = A.Length;
    for (i = 0; i < B.Length; i++)
    {
        InsertList(___________);
    }

    ___________;      // 显示合并结果
    return 0;
}

——————————————————————————————————————————

解答:

#include <stdio.h>
#define  NumSize  100
typedef  int  ElemType;
typedef  struct
{
    ElemType  dat[NumSize];
    int  Length;
} List;

void  InitList(List* L)  // 顺序表初始化 
{
    L->Length = 0;
}
void DispList(List L)  // 遍历顺序表
{
    int i;
    for (i = 0; i < L.Length; i++)
    {
        printf("%d ", L.dat[i]);
    }
    printf("\n");
}
int InsertList(List* L, int n, ElemType x)     // 在指定位置n插入元素
{
    int i, j;
    j = L->Length;
    i = n - 1;
    if (i > j) 
    {
        printf("\nInsert Pose Error!\n");
        return 0;
    }
    for (i = j – 1; i >= n – 1; i--)
        L->dat[i + 1] = L->dat[i];
    L->dat[n-1]=x;                       //#1
    L->Length++;                         //#2
    return 1;
}

int main()
{
    List A, B;//B表中已存数据
    int i, j, k;
    ElemType x;
    InitList(&A);
    InitList(&B);
    scanf("%d", &j);         // 输入A表长度,某些编译器要求此处改为scanf_s
    for (i = 0; i < j; i++)   // 输入A表数据
    {
        scanf("%d", &k); //某些编译器要求此处改为scanf_s
        InsertList(&A, i + 1, k);
    }
    scanf("%d", &j);     // 输入B表数据长度,某些编译器要求此处改为scanf_s
    for (i = 0; i < j; i++)  // 输入B表数据
    {
        scanf("%d", &k); //某些编译器要求此处改为scanf_s
        InsertList(&B, i + 1, k);
    }
    // 完成A、B两表简单合并算法
    k = A.Length;
    for (i = 0; i < B.Length; i++)
    {
        InsertList(&A,i+k+1,B.dat[i]);               //#3
    }

    DispList(A);      // 显示合并结果           #4
    return 0;
}

答案不唯一:#2处可以填:=L->Length或者+=1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值