1 / 1 / 0
Регистрация: 14.11.2018
Сообщений: 651
1

Как так получилось?

11.01.2019, 14:38. Показов 1349. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Линейный список реализуется с помощью вспомогательного массива целых чисел и переменной, хранящей номер первого элемента, например:

10 25 20 6 21 8 1 30 - массив данных

2 3 4 5 6 7 8 -1 - вспомогательный массив

1 - индекс первого элемента в спис
i -й элемент вспомогательного массива содержит для каждого i -го элемента массива данных индекс следующего за ним элемента. Отрицательное число или нуль используется как признак конца списка. Говоря более точно, для этого можно использовать любое число, не входящее в множество значений индекса массива. Этот же массив после сортировки выглядит так:

10 25 20 6 21 8 1 30 - массив данных

3 8 5 6 2 1 4 -1 - вспомогательный массив

7 - индекс первого элемента в списке.

Вопрос: Тут написано, что после сортировки вспомогательный массив получился в таком порядке. Каким образом он получился таким? Т.е. как его сортировали что он получился таким?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2019, 14:38
Ответы с готовыми решениями:

Переставить цифры местами так, чтобы получилось большее число
Дано число. Если можно переставить его цифры так, чтобы получилось большее число, выведите YES, в...

Переставить цифры числа так, чтобы получилось минимальное возможное число
Дано натуральное число n. Необходимо переставить его цифры таким образом, чтобы получилось...

Переставить цифры числа так, чтобы получилось максимальное возможное число
Дано число N. Требуется переставить его цифры местами таким образом, чтобы получившееся число было...

Рекурсивно расставить знаки операций так, чтобы получилось заданное число
Нужно между цифрами от 1 до 9 расставить знаки операций +,- так, чтобы получилось заданное число,...

13
2376 / 833 / 317
Регистрация: 10.02.2018
Сообщений: 1,961
11.01.2019, 14:57 2
Цитата Сообщение от Гуру77777 Посмотреть сообщение
Т.е. как его сортировали что он получился таким?
Сортировали по возрастанию значений элементов основного массива
0
1 / 1 / 0
Регистрация: 14.11.2018
Сообщений: 651
11.01.2019, 15:04  [ТС] 3
Ygg, Тогда должно получиться 1 6 8 10 20 21 25 30 , а индексы 8 5 7 2 4 6 3 -1. Почему по другому?
0
2376 / 833 / 317
Регистрация: 10.02.2018
Сообщений: 1,961
11.01.2019, 15:15 4
Так и получается

Код
1  2  3  4  5  6  7  8
3  8  5  6  2  1  4  -1
10 25 20 6  21 8  1  30
7 - индекс первого элемента в списке
Код
7 -> 4 -> 6 -> 1 -> 3 -> 5 -> 2 -> 8 -> -1
1    6    8    10   20   21   25   30
0
1 / 1 / 0
Регистрация: 14.11.2018
Сообщений: 651
11.01.2019, 15:32  [ТС] 5
Ок. Про основной я понял А как тогда поменялся 2 3 4 5 6 7 8 -1 - вспомогательный массив на 3 8 5 6 2 1 4 -1
0
2376 / 833 / 317
Регистрация: 10.02.2018
Сообщений: 1,961
11.01.2019, 16:12 6
Поменялся в результате работы некой программы, которую и нужно реализовать по заданию, наверное.
Просто нужно сопоставить пример с описанием и понять алгоритм обхода списка по вспомогательному массиву.
i -й элемент вспомогательного массива содержит для каждого i -го элемента массива данных индекс следующего за ним элемента. Отрицательное число или нуль используется как признак конца списка.
Просто придумывавший задачу знает толк в извращениях
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
11.01.2019, 16:30 7
Цитата Сообщение от Ygg Посмотреть сообщение
Просто придумывавший задачу знает толк в извращениях
Извращение я тут вижу только одно. Зачем последний элемент вспомогательного массива равен -1 ? Если его сделать равным 1, то задача самая естественная.
Есть некие объекты и есть указатели на них. Отсортировать массив объектов, не трогая (не перемещая) сами объекты, а перемещая только указатели на них.
Эта задача полезна, когда объекты внушительного или переменного размера, например, являются строками.
0
1 / 1 / 0
Регистрация: 14.11.2018
Сообщений: 651
11.01.2019, 16:53  [ТС] 8
Байт, Это все хорошо конечно. Но может кто-нибудь объяснит роль вспомогательного массива в реализации ,в данном случае, линейного списка с помощью массива?

Добавлено через 1 минуту
Ygg, Вы можете мне объяснить на простеньком примере смысл использования вспомогательного массива в реализации линейного списка с помощью массива?
0
2376 / 833 / 317
Регистрация: 10.02.2018
Сообщений: 1,961
11.01.2019, 17:39 9
Гуру77777, вспомогательный массив определяет последовательность элементов в списке. Но реализовать задание последовательности можно по разному. Первый вариант, который сразу вырисовывается, это последовательное использование вспомогательного массива. Значение по первому индексу определяет индекс первого элемента данных, значение по второму индексу - индекс второго элемента данных. Но это не соответствует описанию задачи и, полагаю, что в этом ваша загвоздка. Второй вариант, предложенный автором задания, подразумевает не последовательное использование вспомогательного массива. Фактически, основной массив не является списком, а списком является вспомогательный массив. Элемент вспомогательного массива определяет индекс следующего индекса вспомогательного массива. Не знаю, как ещё это можно объяснить.
2
1 / 1 / 0
Регистрация: 14.11.2018
Сообщений: 651
11.01.2019, 21:27  [ТС] 10
ВYgg, Вы конечно хорошо расписали. Все вроде понятно. Вот только непонятно, это я взял с сайта в учебнике тоже самое написано.т.е у них там везде каким-то образом после сортировки вспомогательный массив становится в неизвестно каком порядке
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
11.01.2019, 22:36 11
Цитата Сообщение от Гуру77777 Посмотреть сообщение
можете мне объяснить на простеньком примере смысл использования вспомогательного массива в реализации линейного списка с помощью массива?
В вашем примере смысл не так уж просто понять. Ибо сам массив ничем не лучше, чем вспомогательный. Да и устроен вспомогательны хрен знает как. И все это не делает чести тем, кто эту штуку придумал. А идея использования вспомогательного массива, вот, я как мог, ее объяснил в посте 7.
А что во вспомогательном, указатели или номера, это уж дело десятое. Номера легко перевести в указатели.
Идея в том, что сравнение происходит не по значениям вспомогательного массива, а по тем объектам, на которые они указывают. А переставляются элементы вспомогательного. Что чаще бывает проще.
Ведь какие главные составляющие сортировки (и единственные): Сравнение и Перестановка. И тут сравниваются сами объекты, а переставляются указатели.
Примеры?
Возьмите массив строк
C++
1
2
3
char *srt[6] = { "bbx", "I dont know", "tra-ta-ta", "Hellow, Girrs!", "Ku-ku-ku", "Kva-Kva - Frogs" };
 // и попытайтесь его грамотно и без больших затрат интеллектуальных усилий отсортировать
 // использование qsort допускается и поощеряется
0
2376 / 833 / 317
Регистрация: 10.02.2018
Сообщений: 1,961
11.01.2019, 23:50 12
Цитата Сообщение от Гуру77777 Посмотреть сообщение
неизвестно каком порядке
Да почему же неизвестном?
Давайте рассмотрим другой пример.
Есть список из трёх элементов: 90, 80 и 100.
В зависимости от того, как его создавали он может лежать в массивах разными способами, например так:
индексы массивов12345
значения основного массива80x100x90
значения вспомогательного массива3x-1x1
Первый элемент списка лежит в ячейке 5.

Или так:
индексы массивов12345
значения основного массива8090x100x
значения вспомогательного массива41x-1x
Первый элемент списка лежит в ячейке 2.

Обе последовательности задают один и тот же список.
После упорядочивания по возрастанию список должен стать таким: 80, 90 и 100.
При этом мы не должны менять основной массив, нам нужно только задать другую последовательность с помощью вспомогательного.

Для первого варианта:
индексы массивов12345
значения основного массива80x100x90
значения вспомогательного массива5x-1x3
Первый элемент списка лежит в ячейке 1.

Для второго варианта:
индексы массивов12345
значения основного массива8090x100x
значения вспомогательного массива24x-1x
Первый элемент списка лежит в ячейке 1.
0
1 / 1 / 0
Регистрация: 14.11.2018
Сообщений: 651
12.01.2019, 13:52  [ТС] 13
Как реализовать код если это непонятноYgg,
задать другую последовательность с помощью вспомогательного.
Мы задаем эту последовательность случайно или с помощью закономерности(закона,правила)? Потому что я не понимаю каким образом для первого варианта значения вспомогательного массива для 80 равно 3, а потом стала 5
0
2376 / 833 / 317
Регистрация: 10.02.2018
Сообщений: 1,961
12.01.2019, 14:37 14
Лучший ответ Сообщение было отмечено Гуру77777 как решение

Решение

Цитата Сообщение от Гуру77777 Посмотреть сообщение
Мы задаем эту последовательность случайно или с помощью закономерности(закона,правила)?
Конечно закономерно, так что бы список получился отсортирован по возрастанию.

Ещё раз, формирование списка для первого варианта:
индексы элементов12345
значения основного массива80x100x90
значения вспомогательного массива3x-1x1
Дано: первый элемент списка в ячейке 5
Читаем из вспомогательного массива ячейку 5, там лежит значение 1. Это значит, что второй элемент списка находится в ячейке 1.
Читаем из вспомогательного массива ячейку 1, там лежит значение 3. Это значит, что третий элемент списка находится в ячейке 3.
Читаем из вспомогательного массива ячейку 3, там лежит значение -1. Это значит, что список закончился.
Получилось, что список лежит в ячейках 5, 1 и 3.
В данных ячейках уже основного массива лежат числа: 90, 80 и 100.
1
12.01.2019, 14:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2019, 14:37
Помогаю со студенческими работами здесь

Расставить знаки между цифрами так, чтобы получилось заданное число
Помогите разобраться с алгоритмом. Вот задача: Имеются цифры 1, 2, 3, 4, 5, 6, 7, 8, 9....

Заменить в числе одну цифру так, чтобы получилось максимальное число Фибоначчи
дано натуральное число, если возможно заменить одну цифру так чтобы получилось максимальное число...

Заданы цифры - расставить знаки сложения и вычитания так, чтобы получилось выражение с заданным результатом
Имеются цифры 1, 2, 3, 4, 5, 6, 7, 8, 9. Необходимо расставить между ними любое количество знаков...

Между заданными числами расставить знаки сложения и вычитания так, чтобы в итоге получилось указанное число
Простая задачка из школьной олимпиады (задача на асмп №366). У меня превышает лимит времени. Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru