Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что такое сегментированные списки? 
:(
    Опции темы
weiv
Дата 8.3.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



Что-то ничего не могу найти по сегментированным спискам.
Вообще что такое списки и в частности стеки, очереди я понимаю.

Что они из себя представляют?
Как вообще узлы списка расположены в этих сегментах,
как добавляются/удаляются узлы, сегменты?
PM MAIL   Вверх
maxim1000
Дата 8.3.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(weiv @ 8.3.2006, 11:28 Найти цитируемый пост)
Вообще что такое списки и в частности стеки, очереди я понимаю

список - способ реализации контейнера, когда связи представлены явно - каждый элемент имеет указатель на одного или обоих соседей
стеки и очереди - способ упорядочивания доступа к контейнерам, а именно - добавление/удаление
очерелдь: добавление и удаление идет с разных концов
стек - с одинаковых...


--------------------
qqq
PM WWW   Вверх
SoWa
Дата 8.3.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Стек- это когда что-то Положил в конец, и удалил из этого конца по надобности. Или по ненадобности.
А очередь- это очевидно, когда первый элемент выходит, а добавляется последний.
Добавлено @ 19:13
Это немножко полнее, чем сказал maxim1000.
А вообще мне уже пора ссылку на Кормена в подпись вставить smile Книжки рулят!


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
weiv
Дата 8.3.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



Ну это-то я все понимаю. Но вот что такое и как работают именно сегментированные списки?

Просто в книгах ничего про них не написано, а в курсе "Теория вычислительных процессов и структур" вообще присутствует такая тема. Там далее идут хеширование и потом формальные грамматики.
Я про них не спрашиваю. Это просто для ориентира.
PM MAIL   Вверх
REPO
Дата 9.3.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



По-мойму это те списки, которых хранятся по несколько элементов в одном сегменте, например по 10 или 100. Сегменты между собой связаны как эелменты в обычном списке. Такой подход экономит время, когда надо работать с большими списками неопределенной длины. Но многие операции со списком усложнены, например, удаление элементов.
PM MAIL   Вверх
weiv
Дата 12.3.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



У меня есть два класса Heap и List (их писал другой человек).
Я пытаюсь разобраться на их основе что собственно представляют
эти сегментированные списки. Пока что общей картины для чего нужны
все эти структуры и переменные мне не понятно.

Heap - отвечает за все выделение памяти сегментами.
List - сегментированный список должен быть.
List осуществляет обычные функции - добавление элемента,
удаление элемента с начала, удаление с конца.
Память List берет только через функции Heap.
List будет служить как базовый класс, на его основе
потом можно создавать разные списки.

Так вот как я пока понимаю всю работу.
При инициализации List создается объект класса Heap,
который по умолчанию создает один сегмент размером 64 кб

Допустим я буду добавлять элементы следующего вида в список:

struct article
{
char * word;
char * desc;
};

Метод add списка вызывает get_mem из Heap для получения памяти.
Heap выделяет ее из сегмента. Т.е. из тех 64 кб что выделили для начала.

Мне непонятна схема как будут размещаться элементы вот в этом Heap.

Должны ли элементы указывать друг на друга?
И вообще память под строки word и desc тоже берется из того же сегмента
что и под сами элементы?

Далее идут сами файлы.

Код

//-----------------------------------------------------------
// HEAP.H
//
#define SEGMENTSIZE 65539
#define SEGMENTCOUNT 1024

class Heap
{
public:
        Heap(int _segment_size = SEGMENTSIZE);
               { 
                    segment_size  = _segment_size;
                    current       = 0;
               }
        ~Heap()    
               {  delete_segments(); }
        void*      get_mem(int size);
        void       free_mem (void *);
private:
        struct Segment_def
        {       
                bool      used;
                int       size;
                void*     offset;
        };

        struct Segment
        {
                void*     data;
                Segment*  prev;
                Segment_def[SEGMENTCOUNT]  descriptor;
                int                        descriptor_count;
        };

        int       make_segment();
        void      delete_segments();

        int       segment_size;

        segment*  current;
};

//-----------------------------------------------------------
// LIST.H
//
#include "heap.h"

#define LISTSIZE 64

class List
{
public:
    List(int _element_size, int _element_count = LISTSIZE);
    ~List();

    void*      get(int pos);
    void       add(void* data);

    // returns and deletes elements
    void       take_first(void* store);
    void       take_last(void* store);
    void       take(int pos, void* store);

    int        count();
    bool       error(); { return error; } // true if error in last operation
private:
    struct Segment
    {
        void*    data;
        Segment* prev;
        Segment* next;
    };
    Segment*         first;
    Segment*         last;
    int              first_index;
    int              last_index;

    int              element_size;
    int              element_count;
    bool             error;
    
    void new_segment();
    void delete_segment(Segment* seg);
};

//-----------------------------------------------------------


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.