有两个顺序表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;