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

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

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

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

13.10.2012, 12:55. Просмотров 895. Ответов 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"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2012, 12:55     Двусвязный список из структур
Посмотрите здесь:

Двусвязный список (профан) - C++
Всем снова добрый вечер! Итак суть такова: есть двусвязный список непонятной информации(но это строки точно), смысл в том,что его создают...

двусвязный динамический список - C++
Динамический двусвязный список (операции: добавить элемент после данного, удалить данный элемент …). class List { private: Node*...

Переделать на Двусвязный список - C++
#include <iostream> #include <fstream> #include <string.h> #include <iomanip> #include <stdlib.h> using namespace std; struct...

Двусвязный линейный список - C++
Помогите пожалуйста написать эти программы :( Двусвязный линейный список, Быстрая сортировка ,Пузырьковая с...

исправить двусвязный список? - C++
#include "stdafx.h" #include "conio.h" #include "locale.h" #include "string.h" // для strcmp(); #include <ctype.h> #include...

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

Двусвязный в односвязный список - C++
Добрый день.Помогите,пожалуйста,переделать программу,обрабатывающую двухсвязный список,для обработки односвязного списка. :( Листинг: ...

Двусвязный циклический список - C++
помогите исправить ошибки впрограмме не знаю че делать(компилятор dev-c++) заранее спасибо #include <stdlib.h> #include <stdio.h> ...

Циклический двусвязный список - C++
Помогите написать функцию удаления всех элементов списка с заданным значением. Не могу додуматься как сделать. struct Node { int...

Линейный двусвязный список - C++
Список задан структурой struct *node { char info; node *prev; node *next; }; и была введена некоторая последовательность...

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

Реализовать двусвязный список - C++
Доброго времени суток. Я получил задание в университете реализовать двусвязный список. В общем то с пониманием общей концепции списка /...


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

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

Если в начало, то тебе понадобится указатель на элемент, являющийся началом списка перед добавлением, если в конец - являющийся концом. Его тоже нужно передавать в функцию.
phoenix12297
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 12
13.10.2012, 14:25  [ТС]     Двусвязный список из структур #5
Ну это вроде ясно, но где объявлять указатели на конец и начало? в моем случае head и tail? в typedef struct tag_obj или в самой функции добавления элементов?
John Prick
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 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     Двусвязный список из структур
Ответ Создать тему
Опции темы

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