6-3 拼接两个顺序表

作者 CUIT通信DS课程组

单位 成都信息工程大学

A、B两个顺序表,实现算法ListJoin() ,将B表中的元素直接存入A表的后面,并将A中数据元素依次打印出来的功能。

函数接口定义:

在这里描述函数接口。例如:
void ListJoin(List A,List B);

其中 AB 都是用户传入的参数,即两个待合并的顺序表,其中B拼接在A之后。

裁判测试程序样例:

#include <stdio.h>
typedef  int ElemType;
#define  NumSize   100

typedef struct 
{
    ElemType dat[NumSize]; //顺序表定义
    int      num;          //表中数据的多少
} List;


void initList(List *L) //初始化顺序表
{
    L->num=0;
}

int LengthList(List L) //求顺序表的长度
{
    return(L.num);
}
//在顺序表中的第n个位置后面插入一个数据
int InsertList(List *L,int n,ElemType x)
{
    int i,j;
    j=L->num;//求表中数据元素的个数
    if(j<n)
    {
        printf("插入位置不合法\n");
        return 0;//插入失败返回0
    }    
    if(n>=NumSize)
    { 
        printf("插入位置不合法\n");
        return 0;
    }    
    for(i=j; i>n;i--)
    {
        L->dat[i] =L->dat[i-1]; //将第n个后的元素依次后移一位 
    }    
    L->dat[i] = x; //插入数据x
    L->num ++;//顺序表总长度加1
    return (1); //插入成功败返回1
}
int DispList(List L)//遍历顺序表中元素
{
    int i,j;
    j=LengthList(L);//求表中数据元素的个数
    printf("表中元素是:");
    for(i=0;i<j;i++) 
    {
        printf("%d ",L.dat[i]); //显示表中元素
    }    
    return 0;
}
// 本题要求完成的函数
void ListJoin(List A, List B);

int main(void){
    List A,B;
    int i,j;
    ElemType x;

    initList(&A);
    initList(&B);            
    // 输入A表数据
    i = 0;
    while(1)
    {
        scanf("%d",&x);   // 某些编译器要求此处改为scanf_s
        if (x == -1) break;            
        InsertList(&A,i,x);
        ++i;        
    }
    
    // 输入B表数据
    i = 0;
    while (1)
    {
        scanf("%d",&x);    // 某些编译器要求此处改为scanf_s 
        if (x == -1) break;
        InsertList(&B, i, x);
        ++i;        
    }
 ListJoin(A,B);
    return 0;
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

2 3 1 7 9 -1
1 7 0 -1

输出样例:

在这里给出相应的输出。例如:

表中元素是:2 3 1 7 9 1 7 0 

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 M

C程序如下:

解法一:自己写一个拼接循环体

 void ListJoin(List A, List B) {  
    // 遍历列表B的每一个元素  
    for (int i = 0; i < B.num; i++) {  
        // 将列表B的第i个元素加入到列表A的末尾  
        A.dat[A.num] = B.dat[i];  
        // 更新列表A的元素数量  
        A.num++;  
    }  
    // 显示合并后的列表A  
    DispList(A);  
    // 函数返回0,表示操作成功  
    return 0;  
}

解法二:用已知的(InsertList)插入函数

void ListJoin(List A,List B){
    for(int i = 0; i < B.num; i++)
    {
        InsertList(&A,LengthList(A),B.dat[i]);
    }
    DispList(A);
    return 0;
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值