线性表的顺序显示

详情注释都有,下次有时间将合并写好一些

#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