两个顺序表合并成一个顺序表
2017-11-04 20:11
120 查看
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef int ElemType; typedef struct { ElemType *elem; int length; int listsize; }SqList; Status InitList_Sq(SqList &L) { L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));//首地址 if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK; } int LocateElem(SqList &L,int e) { int i,j; for(i=0;i<L.length;i++) { if(e==L.elem[i]) j=i+1; } printf("%d",j); return OK; } int ListLength(SqList L) { // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 return L.length; } int GetElem(SqList &L,int i,ElemType &e) { if(i>L.length||i<1) exit(OVERFLOW); e=L.elem[i-1]; return OK; } Status ListInsert_Sq(SqList &L,int i,ElemType e) { ElemType *newbase,*p,*q; if(i>L.length+1||i<1) return ERROR; if(L.length>=L.listsize) { newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } //q=L.elem+i-1; //插入位置 等价于 q=&(L.elem [i-1]); for(p=L.elem+L.length-1;p>=q;--p) *(p+1)=*p; *q=e; ++L.length; return OK; } Status ListDelect_Sq(SqList &L,int i,ElemType &e) { ElemType *p,*q; if(i<1||i>L.length) return ERROR; p=L.elem+i-1; e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p) { *(p-1)=*p; } L.length--; return OK; } void ListPrint(SqList L) //线性表输出 { ElemType *p; printf("线性表中的元素为:\n"); for(p=L.elem;p<L.elem+L.length;p++) { printf("%d",*p); } } void MergeList_Sq(SqList LA,SqList LB,SqList &LC) { int *pa,*pb,*pc; int *pa_last,*pb_last; pa=LA.elem; pb=LB.elem; LC.length=LC.listsize=LA.length+LB.length; pc=LC.elem=(ElemType *)malloc(LC.listsize * sizeof(ElemType)); if(!LC.elem) exit(OVERFLOW); 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++; } void main() { SqList LA; SqList LB; SqList LC; int i,a; ElemType e; InitList_Sq(LA); InitList_Sq(LB); InitList_Sq(LC); printf("input five data \n"); for(i=1;i<=5;i++) { scanf("%d",&e); ListInsert_Sq(LA,i,e); } printf("输入五个数:\n"); for(a=1;a<=5;a++) { scanf("%d",&e); ListInsert_Sq(LB,a,e); } ListPrint(LA); printf("\n"); ListPrint(LB); printf("\n"); MergeList_Sq(LA,LB,LC); printf("\n"); ListPrint(LC); }
相关文章推荐
- 将两个有序顺序表合并成一个新的有序顺序表
- C语言实现合并两个有序(从小到大)顺序表为一个顺序表
- 两个数组合并到一个数组
- 将两个表序列表合并为一个有序列表
- 两个有序链表合并为一个链表
- 两个无序的数组 如何进行合并 为一个有序的数组
- leetcode:Merge Sorted Array(合并两个有序数组到其中一个数组中)【面试算法题】
- 编写函数fun,其功能是将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c数的十位和千位上,b数的十位和个位依次放在c数的百位和各位上
- 输入两个数列,分别以某数为结束标志,分别生成递增有序单链表;再将这两个表合并为一个递增有序单链表,输出表中各结点的值
- 给出一个函数来合并两个字符串A和B
- 将两个非递减的有序链表合并为一个非递增的有序链表
- 将两个递增有序的带头结点的单链表A、B合并成为一个递增有序的带头结点的单链表
- 给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
- 把两个DataTable合并成一个
- 合并两个链表成一个升序链表
- 合并两个顺序表
- oracle数据库中同一个表的两个字段 数据合并成一个数据以及字符串补0
- 两个NSMutableDictionary合并成一个NSMutableDictionary
- 剑指offer2.3.2字符串:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,编写一个函数,将A2合并到A1并排序
- 合并两个数组,两者重复的删除,单着重复的出现一个。