0

我需要写一个

public void add(int index, int element)

所以如果我有一个这样的数组:

     element: 9 1 2 3  
     index:   0 1 2 3 4

并且参数是 add(1,8) 得到:

    element: 9 8 1 2 3 
    index:   0 1 2 3 4

有什么好方法可以做到这一点?

这是我目前正在使用的:

for (int i = actualSize; i >= 0; i--)
       {
           if (i != index)
           {
               data[i] = data[i-1];
           }
           else if (i == index)
               data[i] = element;
       }

但是如果调用: add(1, 8) ,我会得到以下输出:

     element: 9 8 1 2  
     index:   0 1 2 3 4
4

2 回答 2

0

可能是这样的:

for (int i = actualSize-1; i>0 && i>index; i--)
{
    data[i] = data[i-1];
}
data[index] = element;

但这取决于空元素的含义,例如初始数组末尾的那个。

尾随的将被覆盖,但是,无论它们是什么意思,其他位置的那些“空值”将像正常值一样移动。这可能是也可能不是你需要的。

于 2012-09-20T16:17:11.767 回答
0

我认为您的功能存在逻辑错误。是否要移动插入索引下方的元素?看起来这就是你正在做的事情。

您的循环的以下内容如何:

// make sure that extra space for data[] is allocated

for (int i = maxIndexBeforeInsert; i >= insertAtThisIndex; i--)
{
    data[i+1] = data[i];
}

data[insertAtThisIndex] = element;
于 2012-09-20T15:57:53.103 回答