作者 CUIT通信DS课程组
单位 成都信息工程大学
A、B两个顺序表,实现算法ListJoin() ,将B表中的元素直接存入A表的后面,并将A中数据元素依次打印出来的功能。
函数接口定义:
在这里描述函数接口。例如:
void ListJoin(List A,List B);
其中 A
和 B
都是用户传入的参数,即两个待合并的顺序表,其中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;
}