顺序表的合并

         合并顺序表分成两种情况。

        一、将两个有序表合并成一个有序表,并保留相同的数据。

        二、将两表个直接合并,并只保留一个相同的数据。

 定义结构体

#include <stdio.h>  
#include <stdlib.h>

#define MAXSIZE 10     //数组的最大长度 
typedef struct{        //顺序表的初始化 
    int *data;        //定义顺序表中元素类型的数组指针 
    int length;        //当前顺序表的长度 
}SqList;

 初始化

int i,j,n1;
    SqList L1;        //初始化三个顺序表 
     SqList L2;
     SqList L3;        //合并后的新表 
     L1.data=(int *)malloc(sizeof(int)*MAXSIZE);
     L2.data=(int *)malloc(sizeof(int)*MAXSIZE);
     L3.data=(int *)malloc(sizeof(int)*MAXSIZE);
     L1.data[0]=1;
     L1.data[1]=7;
     L1.data[2]=9;
     L2.data[0]=2;
     L2.data[1]=4;
     L2.data[2]=6;
     L2.data[3]=7;
     L1.length=3;
     L2.length=4;
     L3.length=L1.length+L2.length;
     int* pa=L1.data;        //L1的指针 
    int* pb=L2.data;        //L2的指针 
    int* pc=L3.data;        //L3的指针 
    int* pa_Last=L1.data+L1.length-1;        //指向L1末尾的指针 
    int* pb_Last=L2.data+L2.length-1; 

 情况一

while(pa<=pa_Last&&pb<=pb_Last){
         if(*pa<=*pb) *pc++=*pa++;
         else *pc++=*pb++;
     }
     while(pa<=pa_Last)*pc++=*pa++;
     while(pb<=pb_Last)*pc++=*pb++; 

情况二 

for(i=0;i<L2.length;i++){//合并L1、L2,同样的元素去掉 
        n1=L2.data[i];
        for(j=0;j<L1.length;j++){
            if(n1==L1.data[j]){
                break;
            }
            else if(j+1==L1.length){//判断到最后一个数据再赋值 
                L1.data[L1.length]=n1;
                L1.length++;        
            }
        }
    } 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值