动态构建顺序表,合并两个顺序表(C语言)
2017-07-23 20:08
387 查看
本程序实现将两个元素非递减排列的顺序表合并
以下程序用VC++6.0调试,确认正确无误。
以下程序用VC++6.0调试,确认正确无误。
#include<stdio.h> #include<stdlib.h> #define MaxSize 100 #define listincrement 10 #define begin_size 5 //表初始长度 typedef int ElemType; typedef struct //定义 { ElemType *elem; int length; int listsize; }SeqList; void Init_SeqList(SeqList *L) //创建空表 { L->elem = (int*)malloc(MaxSize*sizeof(ElemType)); if(!L->elem) exit(0); L->length = 0; L->listsize = MaxSize; } void Put_SeqList(SeqList *L) //打印表 { ElemType *begin, *end; begin = L->elem; end = &(L->elem[L->length-1]); if(begin == end) exit(0); for(; begin < end ; begin++) printf("%d->",*begin); printf("%d\n",*end); } void Insert_SeqList(SeqList *L, int i, ElemType x) //插入元素 { ElemType *newbase, *insertptr, *p; if(i < 1 || i > L->length+1) exit(0); if(L->length >= L->listsize) { newbase=(ElemType*)realloc(L->elem, (L->listsize+listincrement)*sizeof(ElemType)); if(!newbase) exit(0); L->elem = newbase; L->listsize += listincrement; } insertptr = &(L->elem[i-1]); p = &(L->elem[L->length-1]); for(;p >= insertptr; p--) *(p+1) = *p; *insertptr = x; L->length++ ; } /********以下为合并算法部分*******/ void Merge_SeqList(SeqList La, SeqList Lb, SeqList *Lc) //已知La,Lb的元素非递减排列 { ElemType *pa, *pb, *pc, *pa_last, *pb_last; pa = La.elem; pb = Lb.elem; Lc->length = La.length + Lb.length; Lc->listsize = Lc->length; pc = (ElemType*)malloc(Lc->listsize*sizeof(ElemType)); //分配存储空间 if(!Lc->elem) exit(0); Lc->elem = pc; //存储地址 pa_last = La.elem + La.length-1; pb_last = Lb.elem + Lb.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++; } /**********以下为main函数*******/ int main() //实现创建两个顺序表,然后将两个表归并 { SeqList La, Lb, Lc; ElemType x; int i; Init_SeqList(&La); //初始化 Init_SeqList(&Lb); Init_SeqList(&Lc); printf("请输入表La\n"); //创建La Lb for(i = 1; i <= begin_size; i++) { scanf("%d",&x); Insert_SeqList(&La,i,x); } printf("请输入表Lb\n"); for(i = 1; i <= begin_size; i++) { scanf("%d",&x); Insert_SeqList(&Lb,i,x); } Merge_SeqList(La,Lb,&Lc); //归并 Put_SeqList(&Lc); return 0; }
相关文章推荐
- 【动态顺序表】 c语言的动态顺序表
- 【数据结构】C语言实现顺序表(动态顺序表)
- 顺序表的创建,插入,删除,查找,逆序以及合并两个有序的顺序表
- 构造顺序表--合并两个按元素从小到大排列的顺序表
- c语言,用顺序表的原理合并两个集合
- 【c语言】数据结构—动态储存顺序表的扩容、合并(源代码)
- 【动态顺序表】 c语言的动态顺序表
- C语言实现合并两个有序(从小到大)顺序表为一个顺序表
- 将两个顺序表的合并为顺序表
- 两个多项式相乘后合并同类项并以指数从低到高顺序排序并打印C语言
- 【C语言】静态顺序表和动态顺序表的实现
- 大一新手学习线性表-顺序表的合并(C语言)
- 有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
- C语言--动态顺序表
- C语言实现动态顺序表
- 利用C语言实现动态顺序表
- 静态与动态顺序表操作的C语言实现
- C语言实现一个动态内存的顺序表
- c语言数据结构中两个有序链表合并为一个新链表
- 【顺序表】用c语言简单实现顺序表