LA和LB合并成一个LC

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#include<bits/stdc++.h>
#define LIST_INIT_SIZE 15 // 线性表存储空间的初始分配量
#define LISTINCREMENT 2 // 线性表存储空间的分配增量
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE
typedef int ElemType;
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct SqList
{
    ElemType *elem; // 存储空间基址
    int length; // 当前长度
    int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)
};

Status InitList(SqList &L) // 算法2.3
{
    // 操作结果:构造一个空的顺序线性表
    L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L.elem)
        exit(OVERFLOW); // 存储分配失败
    L.length=0; // 空表长度为0
    L.listsize=LIST_INIT_SIZE; // 初始存储容量
    return OK;
}

int ListLength(SqList L)
{
    // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数
    return L.length;
}

Status GetElem(SqList L,int i,ElemType &e)
{
    // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)
    // 操作结果:用e返回L中第i个数据元素的值
    if(i<1||i>L.length)
        exit(ERROR);
    e=*(L.elem+i-1);
    return OK;
}

Status ListInsert(SqList &L,int i,ElemType e) // 算法2.4
{
    // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1
    // 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1
    ElemType *newbase,*q,*p;
    if(i<1||i>L.length+1) return ERROR;
    if(L.length>=L.listsize)
    {
        newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase) exit(OVERFLOW);
        L.elem=newbase;
        L.listsize+=LISTINCREMENT;
    }
    q=&(L.elem[i-1]);
    for(p=&(L.elem[L.length-1]); p>=q; --p) *(p+1)=*p;
    *q=e;
    ++L.length;
    return OK;

}
Status compare(ElemType e1,ElemType e2)
{
    if(e1==e2)
    {
        return TRUE;
    }
    else return FALSE;
}
int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
{
    // 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)
    // 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。
    //           若这样的数据元素不存在,则返回值为0。算法2.6
    int i=1;
    int *p;
    p=L.elem;
    while(i<=L.length&&!(*compare)(*p++,e)) ++i;
    if(i<=L.length) return i;
    else return 0;


}

void MergeList(SqList La,SqList Lb,SqList &Lc)
{
    InitList(Lc);
    int i,j,k;
    i=1;
    j=1;
    k=0;
    int La_len=ListLength(La);
    int Lb_len=ListLength(Lb);
    int a,b;
    while((i<=La_len)&&(j<=Lb_len))
    {

        GetElem(La,i,a);
        GetElem(Lb,j,b);
        if(a<=b)
        {
            ListInsert(Lc,++k,a);
            i++;
        }
        else
        {
            ListInsert(Lc,++k,b);
            j++;
        }
    }
    while(i<=La_len)
    {
        GetElem(La,i++,a);
        ListInsert(Lc,++k,a);
    }
    while(j<=Lb_len)
    {
        GetElem(Lb,j++,b);
        ListInsert(Lc,++k,b);
    }
}
int main()
{
    SqList La,Lb,Lc;
    InitList(La);
    InitList(Lb);
    ListInsert(La,1,3);
    ListInsert(La,2,5);
    ListInsert(La,3,8);
    ListInsert(La,4,11);

    ListInsert(Lb,1,2);
    ListInsert(Lb,2,6);
    ListInsert(Lb,3,8);
    ListInsert(Lb,4,9);
    ListInsert(Lb,5,11);
    ListInsert(Lb,6,15);
    ListInsert(Lb,7,20);
    printf("La原始元素:\n");
    for(int i=1; i<=4; i++)
    {
        int e;
        GetElem(La, i, e);
        printf("%d ",e);
    }
    printf("\n");
    printf("Lb原始元素:\n");
    for(int i=1; i<=7; i++)
    {
        int e;
        GetElem(Lb, i, e);
        printf("%d ",e);
    }
    printf("\n");
    MergeList( La, Lb,Lc);
    printf("最终插入结果:\n");
//   printf("%d\n",La.length);
    for(int i=1; i<=Lc.length; i++)
    {
        int e;
        GetElem(Lc, i, e);
        printf("%d ",e);
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值