题目
已知线性表的存储结构为顺序表,阅读下列算法,并回答问题:(1)设线性表L=(21,-7,-8,19,0,-11,34,30,-10),写出执行f30(L)后的L状态;(2)简述算法f30的功能。void f30 (SeqList *L) (int i,j;for (i=j=0;i<L->length; i++)if(L->data[i]>=0){if(i!=j)L->data[j]=L->data[i];j++;)L->length=j;}
已知线性表的存储结构为顺序表,阅读下列算法,并回答问题:
(1)设线性表L=(21,-7,-8,19,0,-11,34,30,-10),写出执行f30(L)后的L状态;
(2)简述算法f30的功能。
void f30 (SeqList *L) {
int i,j;
for (i=j=0;i<L->length; i++)
if(L->data[i]>=0){
if(i!=j)L->data[j]=L->data[i];
j++;
}
L->length=j;
}
题目解答
答案
[答案](1)L=(21,19,0,34,30) (2) 删除顺序表中小于0的数。
解析
步骤 1:初始化变量
算法开始时,初始化两个变量i和j为0。这两个变量将用于遍历线性表L和记录非负数的位置。
步骤 2:遍历线性表
使用for循环遍历线性表L中的每个元素。循环条件是ilength,即i小于线性表的长度。
步骤 3:检查元素是否非负
在循环中,使用if语句检查当前元素L->data[i]是否大于等于0。如果是,则执行下一步;否则,跳过该元素,继续遍历下一个元素。
步骤 4:移动非负元素
如果当前元素L->data[i]是非负数,且i不等于j,则将L->data[i]的值赋给L->data[j]。这一步将非负数移动到线性表的前面。然后,将j加1,表示下一个非负数的位置。
步骤 5:更新线性表长度
循环结束后,将线性表的长度L->length更新为j,即非负数的数量。
算法开始时,初始化两个变量i和j为0。这两个变量将用于遍历线性表L和记录非负数的位置。
步骤 2:遍历线性表
使用for循环遍历线性表L中的每个元素。循环条件是i
步骤 3:检查元素是否非负
在循环中,使用if语句检查当前元素L->data[i]是否大于等于0。如果是,则执行下一步;否则,跳过该元素,继续遍历下一个元素。
步骤 4:移动非负元素
如果当前元素L->data[i]是非负数,且i不等于j,则将L->data[i]的值赋给L->data[j]。这一步将非负数移动到线性表的前面。然后,将j加1,表示下一个非负数的位置。
步骤 5:更新线性表长度
循环结束后,将线性表的长度L->length更新为j,即非负数的数量。