scau 数据结构实验一 8577 合并顺序表

Description

若线性表中数据元素相互之间可以比较,且数据元素在表中按值递增或递减,则称该表为有序表。

编写算法,将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C。

输入格式

第一行:顺序表A的元素个数
第二行:顺序表A的各元素(非递减),用空格分开
第三行:顺序表B的元素个数
第四行:顺序表B的各元素(非递减),用空格分开

输出格式

第一行:顺序表A的元素列表
第二行:顺序表B的元素列表
第三行:合并后顺序表C的元素列表

输入样例

5
1 3 5 7 9
5
2 4 6 8 10

输出样例

List A:1 3 5 7 9 
List B:2 4 6 8 10 
List C:1 2 3 4 5 6 7 8 9 10 

提示

输出时注意大小写和标点。
#include<stdio.h>
#include<malloc.h>
#include<iostream>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int

typedef struct
{
	int *elem;  //存储空间基址
    int length; //当前长度
	int listsize;   //当前分配的容量(以sizeof(ElemType)为单位)
}SqList;

int InitList_Sq(SqList &L)
{
// 算法2.3,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE
// 请补全代码
    L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//返回首地址
    if(!L.elem) return ERROR;    //分配存储失败
    L.length=0;                 //空表长度为0
    L.listsize=LIST_INIT_SIZE; //初始存储容量
    return OK;
}

int intput_Sq(SqList &L,int n)//输入n个数字
{
    int i,x;
    for(i=0;i<n;i++)
    {
        scanf("%d",&x);
        L.elem[i]=x;
        L.length++;
    }
    return OK;
}

void MergeList_Sq(SqList LA,SqList LB,SqList &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 ElemType[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) *pc++=*pa++;        		//依次“摘取”两表中值较小的结点
        else *pc++=*pb++;
     }
     while(pa<=pa_last)  *pc++=*pa++;             //LB表已到达表尾
     while(pb<=pb_last)  *pc++=*pb++;          //LA表已到达表尾


}

void output_Sq(SqList L)//输出
{
    int i;
    for(i=0;i<L.length;i++)
    {
        printf("%d ",L.elem[i]);
    }
}

int main()
{
    SqList LA,LB,LC;
    int a,b;
    scanf("%d",&a);//输入LA表的元素个数;
    InitList_Sq(LA);//创建LA表
    intput_Sq(LA,a);//输入LA表元素

    scanf("%d",&b);//输入LB表的元素个数;
    InitList_Sq(LB);//创建LB表
    intput_Sq(LB,b);//输入LB表元素
	InitList_Sq(LC);
    printf("List A:");
    output_Sq(LA);
    printf("\n");
    printf("List B:");
    output_Sq(LB);
    printf("\n");
    printf("List C:");
    MergeList_Sq(LA,LB,LC);//合并两表
    output_Sq(LC);
    return 0;
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值