📄 algo0217.cpp
字号:
void difference(SLinkList &space, int &S) { // 算法2.17
// 依次输入集合A和B的元素,在一维数组space中建立表示集合(A-B)∪(B-A)
// 的静态链表, S为头指针。假设备用空间足够大,space[0].cur为头指针。
int i, j, k, m, n, p, r;
ElemType b;
InitSpace_SL(space); // 初始化备用空间
S = Malloc_SL(space); // 生成S的头结点
r = S; // r指向S的当前最后结点
m = random(2,8); // 输入A的元素个数
n = random(2,8); // 输入B的元素个数
printf(" A = ( ");
initrandom_c1();
for (j=1; j<=m; ++j) { // 建立集合A的链表
i = Malloc_SL(space); // 分配结点
//printf("i=%d ",i);
space[i].data = random_next_c1(); // 输入A的元素值
printf("%c ", space[i].data); // 输出A的元素
space[r].cur = i; r = i; // 插入到表尾
}
printf(")\n");
space[r].cur = 0; // 尾结点的指针为空
initrandom_c1();
printf(" B = ( ");
for (j=1; j<=n; ++j) {
// 依次输入B的元素,若不在当前表中,则插入,否则删除
b = random_next_c1(); // 输入B的元素值
printf("%c ", b); // 输出B的元素
p = S; k = space[S].cur; // k指向集合A中第一个结点
while (k!=space[r].cur && space[k].data!=b) {// 在当前表中查找
p = k; k = space[k].cur;
}
if (k == space[r].cur) {
// 当前表中不存在该元素,插入在r所指结点之后,且r的位置不变
i = Malloc_SL(space);
space[i].data = b;
space[i].cur = space[r].cur;
space[r].cur = i;
} else { // 该元素已在表中,删除之
space[p].cur = space[k].cur;
Free_SL(space, k);
if (r == k) r = p; // 若删除的是尾元素,则需修改尾指针
}
}
printf(")\n");
} // difference
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -