我正在做一項任務,教授不希望我們使用任何其他代碼來插入除他提供的僞代碼以外的值。我誤解了這個僞代碼嗎?
我在做什麼的簡要說明。我正在創建一個動態的整數數組,它們將按順序插入(從最低到最高)。
這裏是他提供的僞代碼:
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