数据结构————线性表的合并操作

顺序表的合并

顺序表相当于两个数组的形式,合并时也有有序顺序表的合并和无序顺序表的合并,下面我们会一一讲解。

1.有序顺序表的合并

有序顺序表的合并为了使时间复杂度为O(n),空间复杂度为O(1),所以我们一般会使用三个指针来进行操作,即一个指针指向L1->size-1,设为end1;一个指针指向L2->size-1,设为end2;第三个指针指向将L2的size增加到L1后面之后的size-1的位置,设为end。

若end1<end2,将end2指向的值放到end中,end1不动end2向前移动一个

若end1>end2,将end1指向的值放到end中,end2不懂end1向前移动一个

void Merge(int *num1,int m,int*num2,int n){
    int end1=m-1,end2=n-1,end=m+n-1;
    while(end1>=0&&end2>=0){
          if(num1[end1]<num2[end2]){
               num1[end]=num2[end2];
               end--,end2--;
           }
          else{
            nums[end]=num1[end1];
            end--,end1--;
          }
          while(end2>=0){
             num1[end]=num2[end];
             --end,--end2;
         }
      }
 }
            

 

2.无序顺序表的合并

无序顺序表只需要两个指针来操作,其时间复杂度为O(n),空间复杂度为O(1)。

void Merge(int num1,int num2,int m,int n){
     int end1=m-1,end2=m+n-1;
     while(end1>=0&&end2>=0){
          num1[end2]=num2[end1];
          end1--,end2--;
     }
}

 

链式有序表的合并

由于链表结点之间用指针连接起来,所以合并时不需要另外开辟空间,可以直接利用原来两个表的存储空间,合并过程中只需把两个表中的结点重新连接起来即可。

typedef int LNdataType;
typedef struct ListNode{
    struct ListNode*prev;
    struct ListNode*next;
    LNdataType data;
}LN;
void Merge(LN*L1,LN*L2){
   LT*L3=L1->prev;
   LT*L4=L2->prev;
   L3->next=L2;
   L1->prev=L4;
   L2->prev=L3;
   L4->next=L1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妮妮妮妮没事吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值