c++ 合併兩個無序順序表使其仍無序
#include "stdafx.h"
#include<iostream>
using namespace std;
struct SqList
{
int *elem;//儲存空間首地址
int length;//線性表中元素個數
int listsize;//當前線性表的最大容量
};
int InitList_Sq(SqList &L)
{//構造一個空的線性表,開始時線性表不佔有空間
L.elem=0;
L.length=0;
L.listsize=0;
return 1;
}
void print(SqList &L)
{//從前到後將順序表中的元素輸出
for(int
i=0;i<=L.length-1;i++)
{
cout<<L.elem[i]<<" ";
}
cout<<endl;
}
int ListInsert_Sq(SqList &L,int i,int x)
{//在順序表L的第i個位置插入元素x
if(L.listsize==0)
{//如果是第一次插入資料,申請一個空間
L.elem=new int[1];
L.listsize=1;
}
if(i<0 || i>L.length ) return 0;//如果插入位置不合法,則返回0
if(L.length==L.listsize)//如果空間不足,申請比原來多一倍的空間
{
int
*newbase;
newbase=new int[L.listsize*2];
if(0==newbase)return 0;
//把原來的資料拷貝到新空間中
for(int j=0;j<L.listsize;j++) newbase[j]=L.elem[j];
delete L.elem;//釋放原來的空間的記憶體
L.elem=newbase;//線性表的指標指向新空間首地址
L.listsize*=2;
}
for(int j=L.length-1;j>=i;j--)
{
L.elem[j+1]=L.elem[j];
}
L.elem[i]=x;
L.length++;
return 1;
}
void UnionAB_1(SqList &A,SqList B)
{//用num記錄當前B中的元素,然後在A中查詢
int i,j,num;
for(j=0;j<B.length;j++)
{
num=B.elem[j];
i=0;
while((i<A.length)&&(A.elem[i]!=num)) i++;//在A中從頭查詢有木有與num相同的元素
if(i==A.length)//到A的末尾還未找到
ListInsert_Sq(A,A.length,num); //將num插入到A的末尾
}
print(A);
}
int main(int argc, char* argv[])
{
int i,j;
SqList LA,LB;//定義順序表LA、LB
InitList_Sq(LA);//初始化順序表LA
InitList_Sq(LB);//初始化順序表LB
int a[4]={3,5,8,11};
int b[7]={2,6,8,9,11,15,20};
//逐個向LA中插入資料,每次都插入到表的尾部
for(i=0;i<4;i++)
ListInsert_Sq(LA,LA.length,a[i]);
print(LA);//列印LA中資料
//逐個向LB中插入資料,每次都插入到表的尾部
for(j=0;j<7;j++)
ListInsert_Sq(LB,LB.length,b[j]);
print(LB);//列印LB中資料
UnionAB_1(LA,LB);
return 0;
}
這個程式是將B中與A不同的元素依次插入到了A末尾