实现两个顺序表的合并(顺序表已递增)

这篇博客介绍了如何合并两个已经递增排列的顺序表,是作者在学校实验报告中的一个内容。由于时间久远,部分细节可能遗忘,作者计划在考研复习时进行补充。

实现两个顺序表的合并(顺序表已递增)

在学校自己做的实验报告,仅供参考,可能有误。
现在忘了··等考研复习时补充吧

 //(1)建立结构体
typedef struct {
	int* elem;
	int length;
	int listsize;
}sqlist;
//(2)初始化化线性表
void Initlist(sqlist& L) {
	L.elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));
	L.length = 0;
	L.listsize = LIST_INIT_SIZE;
}
//(3)创建线性表
void Creatlist(sqlist& q) {
	int a=0, i = 0;
	while (1) {
		cin >> a;
		if (a == -100)break;
		q.elem[i++] = a;
		q.length++;
	}
}
//(4)合并线性表
//设la,lb为两个有序递增线性表
void Mergelist(sqlist la, sqlist lb, sqlist &lc) {
	int* pa, * pb, * pc,*pa_last,*pb_last;
	pa = la.elem;
	pb = lb.elem;
	lc.listsize = lc.length = la.length + lb.length;
	pc = lc.elem = (int*)malloc(lc.listsize * sizeof(int));
	pa_last = la.elem + la.length - 1;
	pb_last = lb.elem + lb.length - 1;
	while (pa <= pa_last && pb <= pb_last) {
		if (*pa <= *pb)* pc++ = *pa++;
		else *pc++ = *pb++;
	}
	while (pa <= pa_last) *pc++ = *pa++;
	while (pb <= pb_last) *pc++ = *pb++;
}

//(5)输出合并后的线性表
void Printlist(sqlist q) {
	int i = 0;
	
	for (; i < q.length; i++) {
		cout << q.elem[i];
	}

}
//(6)在main函数中声明结构体变量,调用所需函数
int main() {
	sqlist la, lb, lc;
	Initlist(la);
	Initlist(lb);
	Initlist(lc);
	Creatlist(la);
	Creatlist(lb);
	Mergelist(la, lb, lc);
	Printlist(lc);
	free(la.elem);
	free(lb.elem);
	
	return 0;
}

from nuister kjr

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值