用线性表实现有序表的合并

#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
typedef int ElemType;
typedef struct
{
    ElemType* elem;
    int length;
    int real_len;
}SqList;
//initial
int SqL_INIT(SqList* L)
{
    L->elem = (int*)malloc(sizeof(int) * SIZE);
    if (!L->elem)
    {
        printf("fail to create this memory>");
        return 0;
    }
    L->real_len = SIZE;
    L->length = 0;
    return 1;
}

int SqL_len(SqList L)
{
    return L.length;
}

int IsEmpty(SqList L)
{
    if (L.length == 0)
    {
        printf("this is empty>");
        return 0;
    }
    return 1;
}

//创建元素
void SqL_input(SqList *L)
{
    int i = 0;
    int j = 0;
    printf("输入你要插入的元素个数>");
    scanf("%d", &i);
    L->real_len=L->length = i;
    for (j; j < L->length; j++)
    {
        printf("输入第%d个元素的值", j+1);
        scanf("%d",&L->elem[j]);
        printf("\n");
    }
}
//合并元素
void MergeList(SqList* M, SqList* N, SqList* R)
{
    int* p, *p_lat, *q, *q_lat,*r;
    p = M->elem;
    p_lat = M->elem + M->length-1;
    q = N->elem;
    q_lat = N->elem + N->length-1;
    r = R->elem;
    while ((p<=p_lat) && (q<=q_lat))
    {
        *r = (*p < *q) ? (*p) : (*q);//使用的是三目运算符,我自己比较倾向于理解这种
        //r接受了谁的值,谁的指针就移动
       if (*r == *p)//r
        {
            p++;
        }
        else
        {
            q++;
        }
        r++;//移动r
        R->length++;//记录c中的元素个数,因为初始化的时候c=0;
    }
//分别讨论p/q到达结尾之前的情况
    while (p<=p_lat)
    {
        *r++ = *p++;
        R->length++;//记录c中的元素个数,因为初始化的时候c=0;
    }
    while (q<=q_lat)
    {
        *r++ = *q++;
        R->length++;//记录c中的元素个数,因为初始化的时候c=0;
    }
}
//打印元素
void PRINT(SqList L)
{
    int i = 0;
    if (L.length == 0)
    {
        printf("this list is empty");
        exit(EXIT_FAILURE);
    }
    for (i = 0; i < L.length; i++)
    {
        printf("%d\n", L.elem[i]);
    }
}
int main()
{
    SqList a, b, c;
    SqL_INIT(&a);
    SqL_INIT(&b);
    SqL_INIT(&c);
    SqL_input(&a);
    SqL_input(&b);
//因为开辟的空间很大,所以这里就没有考虑c空间溢出的情况
    MergeList(&a, &b, &c);
    PRINT(c);
    return 0;
}

 

用线性表实现有序表的合并

上一篇:第一章#线性表的定义和顺序存储存储


下一篇:奇数排在偶数之前,偶数却变为垃圾值