Форум программистов, компьютерный форум CyberForum.ru

Двусвязный список из структур - C++

Восстановить пароль Регистрация
 
phoenix12297
 Аватар для phoenix12297
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 12
13.10.2012, 12:55     Двусвязный список из структур #1
Ребят, помогите, а то не могу пример откопилировать...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    typedef  struct tag_lib {                   //задается таблица с данными в виде структуры   
        char  name[100];                        //имя сотрудника
        int  years_old;                         //возраст сотрудника
 
    } LIB;
 
    typedef  struct tag_obj {                   //структура с адресами следующих и предыдущих эл.
        LIB lib; 
        LIB *prev, *next; 
 
    } OBJ; 
 
 
OBJ* add_obj(char *name, int years_old) 
{ 
    OBJ* current = (OBJ*)malloc(sizeof(OBJ)); 
    LIB* head = NULL; 
    LIB* tail = NULL; 
    strcpy_s(current->lib.name, name);
    current ->lib.years_old = years_old;  
    current -> prev = tail;  
    current -> next = NULL; 
    if (tail != NULL)  
        tail -> next = current; 
    if (head == NULL) head = current; 
    tail = current;  
    return current;  
}
Пока остановился на:
.cpp(25): error C2039: next: не является членом "tag_lib"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.10.2012, 13:34     Двусвязный список из структур #2
C++
1
2
3
4
5
6
7
8
    OBJ* current = (OBJ*)malloc(sizeof(OBJ)); 
 //...
    LIB* tail = NULL; 
//...
    if (tail != NULL)  
        tail -> next = current; 
// ...
    tail = current;
1) tail - указатель на LIB, у стурктуры LIB нет поля next.
2) current - указатель на OBJ. Нельзя указателю на LIB присвоить указатель на OBJ.
Что-то не так у тебя либо в примере, либо в том, как ты его переписал.
phoenix12297
 Аватар для phoenix12297
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 12
13.10.2012, 13:43  [ТС]     Двусвязный список из структур #3
В моей методе с примерами все не так))) Я всякое разное делал это максимально похожее на нормальный код что я смог сделать.

Я наверное начал понимать...
C++
1
2
3
4
5
6
OBJ* add_obj(char *name, int years_old) 
{ 
    OBJ* current = (OBJ*)malloc(sizeof(OBJ)); 
    LIB* head = NULL; 
    LIB* tail = NULL; 
    strcpy_s(current->lib.name, name);
Я впихнул "голову" и "хвост" в эту функцию. Наверное им там не место, но куда тогда их деть?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.10.2012, 14:04     Двусвязный список из структур #4
Во-первых, вот эта штука:
C++
1
OBJ* current = (OBJ*)malloc(sizeof(OBJ));
Не создаёт объектв OBJ, который тебе нужен.
Используй
C++
1
OBJ* current = new OBJ;
Далее, добавляя объект в список, нужно скорректировать указатели на следующий и предыдущий. Куда ты добавляешь элемент: в начало или в конец списка?

Если в начало, то тебе понадобится указатель на элемент, являющийся началом списка перед добавлением, если в конец - являющийся концом. Его тоже нужно передавать в функцию.
phoenix12297
 Аватар для phoenix12297
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 12
13.10.2012, 14:25  [ТС]     Двусвязный список из структур #5
Ну это вроде ясно, но где объявлять указатели на конец и начало? в моем случае head и tail? в typedef struct tag_obj или в самой функции добавления элементов?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.10.2012, 16:14     Двусвязный список из структур #6
Цитата Сообщение от phoenix12297 Посмотреть сообщение
где объявлять указатели на конец и начало? в моем случае head и tail? в typedef struct tag_obj или в самой функции добавления элементов?
в твоём случае передаёшь их в функцию:
C++
1
2
3
4
5
6
7
void add_to_begin(/*тут нужные параметры*/, OBJ * tail)
{
    OBJ * newTail = new OBJ;
    /* тут заполни структуру данными */
    newTail->next = tail;
    tail->prev = newTail;
}
Как-то так. Можно также добавить проверку, что в функцию передали именно "голову" списка: у головы указатель prev должен быть NULL.
Yandex
Объявления
13.10.2012, 16:14     Двусвязный список из структур
Ответ Создать тему
Опции темы

Текущее время: 00:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru