题目
顺序表[1]中的元素为整数类型,若有一顺序表L中的元素为(2,5,7,2,3,9,4,2,6,8),经过如下的Proc(&L,2)运算处理之后,顺序表L变化为void Proc(SeqList *L, int x) { int i, j; i = j = 0; while (i <= L->last) { if (L->elem[i]!= x) { L->elem[j] = L->elem[i]; i++; j++; } else { i++; } } L->last = j - 1;}A.(5,3,9,4,6,8) B. (5,7,9,6,8)C. (9,6,8) D. (7,9,8)
顺序表[1]中的元素为整数类型,若有一顺序表L中的元素为(2,5,7,2,3,9,4,2,6,8),经过如下的Proc(&L,2)运算处理之后,顺序表L变化为
void Proc(SeqList *L, int x) {
int i, j;
i = j = 0;
while (i <= L->last) {
if (L->elem[i]!= x) {
L->elem[j] = L->elem[i];
i++;
j++;
} else {
i++;
}
}
L->last = j - 1;
}
A.(5,3,9,4,6,8)
B. (5,7,9,6,8)
C. (9,6,8)
D. (7,9,8)
题目解答
答案
Proc 函数的作用是在顺序表中删除值为 x 的元素。
在遍历顺序表的过程中,当遇到元素不等于 x 时,将其依次往前移动,j 用于记录新的有效元素位置。当遇到元素等于 x 时,只移动 i ,不进行复制操作。
对于给定的顺序表 (2, 5, 7, 2, 3, 9, 4, 2, 6, 8) 和要删除的元素 2 :
初始时 i = j = 0 ,L->last = 9 。
第一次循环,L->elem[0] = 2 ,i 增加到 1 ,j 不变。
第二次循环,L->elem[1] = 5 ,将 5 复制到 L->elem[0] ,i 和 j 都增加到 2 。
以此类推,最终得到新的顺序表。
新的顺序表为 (5, 7, 3, 9, 4, 6, 8) 。
答案:A.