0 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 99
|
||||||
1 | ||||||
Удаление нулевых элементов из матрицы01.04.2017, 20:49. Показов 784. Ответов 17
Метки нет (Все метки)
Есть матрица, которая реализована в виде двумерного связного списка, и состоит из значений 0,1,2. Нужно реализовать сохранение нулевых элементов в непарных столбцах и соответственно удаление в парных. В результате должна выйти зубчатая матрица.
0
|
01.04.2017, 20:49 | |
Ответы с готовыми решениями:
17
Найти сумму положительных элементов матрицы А, количество нулевых элементов матрицы B Удаление нулевых элементов Найти произведение элементов матрицы в строках не содержащих нулевых элементов Найти сумму положительных элементов матрицы и количество нулевых элементов |
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
01.04.2017, 21:49 | 2 |
Тут есть одна тонкость. Пусть например одна из строк матрицы имеет вид
1 0 0 2 , и нам нужно удалить первый ноль (так как он стоит в чётном столбце). Но если мы его удалим, то оставшаяся часть строки сдвинется влево, и в результате второй ноль встанет на место первого. Вопрос: нужно ли его тоже удалить, поскольку он теперь стоит в чётном столбце, или нет, поскольку изначально он стоял в нечётном? Лично я склоняюсь ко второму варианту.
0
|
0 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 99
|
|
01.04.2017, 22:01 [ТС] | 3 |
Не нужно, так как он был в нечётном
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
01.04.2017, 22:11 | 4 |
Предлагаю решить задачу в два прохода. На первом проходе помечаем каждый нулевой элемент в чётных столбцах, присваивая ему например 42. На втором проходе удаляем все элементы, равные 42.
При удалении нужно аккуратно перенастроить все указатели, в том числе указатель вышестоящего элемента. Поскольку у нас есть указатель вниз, но нет указателя вверх, это нужно учитывать при обходе матрицы. Сначала удаляем помеченные элементы из верхней строки. Затем делаем цикл по строкам, от верхней до предпоследней, но удаляем не сам элемент, а нижестоящий.
0
|
0 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 99
|
|
01.04.2017, 22:19 [ТС] | 5 |
Интересный вариант, спасибо
а не могли бы код набросать?если не трудно конечно.
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
01.04.2017, 22:27 | 6 |
Не трудно, но лень. По крайне мере сегодня.
Там много мелкой возни с указателями, но принципиально ничего трудного нет.
0
|
0 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 99
|
|
01.04.2017, 22:32 [ТС] | 7 |
а в плане памяти предложенный вами алгоритм как?
я ведь не сказал, основная цель задания - экономное хранение в памяти матриц и экономное использование памяти
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
01.04.2017, 22:34 | 8 |
Ну, мы же не создаём элементы, а удаляем. Так что дополнительная память расходоваться не будет.
Причём удаляем физически, с помощью delete, так что память будет только освобождаться.
1
|
0 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 99
|
|
01.04.2017, 23:14 [ТС] | 9 |
а как при первом проходе определить чётная строка или нет?
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
01.04.2017, 23:17 | 10 |
Наверное всё же столбец.
Проще всего завести счётчик столбцов (например k). Если k%2 == 0, то столбец чётный, если == 1, то нечётный (или наоборот, смотря как считать столбцы, с нуля или с единицы).
1
|
0 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 99
|
|
02.04.2017, 14:16 [ТС] | 11 |
В теории всё вроде ясно, а на практике не выходит
Буду благодарен, если найдёте завтра время и силы помочь, а то я уже 2 дня сижу и всё безуспешно, а в понедельник сдавать. Добавлено через 13 часов 19 минут -up Добавлено через 1 час 24 минуты -up
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|||||||||||
02.04.2017, 14:43 | 12 | ||||||||||
Первая часть - помечаем элементы для удаления
Вторая часть (концепция немного изменилась)
0
|
0 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 99
|
|
02.04.2017, 15:00 [ТС] | 13 |
Спасибо, а удаление через delete или меняя указатели?
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
02.04.2017, 15:23 | 14 |
0
|
0 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 99
|
|
12.04.2017, 15:49 [ТС] | 15 |
-up
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
12.04.2017, 15:58 | 16 |
0
|
0 / 0 / 1
Регистрация: 29.11.2015
Сообщений: 99
|
|
12.04.2017, 15:59 [ТС] | 17 |
Скорее, не новые, а старые. Не выходит функция remove
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
12.04.2017, 16:07 | 18 |
Это не вопрос.
Добавлено через 4 минуты Большая коллекция решенных задач Там есть в том числе удаление элементов из двусвязного списка.
0
|
12.04.2017, 16:07 | |
12.04.2017, 16:07 | |
Помогаю со студенческими работами здесь
18
Определить количество нулевых элементов в тех строках матрицы, которые не содержат положительных элементов Удалить из матрицы те строки, для которых количество ненулевых элементов больше количества нулевых элементов в строке Удаление нулевых строк/ столбцов из матрицы Удаление нулевых элементов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |