动态构建顺序表,合并两个顺序表(C语言)
来源:互联网 发布:7号淘宝店网址 编辑:程序博客网 时间:2024/06/06 17:06
本程序实现将两个元素非递减排列的顺序表合并
以下程序用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;}
阅读全文
0 0
- 动态构建顺序表,合并两个顺序表(C语言)
- C语言实现合并两个有序(从小到大)顺序表为一个顺序表
- c语言,用顺序表的原理合并两个集合
- 动态构建顺序表,及顺序表的插入删除算法(C语言)
- 合并两个顺序表
- 合并两个顺序表
- C语言动态顺序表
- 动态顺序表(C语言实现)
- C语言 合并有序顺序表
- 合并两个顺序链表
- 两个有序顺序表合并
- 【动态顺序表】 c语言的动态顺序表
- 【数据结构】C语言实现顺序表(动态顺序表)
- C语言实现动态顺序表
- c语言实现动态顺序表
- 利用C语言实现动态顺序表
- C语言实现动态顺序表
- c语言顺序表动态实现
- Android View 事件分发
- python_enumerate
- Hello CSDN
- 面向对象和面向过程的区别
- [BZOJ2235]回文图
- 动态构建顺序表,合并两个顺序表(C语言)
- impala 学习笔记
- NOI2017搞基记
- linux系统中的主目录结构及其作用
- 从2-3树到红黑树
- C++中sort排序
- 机器学习教程之12-朴素贝叶斯(naive Bayes)法的sklearn实现
- 神水四题
- PHP面向对象编程思想介绍