Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

обсуждение двухсвязнного списка порядка LIFO

622
30 декабря 2006 года
nilbog
507 / / 19.12.2006
Цитата: OlgaKr
ничего не получается, просто логика стэка осуществляется при помощи списка.


если я работаю со стеком то сначала делаю техн часть вопроса (про беру:p )
а при решении конкретной задачи уже не думаю как реализован стек а просто им пользуюсь через парочку описаных функций
в общем мы отвлеклись от темы:)
ps про lifo это у меня склероз)))) там last конечно
pps а стек можно и без двухсвязного...
зачем хранить столько никому не нужных ссылок

16K
31 декабря 2006 года
WandM
46 / / 13.11.2006
А зачем нужен вообще двусвязный список?

Как сейчас помню, на 1 курсе нас заставляли стек организовывать с помощью односвязного списка, чтобы сэкономить память.
Код:
struct Store {
  char info;
  Store *next;
}

void set(Store *store, char info) {
  Store tmp = new Store();
  tmp->info = info;
  tmp->next = store;
  store = tmp;
}

char get(Store *store) {
  char info  = store->info;
  Store tmp = store;
  store = store->next;
  delete tmp;
  return info;
}

Предлагаю так.
2.2K
31 декабря 2006 года
MagicPRO
100 / / 02.10.2006
Не знаю, это прихоть препода)))так что тут уже никуда не денешься...За пример спасибо..
63
31 декабря 2006 года
Zorkus
2.6K / / 04.11.2006
Цитата: WandM
А зачем нужен вообще двусвязный список?


Зачем нужно его давать на экзамене, или зачем нужна в программировании эта структура?

622
31 декабря 2006 года
nilbog
507 / / 19.12.2006
Цитата: Zorkus
Зачем нужно его давать на экзамене, или зачем нужна в программировании эта структура?


зачем он нужен для стека я думаю имелось ввиду
вообще говоря для реализации стека он не нужен:)
хватит и однонаправленного

16K
31 декабря 2006 года
WandM
46 / / 13.11.2006
Цитата:
Зачем нужно его давать на экзамене, или зачем нужна в программировании эта структура?


Для решения данной задачи :).

63
01 января 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: WandM
Для решения данной задачи :).


Имхо, хороший препод не ограничивает студента в выборе инструмента. Пусть говорит, что делать, а уж как - это без него разберемся, а вот если не сумеем - тогда и спросим (самый типичный в нашем универе пример - это когда требуют написать диалоговое приложение строго на WinAPI, и ругаются, что работаем медленно:)).
2OlgaKr - а почему не рекомендуешь Шилдта? Мне кажется, вполне приличный базовый курс.

622
01 января 2007 года
nilbog
507 / / 19.12.2006
Цитата: Zorkus
Имхо, хороший препод не ограничивает студента в выборе инструмента.


ну это уже зависит от поставленной задачи

1.9K
03 января 2007 года
[*]Frosty
278 / / 17.06.2006
[QUOTE=Zorkus]А зачем нужен вообще двусвязный список?Зачем нужно его давать на экзамене, или зачем нужна в программировании эта структура? [/QUOTE]
Двусвязные списки нужны для того, чтобы иметь возможность удалять элемент списка не только концов, но и из середины.А сами двусвязные списки используються например для реализации разряженых матриц в виде триплетов.
622
03 января 2007 года
nilbog
507 / / 19.12.2006
[QUOTE='
  • Frosty;164317']Двусвязные списки нужны для того, чтобы иметь возможность удалять элемент списка не только концов, но и из середины.[/QUOTE]
    а кто вам мешает удалять из середины однонаправленного? )
    не нужно говорить что удобнее и тп
    зависит от конкретной задачи
  • 1.9K
    03 января 2007 года
    [*]Frosty
    278 / / 17.06.2006
    [QUOTE=nilbog]а кто вам мешает удалять из середины однонаправленного? )[/QUOTE]
    Однонаправленный список для этого не предназначен просто).
    З.Ы. Насчет невозможно я погарячился конечно, но то, что это неоправдано то точно)
    9
    04 января 2007 года
    Lerkin
    3.0K / / 25.03.2003
    Цитата: nilbog
    а кто вам мешает удалять из середины однонаправленного? )
    не нужно говорить что удобнее и тп
    зависит от конкретной задачи



    Да, это зависит от задачи. От задачи реализации стека. Так как одно из основных свойств списка - это быстрый поиск нужного элемента, то в этом случае удобнее использовать двусвязный списк. Именно удобнее. Удобнее тем, что проходить список можно с любого конца. Это, в отличии от односвязного, у которого обнаруживается линейная зависимость времени поиска от размера T(n) = n, дает определенный выигрыш в скорости.
    Некоторые реализации двусвязных списков, содержат указатель не только на первый и последний элементы, но и на средний, тем самым еще более уменьшая время нахождения нужного элемента. Можно использовать двусвязные кольцевые списки с плавающим окном. Тут уже имеют смысл "статистические данные" обращения к списку.

    1.9K
    04 января 2007 года
    [*]Frosty
    278 / / 17.06.2006
    [QUOTE=Lerkin]Так как одно из основных свойств списка - это быстрый поиск нужного элемента, то в этом случае удобнее использовать двусвязный списк. [/QUOTE]
    Если и нужен быстрый поиск, то уж использовать двусвязные списки я не буду. В любом случае порядок будет n, обусловленный последовательным доступом.
    А мне бы хотелось log(n).

    [QUOTE=Lerkin]Удобнее тем, что проходить список можно с любого конца. Это, в отличии от односвязного, у которого обнаруживается линейная зависимость времени поиска от размера T(n) = n, дает определенный выигрыш в скорости.[/QUOTE]Неа.)
    Вот такой список при поиске по ключу 46, ты наверное на базе анализа концевых элементов решишь искать с головы(45) и те придеться весь список просматреть и никакого выигрыша.
    45 45,1 45,2 45,3 45,4 45,5 46 30
    622
    04 января 2007 года
    nilbog
    507 / / 19.12.2006
    [QUOTE='
  • Frosty;164467']
    А мне бы хотелось log(n).
    [/QUOTE]
    эт врядли получится так просто
    хотябы 1.45log(n)
    и то это то тяжеловато получить
  • 9
    04 января 2007 года
    Lerkin
    3.0K / / 25.03.2003
    Тогда b-tree использовать. Но проигрыш по скорости будет в добавлении элементов.
    1.9K
    04 января 2007 года
    [*]Frosty
    278 / / 17.06.2006
    [QUOTE=nilbog]эт врядли получится так просто
    хотябы 1.45log(n)
    и то это то тяжеловато получить[/QUOTE]
    Бинарный поиск.
    Поиск делением пополам.

    Смысл один в основе бинарное дерево.
    1.9K
    04 января 2007 года
    [*]Frosty
    278 / / 17.06.2006
    2Lerkin не думаю что это так критично
    622
    04 января 2007 года
    nilbog
    507 / / 19.12.2006
    я могу ошибаться и забыть но оценка log(n+1) будет для совершенного дерева ( а его вы не из любого кол-ва вершин построите)
    а если брать авл дерево то там будет около 1.4log(n) сложность
    вставка сложнее но искать быстро :)
    ps а вообще к списку и стеку это все отношения не имеет
    1.9K
    04 января 2007 года
    [*]Frosty
    278 / / 17.06.2006
    Точно. Локанично и правда.
    9
    04 января 2007 года
    Lerkin
    3.0K / / 25.03.2003
    Цитата: nilbog
    ...
    ps а вообще к списку и стеку это все отношения не имеет



    Краткий списочек структур данных. :)

    63
    04 января 2007 года
    Zorkus
    2.6K / / 04.11.2006
    Насчет идеального дерева - для идеализации существует балансировка. Красно-черное дерево, например. Если нужна структрура с минимальным временем поиска - используйте хэш-таблицу.
    Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог