合并顺序表
Posted 追
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并顺序表相关的知识,希望对你有一定的参考价值。
将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C,已知顺序表A和B的的元素个数分别为m和n
思想:设定3个指针i,j,k分别指向A、B、C的首地址,然后进行A[i]、B[j]的比较,A[i]>B[j],则将B[j]赋值给C[k],同时j,k自增,否则对A进行相似的操作,直到A、B中至少有一数组
元素全都赋值完成,最后将另一数组剩下的元素赋值到C尾部
#include <stdio.h> #include <stdlib.h> #define ElemType int //顺序表采用动态存储空间 typedef struct{ ElemType *elem;//存储空间基地址 int length;//元素长度 //int listsize;//当前分配的存储容量 }SqList; void merge(SqList A,SqList B,SqList &C) { int i,j,k; i = j = k = 0; while(i < A.length && j < B.length) { if(A.elem[i] > B.elem[j]) { C.elem[k] = B.elem[j]; k ++ , j ++; } else{ C.elem[k] = A.elem[i]; k ++ , i ++; } } while(i < A.length) { C.elem[k] = A.elem[i]; k ++ , i ++; } while(j < B.length) { C.elem[k] = B.elem[j]; k ++ , j ++; } C.length = k; } int main() { SqList A,B,C; int i; scanf("%d%d",&A.length,&B.length);//‘.’号为一级运算符,&为二级 A.elem = (ElemType *)malloc(sizeof(ElemType)*(A.length));//根据基地址开辟空间 B.elem = (ElemType *)malloc(sizeof(ElemType)*(B.length)); C.elem = (ElemType *)malloc(sizeof(ElemType)*(B.length+A.length)); for(i=0;i<A.length;i++) scanf("%d",&A.elem[i]); for(i=0;i<B.length;i++) scanf("%d",&B.elem[i]); merge(A,B,C); printf("合并后线性表:"); for(i=0;i<C.length;i++) printf("%d,",C.elem[i]); return 0; }
以上是关于合并顺序表的主要内容,如果未能解决你的问题,请参考以下文章