Уважаемые эксперты! Помогите разработать программу! К стеку, содержащему возрастающую последовательность чисел, нужно добавить элементы так, чтобы порядок возрастания сохранялся. В приложении организация, добавление и просмотр стека, условием окончания ввода которого является число 999. Заранее спасибо.
Доброе время суток, Romashka! 1) о терминологии: это не стек. Стек не предполагает никакой сортировки по определению. В нем реализуется принцип LIFO: "последним занесено - первым извлечено" 2) нужно все вносимые числа сортировать (у Вас можно вводить начальную последовательность в любом порядке) 3) Вот мой вариант решения задачи:
Приложение: Ответ отправлен: 25.05.2004, 18:24 Отправитель: Boriss Отвечает Snowm@n
Приветствую Вас, Romashka! При добавлении очередного элемента вытаскиваешь из стека все элементы большие него, засоваваешь элемент, засовываешь все вытащенные, в порядке, обратном вытаскиванию (всвязи с идеологией стека). По-моему особой проблемы тут нет. Ответ отправлен: 26.05.2004, 09:52 Отправитель: Snowm@n Отвечает sir henry
Здравствуйте, Romashka! Есть простой способ для организации сортированых данных, построеный на основе динамических списков - TCollection. Позволяет удалять, добавлять элементы и при этом сортировать по желанию. Пример есть в каталоге примеров BP7. Ответ отправлен: 25.05.2004, 11:02 Отправитель: sir henry Отвечает Student
Здравствуйте, Romashka! Можно осортировать данные после ввода, например методом Шелла... Но если я правильно понял Ваш вопрос, то в приложении то, что Вам нужно. Удачи. С ув. Student.
Приложение: Ответ отправлен: 25.05.2004, 23:57 Отправитель: Student Отвечает Ayl
Добрый день, Romashka! Ну могу предложить такой алгоритм. Пусть есть исходный стек, в котором элементы расположены по возрастанию. И пусть есть новый элемент, который надо добавить в этот стек в нужное место, чтобы порядок сохранился. Поступаешь так. Заводишь второй стек. Вначале он пустой. Проверяешь верхний элемент исходного стека. Если он меньше, чем новый, то ничего делать не нужно, просто добавляешь новый элемент в стек. Если же он больше, то извлекаешь его из стека и заносишь во второй стек. Снова проверяешь верхний элемент стека и поступаешь аналогично. Цикл "проверка верхнего элемента -> перемещение его во второй стек" продолжается до тех пор, пока либо очередной элемент не станет меньше нового, либо пока стек не станет пустым. Как только место для нового элемента нашлось, добавляешь его в стек и переписываешь все элементы из второго
стека в исходный. Все. В приложении - каркас реализации. Кстати, это задание такое - делать через стек? Потому что это не оптимальная структура для решения такой задачи. Лучше всего работать со связанным списком, в котором допустимо обращение к любому элементу (в стеке - только к верхнему). Со списком просто ищешь позицию, куда надо вставить элемент, и изменяешь несколько указателей, что бы добавить элемент в список.
Приложение: Ответ отправлен: 25.05.2004, 13:38 Отправитель: Ayl
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.