ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线性表的合并(顺序表实现);有序表的合并(顺序表、链表实现)

2021-01-20 00:02:08  阅读:348  来源: 互联网

标签:顺序 Lb 线性表 La Sq 合并 listInsert next Lc


#include "SqList.h"
#include "LinkList.h"
#include <iostream>
using namespace std;
//线性表的合并-顺序表实现
void merge(SqList& La, SqList Lb) {
	int La_len = getLength_Sq(La);
	int Lb_len = getLength_Sq(Lb);
	for (int i = 1; i <= Lb_len; i++) {
		ElementType temp;
		getElem_Sq(Lb, i, temp);
		cout << locateElem_Sq(La, temp) << endl;
		if (!locateElem_Sq(La, temp)) {
			listInsert_Sq(La, ++La_len, temp);
		}
	}
}
//有序表的合并-顺序表实现
void merge_Sq(SqList La, SqList Lb, SqList& Lc) {
	Lc.elem = new ElementType[getLength_Sq(La) + getLength_Sq(Lb)];
	Lc.length =0;
	int a = 0;
	int b = 0;
	int c = 1;
	while (a<getLength_Sq(La) && b<getLength_Sq(Lb)) {
		if (La.elem[a] <= Lb.elem[b]) {
			listInsert_Sq(Lc, c++, La.elem[a++]);
		}
		else {
			listInsert_Sq(Lc, c++, Lb.elem[b++]);
		}
	}
	while (a < getLength_Sq(La)) {
		listInsert_Sq(Lc, c++, La.elem[a++]);
	}
	while (b < getLength_Sq(Lb)) {
		listInsert_Sq(Lc, c++, Lb.elem[b++]);
	}
}
//有序表的合并-链表实现
void merge_L(LinkList& La, LinkList& Lb, LinkList& Lc) {
	Lc = La;
	LinkList pa = La->next;
	LinkList pb = Lb->next;
	//用La的头节点作为Lc的头节点
	LinkList pc = Lc;
	while (pa && pb) {
		if (pa->data <= pb->data) {
			pc->next = pa;
			pc = pc->next;
			pa = pa->next;
		}
		else {
			pc->next = pb;
			pc = pc->next;
			pb = pb->next;
		}
	}
	//插入剩余段
	pc->next = pa ? pa : pb;
	//释放Lb的头节点
	delete Lb;
}
int main() {
	/*
	SqList La,Lb,Lc;
	initList_Sq(La);
	initList_Sq(Lb);
	listInsert_Sq(La, 1, '1');
	listInsert_Sq(La, 2, '4');
	listInsert_Sq(La, 3, '5');
	listInsert_Sq(Lb, 1, '4');
	listInsert_Sq(Lb, 2, '6');
	merge_Sq(La, Lb,Lc);
	for (int i = 1; i <= getLength_Sq(Lc); i++) {
		ElementType e;
		getElem_Sq(Lc, i, e);
		cout <<e<<endl;
	}
	*/
	LinkList La, Lb, Lc;
	initList_L(La);
	initList_L(Lb);
	listInsert_L(La, 1, '1');
	listInsert_L(La, 2, '4');
	listInsert_L(La, 3, '5');
	listInsert_L(Lb, 1, '4');
	listInsert_L(Lb, 2, '6');
	listInsert_L(Lb, 3, '7');
	merge_L(La, Lb, Lc);
	for (LinkList p =Lc->next; p != NULL; p = p->next) {
		cout << p->data<<endl;
	}
	return 0;
}

标签:顺序,Lb,线性表,La,Sq,合并,listInsert,next,Lc
来源: https://blog.csdn.net/Warmmm/article/details/112855055

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有