详情注释都有,下次有时间将合并写好一些
#include <stdio.h> #include <stdlib.h> //----------线性表的动态分配 顺序 存储结构------------- #define LIST_INT_SIZE 100 #define LISTINCREATMENT 10 #define OVERFLOW -2 #define OK 1 #define ERROR 0 typedef int ElemType; typedef struct { ElemType *elem; int length; int listsize; /*当前分配的存储容量*/ } SqList; SqList InitList(SqList L) { //初始化 L.elem = (ElemType *)malloc(LIST_INT_SIZE * sizeof(ElemType)); if (!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INT_SIZE; return L; } int ListInsert(SqList *L, int i, ElemType e) { //插入元素 // i 是 位置不是下标 if (i < 1 || i > (*L).length + 1) return ERROR; if (L->length >= L->listsize) // 存储空间已经满了 ,增加分配 { ElemType *newbase = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREATMENT) * sizeof(ElemType)); if (!newbase) exit(OVERFLOW); L->elem = newbase; L->listsize += LISTINCREATMENT; } ElemType *q = &(L->elem[i-1]); ElemType *p = &(L->elem[L->length-1]); while(p>=q){ *(p+1) = *p; --p; } *q = e; ++L->length; return OK; } int ListDelete(SqList *L, int i, ElemType &e) { //删除元素 if (i < 1 || i > L->length) return ERROR; ElemType *p = &(L->elem[i - 1]); ElemType *q = &(L->elem[L->length - 1]); e = *p; for (++p; p <= q; ++p) *(p - 1) = *p; --L->length; return OK; } void MergeList_Sq(SqList La,SqList Lb,SqList *Lc){ ElemType *pa = La.elem; ElemType *pb = Lb.elem; ElemType *pc , *pa_last = &(La.elem[La.length-1]) , *pb_last = &(Lb.elem[Lb.length-1]) ; Lc->listsize = Lc->length = La.length +Lb.length; pc = Lc->elem = (ElemType *) malloc(Lc->listsize*sizeof(ElemType)); if(!pc) exit(OVERFLOW); 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 PrintList(SqList L) { //打印 for (int i = 0; i < L.length; ++i) printf("%d " , L.elem[i]); printf("\n"); printf("%d",L.length); printf("\n"); } int main(int argc, char **argv) { //测试 SqList La = InitList(La); SqList Lb = InitList(Lb); SqList Lc ; int la[] = {1,2,4,10,17,19} ,lb[] ={3,5,6}; for(int i=0;i<6;i++){ ListInsert(&La,i+1,la[i]); } for(int i=0;i<3;i++){ ListInsert(&Lb,i+1,lb[i]); } MergeList_Sq(La,Lb,&Lc); PrintList(La); PrintList(Lb); PrintList(Lc); return 0; }
线性表的顺序显示
猜你喜欢
转载自blog.csdn.net/nonoiamyoufather/article/details/83115269
今日推荐
周排行