我正在做一项任务,教授不希望我们使用任何其他代码来插入除他提供的伪代码以外的值。我误解了这个伪代码吗?
我在做什么的简要说明。我正在创建一个动态的整数数组,它们将按顺序插入(从最低到最高)。
这里是他提供的伪代码:
for (i = valueNum - 1; array[i] is the wrong spot for newValue; --i) array[i] = array[i-1]
其中阵列[i]是用于NEWVALUE错了地方:
(i > 0) AND (value at array[i-1] is greater than newValue)
他也包括这样的信息:
你也应该说服自己上述伪代码适用于(即,也覆盖)要存储的新值是#1值的情况,要存储的新值大于或等于最高现有值的情况,以及要存储的新值小于或等于最小现有值的情况。
所以,它看起来很直截了当。我给它一个尝试:
void IntArray::insert(int nInt)
{
/* check if resize is needed */
if(mySize == capacity)
{
int newCapacity = capacity * 1.5;
if(newCapacity == capacity)
newCapacity = capacity + 1;
capacity = newCapacity;
}
/* here is where my mistake was */
int i;
mySize++;
for(i = mySize -1; i > 0 && data[i-1] > nInt; --i)
{
data[i] = data[i - 1];
}
data[i] = nInt;
}
现在看来似乎正确遵循伪代码,但它看起来像它不将永远工作,如果mySize
为0或1。有人能指出我在正确的方向?
您是否尝试过使用mySize在0或1处运行它?怎么了? –
只是在不改变存储空间的情况下更改'容量'是不会有太大帮助的,是吗?你不需要分配一些东西吗?你也从来没有实际存储新的价值。 –
@DamienBlack它不会进入循环,因为它不符合条件语句。 – Bobbin4Apples