试图理解一个问题,即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在哪里?
谢谢
1条答案
按热度按时间pcww981p1#
没有提供有关
listAdd()
如何处理指定秩的信息。这应该在考试的原始问题中提供。由于这些信息显然没有提供(根据OP),考试问题的结构很糟糕。由于考试的问题是问清单的内容是什么:
“正确”的解决方案是:
a,d,f,f,c,e
listAdd
的行为可以被逆向工程以使用以下规则:1.指定的“rank”是列表中要插入新元素的位置,从0开始计数。
1.如果新元素的“rank”大于列表的当前长度或小于零,则不执行任何操作。
1.否则,使用指定的“value”创建新元素,并将其插入列表中的“rank”位置。这将有效地将在位置“rank”或更大的位置处的任何原始元素的rank增加1。
下面显示了每个步骤中列表的内容,新添加的元素用
*
标记: