Алгоритмическое мышление при решении задач (на примере языка C#). Шамшев А.Б - 13 стр.

UptoLike

Составители: 

13
int[] newData = new int[data.Length - 1];
for (int i = 0; i < delIndex; i++) {
newData[i] = data[i];
}
for (int i = delIndex; i < newData.Length; i++) {
newData[i] = data[i + 1];
}
Теперь очевидно, что после удаления массив data нам не нужен, а нужен
newData. Т. е. можно сказать, что в data надо записать newData.
int[] data = new int[] { 2, 4, 6, 8, 4, 1, 3, 7 };
int delIndex = 3;
int[] newData = new int[data.Length - 1];
for (int i = 0; i < delIndex; i++) {
newData[i] = data[i];
}
for (int i = delIndex; i < newData.Length; i++) {
newData[i] = data[i + 1];
}
data = newData;
Введенная последняя строка (data = newData) очень важна, если выделять
отдельную процедуру удаления элемента. Она указывает на то, что data
изменяется. Т. е. в процедуре появится ключевое слово ref.
Для удаления нам необходимо знать массив, из которого удаляется
элемент и индекс удаляемого элемента. Реализация будет иметь следующий
вид:
public static void delByIndex(ref int[] data, int delIndex) {
int[] newData = new int[data.Length - 1];
for (int i = 0; i < delIndex; i++) {
newData[i] = data[i];
}
for (int i = delIndex; i < newData.Length; i++) {
newData[i] = data[i + 1];
}
data = newData;
}
Таким образом логика обобщенного алгоритма следующая: массив делится
на 2 частиэлементы до удаляемого и после удаляемого. До удаляемого
элементы переписываются без смещения по индексации, а те, которые
расположены после удаляемого, переписываются со смещением индексации в
единицу.
Отметим некоторые важные следствия алгоритма удаления элемента
массива по индексу:
1. Удаление ведет к уменьшению
размера массива на 1. Как следствие
это ведет к изменению массива.
2. Можно сказать, что удаляемый элемент «дробит» массив на 2 части
элементы до удаляемого элемента и элементы после удаляемого.
3. У элементов, которые находятся после удаляемого, индексация
изменяется на единицу.