数据结构-两个顺序表合并
#include <stdio.h>
#define MaxSize 100
typedef struct {
int data[MaxSize];
int length;
}SeqList;
/**
* 初始化顺序表
* @param L 顺序表L
*/
void Init_SeqList(SeqList& L) {
L.length = 0;
}
/**
* 创建顺序表,输入数据存入线性表的数组空间中
* @param L 代表顺序表,使用引用类型
* @param n 需要插入的元素个数
*/
int Create_SeqList(SeqList& L, int n) {
if (n > MaxSize)
{
return 0;
}
for (int i = 0; i < n; ++i)
scanf_s("%d", &L.data[i]);
L.length = n;
return 1;
}
/**
* 输出顺序表
* @param L 顺序表
*/
void Print_SeqList(SeqList L) {
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
printf("\n");
}
/**
* 在第location个位置插入元素elem
* @param L 顺序表
* @param location 插入的位置
* @param elem 插入的元素
*/
int Insert_SeqList(SeqList &L, int location, int elem) {
if (location<1 || location>L.length+1 || L.length>=MaxSize)
{
return 0;
}
for (int i = L.length; i >= location; --i)
{
L.data[i] = L.data[i-1];
}
L.data[location - 1] = elem;
L.length++;
return 1;
}
/**
* 合并两个顺序表,组成新的顺序表
* @param La 待合并顺序表
* @param Lb 待合并顺序表
* @param Lc 合并后的顺序表
*/
void MergeList(SeqList La, SeqList Lb, SeqList &Lc) {
Init_SeqList(Lc);
int i,j,k;
i = j = 0;
k = 1;
while((i<La.length) && (j<Lb.length)) {
if (La.data[i] < Lb.data[j])
{
Insert_SeqList(Lc, k++, La.data[i++]);
}
else {
Insert_SeqList(Lc, k++, Lb.data[j++]);
}
}
while(i<La.length) {
Insert_SeqList(Lc, k++, La.data[i++]);
}
while(j<Lb.length) {
Insert_SeqList(Lc, k++, Lb.data[j++]);
}
}
int main()
{
SeqList La, Lb, Lc;
int an,bn;
scanf_s("%d", &an);
Create_SeqList(La, an);
Print_SeqList(La);
scanf_s("%d", &bn);
Create_SeqList(Lb, bn);
Print_SeqList(Lb);
MergeList(La, Lb, Lc);
Print_SeqList(Lc);
return 0;
}
创作不易,喜欢的话加个关注点个赞,谢谢谢谢谢谢!