ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-30 11:01:26  阅读:135  来源: 互联网

标签:SqList 线性表 int 合并 elem ++ length 有序 SqL


#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;
}

 

标签:SqList,线性表,int,合并,elem,++,length,有序,SqL
来源: https://blog.csdn.net/qq_59619949/article/details/121047759

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有