0 / 0 / 0
Регистрация: 31.08.2011
Сообщений: 15
|
|
1 | |
Переставить члены последовательности так, чтобы сначала расположились все ее неотрицательные члены16.10.2011, 12:58. Показов 1592. Ответов 1
Метки нет (Все метки)
Помогите решить задачу!
:cofee2: Дана очередь, элементами которой являются действительные числа. Переставить ее члены так, чтобы сначала расположились все ее неотрицательные члены, а потом - все отрицательные. Порядок как среди неотрицательных членов, так и среди отрицательных должен быть сохранен прежним. Для временного хранения неотрицательных и отрицательных элементов использовать стеки. Значения элементов очереди до и после перестановки вывести на экран.
0
|
16.10.2011, 12:58 | |
Ответы с готовыми решениями:
1
Переставить члены последовательности так, чтобы сначала расположились все ее неотрицательные члены Переставить члены последовательности так, чтобы сначала расположились все неотрицательные Переставить очередь, чтобы сначала расположились все ее неотрицательные члены, а потом — все отрицательные Упорядочить массив так, чтобы сначала иши упорядоченные положительные члены а потом упорядоченные отрицательные члены |
16.10.2011, 17:54 | 2 | |||||
Сообщение было отмечено Памирыч как решение
Решение
Идея: имеем исходный очередь q с числами и два дополнительных pos и neg для положительных и отрицательных чисел. Описываю в общепринятых обозначениях в предположении, что структуры стека и очереди описаны.
1. Пока q не пуст: 2. Вытаскиваем первый элемент очереди element:=q.next; 3. Проверяем на неотрицательность (переходим к п.4 и п.5 соответственно) if element>0 then 4. (Если положительный) Добавляем положительное число в соотв. стек pos.push(element) 5. (Если отрицательный) Добавляем отрицательное число в соотв. стек neg.push(element) 6. Когда q станет пустым, начинаем добавлять в него элементы в правильном порядке. Тут один момент есть: в стеках сверху находятся элементы, которые в очереди были ближе к концу. Они будут извлекаться из стека в первую очередь (т.е. в приоритете). В очередь же мы добавляем по-порядку. А это значит, что вот просто так не получиться взять и "перегнать" сначала из одного стека в очередь, а потом из второго в один заход, поскольку порядок отрицательных (и положительных) элементов будет инвертирован. Стало быть, необходимо сделать одну из трех вещей: 1. Если очередь организована массивом, объявить очередь стеком и затолкать в нужном порядке элементы. 2. Инвертировать оба стека, затем добавить элементы в очередь. 3. Добавить элементы в очередь, затем инвертировать очередь. Под "добавить элементы со стеков в очередь" я подразумеваю (с точностью до порядка 2 и 3 строки)
0
|
16.10.2011, 17:54 | |