小米豆子 发表于 2021-5-15 13:28:10

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

/*
已知在一维数组A中依次存放两个线性表(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;
    int length;
} SqList1;

typedef struct
{
    int data;
    int length;
} SqList2;

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

    }
    L.length=0;

}

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

    }
    L.length=0;

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

    }

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

    }

}


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

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

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

    //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;
            a=a;
            a=temp1;
      }
    }


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



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


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

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

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

    }


}


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






}

页: [1]
查看完整版本: 两个线性表合在一个数组中,并实现在数组中两个不同大小或者相同大小的线性表位置的...