我明明定义了变量的,为什么会这样?
说的是你没有初始化,不是没有定义
用引用吧。比如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;
}