Разработайте стек, который также может деактивировать в O (1) время амортизации?

У меня есть абстрактный тип данных, который можно рассматривать как список, хранящийся слева направо, со следующими возможными операциями: Нажмите: добавьте новый элемент в левый конец списка. Pop: удалите элемент в левом конце списка. Pull: удалить элемент в правом конце списка

Внедрите это, используя три стека и постоянную дополнительную память, так что время амортизации для любой операции push, pop или pull постоянно. Стеки имеют основные операции: isEmpty, Push и Pop.

Амортизированное время означает: "Если я потрачу такое количество времени, я могу потратить еще один его блок и сохранить его в банке времени, который будет использоваться позже". например, для каждой операции push, тратите три блока постоянного времени, поэтому для каждого нажатого элемента у вас есть 2 дополнительных блока постоянного времени.

Ответ 1

Сделаем несколько предположений:

  • Что это домашнее задание
  • Этот параграф является частью задания

Внедрите это, используя три стека и постоянной дополнительной памяти, так что амортизированное время для любых push, pop, или операция потянуть постоянна. стеки имеют основные операции, isEmpty, Push и Pop.

Тогда моим первым советом было бы игнорировать людей, которые говорили с вами о связанных списках. Правда, как любой разумный человек будет реализовывать его без трех требований к стеку, но ключевым фактором в домашнем задании является не то, как разумный человек, а скорее как ваш инструктор хочет, чтобы вы это сделали.

Моим вторым советом было бы получить некоторые блоки, колоду карт или кучу чашек из пенополистирола и обозначить три стека (например, с подстаканниками или что-то еще). Начните играть с тем, что происходит, когда вы передаете содержимое одного стека другому, и это должно дать вам идею.

Ответ 2

Вы можете сделать что-то, что использует только 3 стека. Подумайте башня Ханоя.

Ответ 3

Используйте двусвязный список и сохраняйте указатели на голову и хвост. В остальном вам нужно сначала написать свой собственный код, а затем помочь нам исправить его.

Ответ 4

Начните с реализации очереди в виде двух стеков (довольно стандартная проблема) и обобщите.