数据结构————线性表的合并操作
顺序表的合并顺序表相当于两个数组的形式,合并时也有有序顺序表的合并和无序顺序表的合并,下面我们会一一讲解。1.有序顺序表的合并有序顺序表的合并为了使时间复杂度为O(n),空间复杂度为O(1),所以我们一般会使用三个指针来进行操作,即一个指针指向L1->size-1,一个指针指向L2->size-1,第三个指针指向将L2的size增加到L1后面之后的size-1的位置。2.无序顺序表的合
顺序表的合并
顺序表相当于两个数组的形式,合并时也有有序顺序表的合并和无序顺序表的合并,下面我们会一一讲解。
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;
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)