ADT列表添加具有相同秩C的元素

iq3niunx  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(89)

试图理解一个问题,即L在添加元素后的内容是什么,L是C中的ADT列表。假设ADT列表已经实现。

//code
int main() {
 PtList L = listCreate();
 listAdd(L, 0, 'a');
 listAdd(L, 2, 'b');
 listAdd(L, 1, 'c');
 listAdd(L, 1, 'd');
 listAdd(L, 3, 'e');
 listAdd(L, 2, 'f');
 listAdd(L, 3, 'f');
 listDestroy(&L);
 return EXIT_SUCCESS;
}

我认为一个秩中不可能有两个元素,所以我知道L = a,d,f,f,然而解是L = a,d,f,f,c,e,这毫无意义。如果它可以有相同的元素,那么B在哪里?
谢谢

pcww981p

pcww981p1#

没有提供有关listAdd()如何处理指定秩的信息。这应该在考试的原始问题中提供。由于这些信息显然没有提供(根据OP),考试问题的结构很糟糕。
由于考试的问题是问清单的内容是什么:

PtList L = listCreate();
 listAdd(L, 0, 'a');
 listAdd(L, 2, 'b');
 listAdd(L, 1, 'c');
 listAdd(L, 1, 'd');
 listAdd(L, 3, 'e');
 listAdd(L, 2, 'f');
 listAdd(L, 3, 'f');

“正确”的解决方案是:
a,d,f,f,c,e
listAdd的行为可以被逆向工程以使用以下规则:
1.指定的“rank”是列表中要插入新元素的位置,从0开始计数。
1.如果新元素的“rank”大于列表的当前长度或小于零,则不执行任何操作。
1.否则,使用指定的“value”创建新元素,并将其插入列表中的“rank”位置。这将有效地将在位置“rank”或更大的位置处的任何原始元素的rank增加1。
下面显示了每个步骤中列表的内容,新添加的元素用*标记:

PtList L = listCreate();  // []
listAdd(L, 0, 'a');       // [*a]
listAdd(L, 2, 'b');       // [ a]  (no element inserted due to invalid position)
listAdd(L, 1, 'c');       // [ a, *c]
listAdd(L, 1, 'd');       // [ a, *d,  c]
listAdd(L, 3, 'e');       // [ a,  d,  c, *e]
listAdd(L, 2, 'f');       // [ a,  d, *f,  c,  e] 
listAdd(L, 3, 'f');       // [ a,  d,  f, *f,  c,  e]

相关问题