数据结构–顺序表的应用

img

img

我明明定义了变量的,为什么会这样?

说的是你没有初始化,不是没有定义

用引用吧。比如void init(seqlist &l)。就是每个函数l前面加个&


#include <stdio.h>
#include <stdlib.h>
#define maxsize 100

typedef struct {
    int data[maxsize];
    int length;
}SeqList;

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

void CreatList(SeqList &L) {
    int i, n;
    printf("请输入元素个数(0-%d):", maxsize);
    scanf("%d", &n);
    printf("请输入元素:");
    for (i = 0; i < n; i++) {
        scanf("%d", &L.data[i]);
        L.length++;
    }
    printf("\n");
}

void unionlist(SeqList &La, SeqList &Lb, SeqList &Lc) {
    int i, j, k;
    for (i = 0, k = 0; i < La.length; i++, k++)
        Lc.data[k] = La.data[i];
    for (j = 0; j < Lb.length; j++, k++)
        Lc.data[k] = Lb.data[j];
    Lc.length = La.length + Lb.length;

    int a, b;
    for (a = 1; a <= Lc.length; a++) {
        for (b = a + 1; b <= Lc.length; b++)
            if (Lc.data[a - 1] == Lc.data[b - 1]) {
                for (k = b; k <= Lc.length; k++)
                    Lc.data[k - 1] = Lc.data[k];
                b--;
                Lc.length--;
            }
    }
}

void megerlist(SeqList &La, SeqList &Lb, SeqList &Lc) {
    int i = 0, j = 0, k = 0;
    while (i < La.length && j < Lb.length) {
        if (La.data[i] <= Lb.data[j])
            Lc.data[k++] = La.data[i++];
        else Lc.data[k++] = Lb.data[j++];
    }
    while (i < La.length)
        Lc.data[k++] = La.data[i++];
    while (j < Lb.length)
        Lc.data[k++] = Lb.data[j++];
    Lc.length = La.length + Lb.length;
}

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

int main()
{
    SeqList La, Lb, Lc;
    printf("--------初始化顺序表LA--------\n");
    InitList(La);
    CreatList(La);
    printf("--------初始化顺序表LB--------\n");
    InitList(Lb);
    CreatList(Lb);
    printf("--------LA和LB合并后为--------\n");
    InitList(Lc);
    unionlist(La, Lb, Lc);
    printlist(Lc);
    printf("--------LA和LB归并后为--------\n");
    InitList(Lc);
    megerlist(La, Lb, Lc);
    printlist(Lc);

    return 0;
}

img