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

Ваш аккаунт

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

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

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

Реализовать структуру данных список на основе массива.Язык C.

42K
24 января 2009 года
P.S.
8 / / 09.12.2008
Реализовать структуру данных список на основе массива. В случае если длинна массива недостаточна, следует динамически увеличивать длину массива.

в ФАКе нашёл через классы, мне нужно без них.
9
24 января 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: P.S.
Реализовать структуру данных список на основе массива. В случае если длинна массива недостаточна, следует динамически увеличивать длину массива.

в ФАКе нашёл через классы, мне нужно без них.


Сколько связок в списке?

42K
24 января 2009 года
P.S.
8 / / 09.12.2008
Цитата: Lerkin
Сколько связок в списке?



в условии чётко не написано. Думаю можно односвязный.

9
24 января 2009 года
Lerkin
3.0K / / 25.03.2003
Односвязный список:
Код:
#include <stdio.h>
#include <stdlib.h>

typedef struct _node
{
    int data, index;
    struct _node* next;
} node_t, *pnode;

typedef struct _list
{
    int size;
    pnode begin, end;
} list_t, *plist;

// Поместить элемент в конец списка
int push_data( plist _lst, int _data )
{
    pnode new_node = (pnode)malloc( sizeof(node_t) );

    new_node->next = NULL;
    new_node->data = _data;
    new_node->index = _lst->size++;

    if (NULL == _lst->begin)
    _lst->begin = _lst->end = new_node;
    else
    {
    _lst->end->next = new_node;
    _lst->end = new_node;
    }

    return _lst->size;
}

// Извлечь элемент с конца списка (с удалением)
int pop_data( plist _lst )
{
    int result;
    pnode ptr;

    if (!_lst->size)
    return -1;

    ptr = _lst->begin;
    result = _lst->end->data;

    if (ptr == _lst->end)
    {
    free( ptr );
    _lst->begin = _lst->end = NULL;
    }
    else
    {
    while (ptr->next != _lst->end)
        ptr = ptr->next;

    ptr->next = NULL;
    free( _lst->end );
    _lst->end = ptr;
    }

    _lst->size--;

    return result;
}

// Получить значение элемент списка по индексу
int get_data( plist _lst, int _index )
{
    int i;
    pnode ptr;

    if (_index >= _lst->size)
    return -1;

    i = _index;
    ptr = _lst->begin;

    while (i--)
    ptr = ptr->next;

    return ptr->data;
}

// Установить значение элемента по индексу
int set_data( plist _lst, int _index, int _data )
{
    int i;
    pnode ptr;

    if (_index >= _lst->size)
    return -1;

    i = _index;
    ptr = _lst->begin;

    while (i--)
    ptr = ptr->next;

    return (ptr->data = _data);
}

// Инициализация списка
void init( plist _lst )
{
    _lst->size = 0;
    _lst->begin = _lst->end = NULL;
}

int main()
{
    int i;
    plist lst;

    lst = (plist)malloc( sizeof(list_t) );
    init( lst );

    push_data( lst, 1 );
    push_data( lst, 2 );
    push_data( lst, 3 );
    push_data( lst, 4 );
    push_data( lst, 5 );

    for (i = 0; i < lst->size; i++)
    printf( "%d\n", get_data( lst, i ) );

    while (lst->size)
    printf( "%d\n", pop_data( lst ) );

    free( lst );

    return 0;
}

Не проверял. Но ошибок, вроде, быть не должно.
42K
24 января 2009 года
P.S.
8 / / 09.12.2008
Lerkin,большое спасибо.
Хотелось бы ещё процедуры удаления все встречи элемента в списке,
удаления элемента с указанным индексом и изменения порядка элементов на обратный
9
24 января 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: P.S.
Lerkin,большое спасибо.
Хотелось бы ещё процедуры удаления все встречи элемента в списке,
удаления элемента с указанным индексом и изменения порядка элементов на обратный


Первое и второе - для самостоятельной работы. По поводу третьей: такие вещи в двусвязном списке легко делать, всего два указателя [FONT="Courier New"][SIZE="2"]begin [/SIZE][/FONT]и [FONT="Courier New"][SIZE="2"]next [/SIZE][/FONT]надо было бы обменять. Да и в данном списке - все не так сложно.
Короче, 20 WMZ в Фонд Викимедии, и все решения у тебя на кармане. ;)

42K
24 января 2009 года
P.S.
8 / / 09.12.2008
Цитата: Lerkin
Первое и второе - для самостоятельной работы.



окей) разберёмся с этим. Ещё раз спасибо.
[COLOR="White"]Жаль решение не пригодилось, экзамен так сдал)[/COLOR]

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог