С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
phoenix12297
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 12
#1

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

13.10.2012, 12:55. Просмотров 929. Ответов 5
Метки нет (Все метки)

Ребят, помогите, а то не могу пример откопилировать...
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"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2012, 12:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двусвязный список из структур (C++):

Переделать двусвязный список в двусвязный кольцевой - C++
Здравствуйте, у меня єсть двусвязный список однако он не кольцевой! как это запрограммировать? и второй вопрос как обеспечить вставку...

Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список - C++
спасайте Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список. Информация о работнике...

Двусвязный список (в конец двусвязного списка добавить другой список) - C++
здравствуйте, подскажите пожалуйста, как в конец двусвязного списка добавить другой список?

Составить двусвязный список на основе класса, объекты которого будут формировать этот список - C++
Составить двусвязный список на основе класса, объекты которого будут формировать этот список. В описание класса должны входить данные для...

Создать двусвязный список групп факультета, где каждая группа представляет собой односвязный список студентов - C++
Задание: создайте двусвязный список групп факультета. Каждая группа представляет собой односвязный список студентов. Помогите пожалуйста,...

Двусвязный список - C++
Вот решил написать двусвязный список. Написаны только две функции решил попробовать работает или нет, оказалось, что нет. Компилятор...

5
John Prick
824 / 757 / 152
Регистрация: 27.07.2012
Сообщений: 2,156
Завершенные тесты: 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.
Что-то не так у тебя либо в примере, либо в том, как ты его переписал.
0
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);
Я впихнул "голову" и "хвост" в эту функцию. Наверное им там не место, но куда тогда их деть?
0
John Prick
824 / 757 / 152
Регистрация: 27.07.2012
Сообщений: 2,156
Завершенные тесты: 3
13.10.2012, 14:04 #4
Во-первых, вот эта штука:
C++
1
OBJ* current = (OBJ*)malloc(sizeof(OBJ));
Не создаёт объектв OBJ, который тебе нужен.
Используй
C++
1
OBJ* current = new OBJ;
Далее, добавляя объект в список, нужно скорректировать указатели на следующий и предыдущий. Куда ты добавляешь элемент: в начало или в конец списка?

Если в начало, то тебе понадобится указатель на элемент, являющийся началом списка перед добавлением, если в конец - являющийся концом. Его тоже нужно передавать в функцию.
0
phoenix12297
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 12
13.10.2012, 14:25  [ТС] #5
Ну это вроде ясно, но где объявлять указатели на конец и начало? в моем случае head и tail? в typedef struct tag_obj или в самой функции добавления элементов?
0
John Prick
824 / 757 / 152
Регистрация: 27.07.2012
Сообщений: 2,156
Завершенные тесты: 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.
0
13.10.2012, 16:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2012, 16:14
Привет! Вот еще темы с ответами:

Двусвязный список - C++
Подскажите в чем ошибка, почему не выводит элементы списка в обратном порядке (выводит только один элемент) #include <fstream> ...

Двусвязный список - C++
Привет, народ. Помогите плиз найти ошибку. #include "iostream" #include "cmath" using namespace std; struct elem { int...

Двусвязный список - C++
Здравствуйте, никак не могу разобраться с двусвязным списком, нашел код для разбора в интернете, но не могу понять, что необходимо писать...

Иерархия классов "Структура - Список - Кольцевой Двусвязный список" - C++
Неделю назад получил задание и срок выполнения до конца мая. Разработка иерархии классов. Структура - Список - Кольцевой Двусвязный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.