看一看有什么问题,为什么会这样

代码
#ifndef _SQLIST_H
#define _SQLIST_H
#define MaxSize 100

typedef int ElemType;


typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

void InitList(SqList &L);
void DestroyList(SqList L);
int GetLength(SqList L);
int GetElem(SqList L, int i, ElemType &e);
int Locate(SqList L,ElemType x);
int InsElem(SqList &L, ElemType x, int i);
int DelElem(SqList &L, int i);
void DispList(SqList L);
void CreateList(SqList &L, ElemType a[], int n);

#endif
#include 
#include 
#include 

using namespace std;

#define MaxSize 100
typedef int ElemType;

typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

void InitList(SqList &L)
{
    L.length = 0;
}

void DestroyList(SqList L)
{}

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

int GetElem(SqList L, int i, ElemType &e)
{
    if(i < 1 || i > L.length)
        return 0;
    else
    {
        e = L.data[i - 1];
        return 1;
    }
}

int Locate(SqList L, ElemType x)
{
    int i = 0;
    while (i < L.length && L.data[i] != x)
        i ++;
    if(i >= L.length)    return (0);
    else    return (i + 1);
}

int InsElem(SqList &L, ElemType x, int i)
{
    int j;
    if(i < 1 || i > L.length + 1)
        return 0;
    for(j + L.length; j > i - 1; j --)
        L.data[j] = L.data[j - 1];
    L.data[i - 1] = x;
    L.length++;
    return 1;
}

int DelElem(SqList &L, int i)
{
    int j;
    if(i < 1 || i > L.length)
        return 0;
    for(j = i; j < L.length; j++)
        L.data[j - 1] = L.data[j];
        L.length--;
        return 1;
}

void DispList(SqList L)
{
    int i;
    for(i = 0; i < L.length; i++)
        printf("%d ",L.data[i]);
        printf("\n");
}

void CreateList(SqList &L, ElemType a[], int n)
{
    int i, k = 0;
    for(i = 0; i < n; i++)
    {
        L.data[k] = a[i];
        k ++;
    }
    L.length = k;
}
#include 
#include 
#include "SqList.h"

using namespace std;

void basic_foo()
{
    SqList L,L1,L2;
    InitList(L);
    InitList(L1);
    InitList(L2);
    int n,a[MaxSize];
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    int k = 0, j = 0;
    int r[MaxSize],o[MaxSize];
    for(int i = 0; i < n; i++)
    {
        if(a[i] % 2 == 0)
        {
            o[k] = a[i];
            k++;
        }
        else
        {
            r[j] = a[i];
            j++;
        }
    }
    CreateList(L,a,n);
    printf("L:");        DispList(L);
    printf("拆分\n");
    int n1 = sizeof(r) / sizeof(r[0]);
    int n2 = sizeof(o) / sizeof(o[0]);
    CreateList(L2, r, n1);
    printf("L:");        DispList(L2);
    printf("\n");
    CreateList(L1, o, n2);
    printf("L1:");        DispList(L1);
    printf("\n");
    DestroyList(L);
    DestroyList(L1);
    DestroyList(L2);
}

void expand_foo()
{
    
    
}

int main()
{
    basic_foo();
    expand_foo();
    return 0;
}
运行结果及报错内容

img

我想要达到的结果

img

int n1 = sizeof(r) / sizeof(r[0]);
int n2 = sizeof(o) / sizeof(o[0]);
这是在干啥呢,r的长度不是固定的吗,还用算吗,不就是MaxSize吗
你应该在前面录入数据的时候先统计好到底有几个奇数,几个偶数,拆分的链表就按照奇数偶数的个数来创建,而不是按MaxSize长度来创建,否则只有前面几个是数据,后面全是乱码