1. 程式人生 > >c++ 合併兩個無序順序表使其仍無序

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末尾