C语言 合并有序顺序表

来源:互联网 发布:订票软件哪个好 编辑:程序博客网 时间:2024/04/27 15:31

思路: 

如有有序表A,B:   A:1 2 4 5 5    B:2 3 3 6 7

1.一开始 i 指向 A的开头元素(即1),同理 j 指向 B开头元素(2)

2.A[i] 和 B[j] 中对比,选较小的放入新表C中 



核心代码:

bool func(SeqList A,SeqList B,SeqList C){if(A.length + B.length > C.length)return false;int i=0,j=0,k=0;while(i<A.length && j<B.length){if(A.data[i] <= B.data[j])C.data[k++] = A.data[i++];else if(B.data[j] < A.data[i])C.data[k++] = B.data[j++];}while(i < A.length){C.data[k++] = A.data[i++]}while(j < B.length){C.data[k++] = B.data[j++]}C.length = k;return true;}



有数组代替顺序表实现:

#include <stdio.h>int main(){    int d1[5]={1,5,6,7,8};    int d2[8]={2,3,7,8,10,11};    int d3[20]={0};    int i=0;    int j=0;    int k=0;    int n=0;    while(i<5 && j<8)    {        if(d1[i] < d2[j])            d3[k++] = d1[i++];            else if(d1[i] > d2[j])            d3[k++] = d2[j++];            }    while(i<5)    {        d3[k++] = d1[i++];    }    while(j<8)    {        d3[k++] = d2[j++];    }    for(n;n<k;n++)    {        printf("%d\n",d3[n]);    }    return 0;}

结果:

1 2 3 5 6 7 7 8 8 10 11



原创粉丝点击