数据结构-实验一顺序表的合并

#include<iostream>
#include <cstdlib>
using namespace std;

typedef struct											//定义顺序表
{
	int *elem;
	int length;
}SqList;

void InitList_Sq(SqList &L,int n)						//创建顺序表
{
	L.elem=new int(n);
	if(!L.elem)exit(-2);
	L.length=0;
}

void input(SqList &L,int n)	/*输入n个数字*/					//依次往顺序表L里输入数据
{
	for(int i=0;i<n-1;i++)
	{
		cin>>L.elem[i];
		L.length++;
	}
}

void output(SqList L)									//依次输出顺序表里的每个元素
{
	for(int i=0;i<=L.length-1;i++){
		cout<<L.elem[i]<<endl;
	}
}

void MergeList_Sq(SqList LA,SqList LB,SqList &LC)		//算法 顺序有序表的合并
{	//已知顺序有序表LA和LB的元素按值非递减排列
	//归并LA和LB得到新的顺序有序表LC,LC的元素也按值非递减排列
	int *pa,*pb,*pc,*pa_last,*pb_last;
	pa=LA.elem;pb=LB.elem;								//指针pa和pb的初值分别指向两个表的第一次元素
	LC.length=LA.length+LB.length;			//新表长度为待合并两表的长度之和
	LC.elem=new int(LC.length);							//为合并后的新表分配一个数组空间
    pc=LC.elem;												//指针pc指向新表的第一个元素
	pa_last=LA.elem+LA.length-1;						//指针pa_last指向LA表的最后一个元素
	pb_last=LB.elem+LB.length-1;						//指针pb_last指向LB表的最后一个元素
	while(pa<=pa_last && pb<=pb_last)					//两个表都非空
	{
	if(*pa<=*pb)										//依次“摘取”两表中值较小的结点插入到LC表的最后
	   *pc++=*pa++;		
	else
		*pc++=*pb++;
	while(pa<pa_last)									//LB已到达表尾,依次将LA的剩余元素插入LC表的最后
	   *pc++=*pa++;
	while(pb<pb_last)									//LA已到达表尾,依次将LB的剩余元素插入LC表的最后
		*pc++=*pb++;
}														//MergeList_List

int main()
{
	SqList La,Lb,Lc;
	int num_a,num_b;

	cout<<"请输入非递减线性表a的个数n:";	
	cin>>num_a;
	InitList_Sq(La,num_a);								//La表的创建
	input(La,num_a);									//依次往顺序表La里输入数据
	    
	cout<<"请输入非递减线性表b的个数n:";	
	cin>>num_b;
		InitList_Sq(Lb,num_b);								//Lb表的创建	
	input(Lb,num_b)	;								//依次往顺序表La里输入数据
	
	MergeList_Sq(La,Lb,Lc);								//将顺序表La和Lb进行合并
	
	cout<<"非递减线性表a,b合并后的非递减线性表c为:\n";			//输出合并后的有序顺序表Lc
	output(Lc);
	cout<<endl;
	return 0;
}



``运行结果
运行结果

实验1、实现顺序表的合并
(1)实验目的
实现顺序表的合并
(2)实验内容
编程实现顺序表下教材第二章定义的线性表的基本操作,并根据已经实现的基本操作,实现两个线性链表的合并。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值