鱼C论坛

 找回密码
 立即注册
查看: 3691|回复: 0

两个线性表合在一个数组中,并实现在数组中两个不同大小或者相同大小的线性表位置的...

[复制链接]
发表于 2021-5-15 13:28:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*
已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3,...,am)和(b1,b2,b3,...,bn),试编写一个函数,将数组中两个顺序表的位置互换,
即将(b1,b2,b3,...,bn)放在(a1,a2,a3,...,am)的前面.

*/
#include<stdlib.h>
#include<stdio.h>
#define MaxSize1 5
#define MaxSize2 3
#define ArraySize L1.length+L2.length
typedef struct
{
    int data[MaxSize1];
    int length;
} SqList1;

typedef struct
{
    int data[MaxSize2];
    int length;
} SqList2;

//初始化
void InitList1(SqList1 &L)
{
    for(int i=0; i<MaxSize1; i++)
    {
        L.data[i]=0;

    }
    L.length=0;

}

void InitList2(SqList2 &L)
{
    for(int i=0; i<MaxSize2; i++)
    {
        L.data[i]=0;

    }
    L.length=0;

}
//创立表
void InputList1(SqList1 &L)
{
    for(int i=0; i<MaxSize1; i++)
    {
        scanf("%d",&L.data[i]);
        L.length++;

    }

}
void InputList2(SqList2 &L)
{
    for(int i=0; i<MaxSize2; i++)
    {
        scanf("%d",&L.data[i]);
        L.length++;

    }

}


//根据题目提供一个将数组中两个顺序表位置互换的函数
void InverseArray(SqList1 L1,SqList2 L2)
{
    int a[L1.length+L2.length];

    //将两个线性表放入数组
    for(int i=0; i<L1.length; i++)
    {
        a[i]=L1.data[i];

    }
    for(int j=L1.length; j<L1.length+L2.length; j++)
    {
        a[j]=L2.data[j-L1.length];
    }
    for(int i=0; i<ArraySize; i++)
    {
        printf("%d ",a[i]);
    }

    //ok,开始反转
    printf("\n");
    system("pause");
    printf("反转后的结果:\n");
    int m=L1.length;
    int n=L2.length;

    //当两个顺序表同样大时
    if(m==n)
    {
        int temp1;
        for(int i=0; i<m; i++)
        {
            temp1=a[i];
            a[i]=a[L1.length+i];
            a[L1.length+i]=temp1;
        }
    }


    //当L1<L2时
    if(m<n)
    {
        int temp2;
        //起始的时候还是先要照着相等的时候来
        for(int i=0; i<m; i++)
        {
            temp2=a[i];
            a[i]=a[L1.length+i];
            a[L1.length+i]=temp2;
        }



        //当相等的部分调转完毕之后要对长的顺序表的剩余值采取:将剩余值先用一个temp2保存起来,随后将短的顺序表的值依次向后移动,再将剩余值移动到空出来的位置
        for(int j=0; j<n-m; j++)
        {
            temp2=a[m+n-1];
            for(int i=m+n-1; i>m; i--)
            {
                a[i]=a[i-1];
           
            }
            a[m]=temp2;
        }
        for(int i=0; i<ArraySize; i++)
        {
            printf("%d ",a[i]);
        }


    }
    //当L1>L2时
    if(m>n)
    {
        int temp3;
        //还是先按照相等的法子来
         for(int i=0; i<n; i++)
        {
            temp3=a[i];
            a[i]=a[L1.length+i];
            a[L1.length+i]=temp3;
        }

        //大同小异,简单的来说就是现将a[n]保存到temp3中随后将从n开始后面的数据一次前移最后再将temp3中的值交还给a[m+n-1]
        for(int i=0;i<m-n;i++)//总循环的次数
        {
            temp3=a[n];
            for(int j=n;j<m+n;j++)
            {
                a[j]=a[j+1];
            }
            a[m+n-1]=temp3;

        }
        for(int i=0; i<ArraySize; i++)
        {
            printf("%d ",a[i]);
        }

    }


}


//主函数
int main()
{
    SqList1 L1;
    SqList2 L2;
    InitList1(L1);
    InitList2(L2);
    printf("请输入L1的值:\n");
    InputList1(L1);
    printf("请输入L2的值:\n");
    InputList2(L2);
    //在主函数中声明一个数组
    InverseArray(L1,L2);






}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-4 23:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表