Добавление и удаление элементов массива

Для добавления нового элемента массива необходимо выполнить следующую последовательность действий: увеличить размерность на единицу; сдвинуть вправо на одну позицию часть массива, начиная с позиции, в которую добавляется элемент; в «освободившийся» элемент записать добавляемое значение.

Пример 5.5.1. В массив Х размерностью N добавить новый элемент. Значение нового элемента и позиция, в которую он добавляется, указываются при вводе.

На рис. 5.5.1. приведен фрагмент блок-схемы алгоритма решения поставленной задачи. Процесс ввода и вывода массива Х не показан, т.к. он не отличается от описанного в п. 5.1.

 
 


В блоке 1 в переменную А вводится значение нового элемента массива, а в переменную k заносится номер позиции, в которую он будет добавляться. После этого увеличивается размерность массива N на единицу (блок 2) и проверяется, действительно ли новый элемент добавляется в середину массива (блок 3). В этом случае производится сдвиг части элементов массива Х с N -й до k -й позиции вправо (блоки 4-5) и значение переменной А заносится в «освободившийся» элемент массива с номером k (блок 6). Если условие в блоке 3 не выполняется, то новый элемент добавляется в конец массива Х (блок 7).

Для удаления элемента из массива достаточно выполнить сдвиг части массива, расположенного после удаляемого, на одну позицию влево. В результате будет стерт удаляемый элемент, а последний элемент массива будет продублирован в предпоследний. После этого достаточно уменьшить размерность массива на единицу.

Пример 5.5.2. Из массива Х размерностью N удалить элемент с номером k. Номер удаляемого элемента указывается при вводе.

На рис. 5.5.2. показан фрагмент блок-схемы алгоритма решения поставленной задачи. При этом процесс ввода и вывода массива Х также не приводится.

В блоке 1 в переменную k вводится номер элемента, который необходимо удалить. В блоке 2 проверяется, находится ли удаляемый элемент в середине массива. В этом случае производится сдвиг части элементов массива Х с k -й до N -й позиции влево (блоки 3-4) и уменьшается размерность массива N на единицу (блок 7). В противном случае проверяется, не является ли удаляемый элемент последним в массиве (блок 5). Если это так, то для удаления элемента достаточно всего лишь уменьшить размерность массива N (блок 7). Если же значение k не удовлетворяет этим двум условием, значит, оно задано не верно и удаление элемента из массива не производится (блок 6).


Иногда возникает необходимость удалить из массива не один, а несколько элементов, удовлетворяющих определенному условию (например, все элементы, значение которых равно 0). Для этой цели необходимо организовать два цикла по перебору элементов массива. Первый цикл (внешний) будет искать в массиве элементы, которые необходимо удалить. Второй цикл (внутренний) будет удалять найденные элементы, описанным выше способом. При этом для организации внешнего цикла не рекомендуется использовать цикл «Для». Это связано с тем, что после удаления элемента во внутреннем цикле, будет уменьшаться размерность массива, которая в свою очередь является граничным значением для параметра внешнего цикла.

На рис. 5.5.3. приводится фрагмент блок-схемы алгоритма, в котором выполняется удаление всех нулевых элементов из массива за один цикл.

Переменная k выполняет две функции: является счетчиком элементов массива, которые не надо удалять (не равные 0), и в тоже время задает позицию в массиве Х, в которую переставляется такой элемент (блок 1). В массиве осуществляется поиск (блоки 2-3) и подсчет количества элементов, которые не должны быть удалены (блок 4); каждый найденный элемент переставляется в начало массива в позицию, совпадающую с порядковым номером этого элемента (блок 4).


В результате все нулевые элементы массива будут пропущены, а элементы не равные 0 выставлены подряд в начало массива, размерность которого уже будет равна k (блок 5).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: