C语言 合并有序顺序表

xiaoxiao2021-02-28  109

思路: 

如有有序表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

转载请注明原文地址: https://www.6miu.com/read-72597.html

最新回复(0)