![]() |
|
|
![]()
|
|
| V0lk0d@V |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 21.10.2004 Репутация: нет Всего: нет |
Не могу решить одну задачу. Надо с помощью двух Queues создать Stack. Тоесть использовать две Queues так чтоб как будто получалось что используется Stack.
|
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Пример:
Qa - первая очередь Qb - вторая очередь При записи в очередь данные добавляются в конце (справа) При чтении из очереди данные изымаются с начала (слева) Помещение в стек, с примером: 0) было так: Qa: [] Qb: [123456] 1) D >> Qa - входные данные (D) пишешь в Qa Qa: [D] Qb: [123456] 2) Qb >> Qa - перегоняешь все данные из Qb в Qa Qa: [D123456] Qb: [] 3) Qb >> Qa - перегоняешь все данные из Qa в Qb Qa: [] Qb: [D123456] Извлечение из стека: просто берётся число из Qb PS: В принципе, п.3 можно убрать, если сделать так, чтобы назначение очередей менялось при каждом помещении в стек, т.е. будет так: 1) D >> Qb 2) Qa >> Qb При последующем добавлении в стек: 1) D >> Qa 2) Qb >> Qa Соответсвенно, при извлечении из стека, читается то из Qa, то из Qb... -------------------- С уважением, г-н Посол. |
|||
|
||||
| V0lk0d@V |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 21.10.2004 Репутация: нет Всего: нет |
p0s0l
Толи я тебя не понял толи Stack так и не получился. Ведь в пункте 3 очередность такая же как при вводе а у Stack первые выходят те которые вводятся последними. Я тут подумал сам и единственное что пришло в голову это: 0) Qa: [12345] Qb: [] 1) Qa: [23451] Qb: [] Тоесть из Qa в Qa и перекладываешь пока не дойдешь до Qa: [51234] Qb: [] потом Qa: [1234] Qb: [5] и так делать до тех пор пока все из Qa не перейдет в Qb. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Хм... или я не правильно понимаю, что такое "очередь" и "стек", или всё-таки я был прав... Еще раз: При извлечении из очереди данные извлекаются СЛЕВА При добавлении в очередь данные добавляются СПРАВА Но теперь заметь, что данные в п.3 (и в п.2 тоже кстати) добавились в итоге СЛЕВА - это уже стек... Твой способ тоже правильный, только прокруток много будет... -------------------- С уважением, г-н Посол. |
|||
|
||||
| V0lk0d@V |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 21.10.2004 Репутация: нет Всего: нет |
p0s0l
Наконец то я понял твой алгоритм. Действительно Stack получился |
|||
|
||||
| V0lk0d@V |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 21.10.2004 Репутация: нет Всего: нет |
Можно ли как нибудь посчитать сколько займет время метод push() и pop() для n количества чисел?
|
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
L = сколько чисел уже записано в стек.
Тогда Push одного числа будет занимать 2*(L+1) операций, либо (L+1) операций в способе с меняющимися очередями... Pop одного числа всегда равен = 1 операции Соответсвенно, если хочешь посчитать время для записи N чисел в пустой стек, то это будет: 2*(1 + 2 + 3 + ... + N) = 2*((1+N)*N/2) = (1+N)*N Если стек не пустой, то (содержит L чисел): 2*(1 + 2 + 3 + ... + N + L*N) = (1+N + L)*N Время N Pop'ов = N -------------------- С уважением, г-н Посол. |
|||
|
||||
| V0lk0d@V |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 21.10.2004 Репутация: нет Всего: нет |
p0s0l
Спасибо |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
p0s0l
или наоборот - можно организовать переброску в другую очередь при извлечении... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |