Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
63 / 63 / 2
Регистрация: 10.03.2014
Сообщений: 73
1

Двусвязные структуры

25.04.2014, 18:28. Показов 427. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобарться:

1)Компилятор выдает ошибку в строке
C++
1
(*first)->pred = tmp;
, но не понимаю, почему...
2)И правильное ли я написал добавление элемента в двусвязный список? Легко ли будет при такой реализации сортировать и т.д.
3)И не могли бы немного пояснить как происходит передача указателей например тут
C++
1
(*first)->pred = tmp;
и в чем отличие от передаче по ссылке и зачем
C++
1
**first
указатель на указатель?


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <cstring>
#include <ctime>
#include <dos.h>
#include <cstdio>
using namespace std;
struct Film{
    char name[20];
    char director[20];
    char mainActor[20];
    char country[3];
    short int yearOut;
    unsigned int budget;
    unsigned int cashDues;
    float rating;
    Film *next, *pred;
};
 
void inputFilm(Film **first)
{
    Film *tmp = new Film;
    cout << "Vvedi nazvanie filma:\n";
    cin >> tmp->name;
    cout << "Vvedi nazvanie rezhissera:\n";
    cin >> tmp->director;
    cout << "Vvedi glavnogo aktera:\n";
    cin >> tmp->mainActor;
    cout << "Vvedi stranu vypuska filma:\n";
    cin >> tmp->country;
    cout << "Vvedi god vypuska:\n";
    cin >> tmp->yearOut;
    cout << "Vvedi bydget:\n";
    cin >> tmp->budget;
    cout << "Vvedi kassovye sbory:\n";
    cin >> tmp->cashDues;
    cout << "Vvedi reyting filma:\n";
    cin >> tmp->rating;
    (*first)->pred = tmp;
    tmp->next = *first;
    tmp->pred = 0;    
    *first = tmp;
}
 
void main()
{
    Film *first = NULL;
    char menuItem;
    do{
        cout<<"Vyberite odin iz punktov menu:\n";
        cout<<"0. Vyhod.\n";
        cout<<"\nRabota so spiskom:\n";
        cout<<"1. Dobavit' nivyy element v spisok.\n";
        cout<<"2. Prosmotr vsego spiska.\n";
        cout<<"3. Udalenie elementa iz spiska po parametry.\n";
        cout<<"4. Udalenie spiska.\n";
        cout<<"5. Vygruzit' spisok v fail.\n";
        cout<<"\nStatistika:\n";
        cout<<"6. Sredniy budget vseh filmov.\n";
        cout<<"7. Samyy neudachnyy film po versii BVT-11.\n";
        cout<<"8. Film s naibol'shim i naimen'shim reytimgom.\n";
        cout<<"9. Film s naibol'shim i naimen'shim bydzhetom.\n";
        cout<<"10. Film s naibol'shim i naimen'shim kassovym sborom.\n";
        cout<<'>';
        cin>>menuItem;  
        switch (menuItem)
        {
        case '1' :
            system("cls");
            inputFilm(&first);
            break;
 
        }
        system("cls");
    }
    while (menuItem != '0');
}
Добавлено через 34 минуты
В чем главная ошибка при передаче указателя на первый элемент?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2014, 18:28
Ответы с готовыми решениями:

Динамические структуры: односвязные и двусвязные списки
всем привет, мне нужно 2 задачи решить на эту тему,а информации нигде найти не могу, подкиньте...

Вычислить выражения используя односвязные (стек) и двусвязные (очередь) информационные структуры
Помогите пожалуйста. Даны x,y,z. Вычислить a,b, если: a=\frac{3+e^{y-1}}{1+x^2|y -tgz|},...

Двусвязные списки
Добрый день) имеется задание: Необходимо реализовать список сотрудников, работающих на...

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

3
2664 / 2239 / 240
Регистрация: 03.07.2012
Сообщений: 8,141
Записей в блоге: 1
25.04.2014, 18:41 2
Цитата Сообщение от auditseo Посмотреть сообщение
(*first)->pred = tmp;
Так не правильно.
Надо либо (*first).pred=tmp либо эквивалентное: first->pred=tmp;

Также неверно tmp->next = *first;
слева указатель на объект, справа сам объект.

Как-то ТС щедро расставляет звездочки...
1
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 3
25.04.2014, 18:41 3
Я тоже не понимаю зачем вы сделали указатель на указатель. Достаточно и простого обычного указателя.

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <cstring>
#include <ctime>
#include <dos.h>
#include <cstdio>
using namespace std;
 
struct Film{
    char name[20];
    char director[20];
    char mainActor[20];
    char country[3];
    short int yearOut;
    unsigned int budget;
    unsigned int cashDues;
    float rating;
    Film *next, *pred;
};
 
void inputFilm(Film *first)
{
    Film *tmp = new Film;
    cout << "Vvedi nazvanie filma:\n";
    cin >> tmp->name;
    cout << "Vvedi nazvanie rezhissera:\n";
    cin >> tmp->director;
    cout << "Vvedi glavnogo aktera:\n";
    cin >> tmp->mainActor;
    cout << "Vvedi stranu vypuska filma:\n";
    cin >> tmp->country;
    cout << "Vvedi god vypuska:\n";
    cin >> tmp->yearOut;
    cout << "Vvedi bydget:\n";
    cin >> tmp->budget;
    cout << "Vvedi kassovye sbory:\n";
    cin >> tmp->cashDues;
    cout << "Vvedi reyting filma:\n";
    cin >> tmp->rating;
 
    if (first == NULL)
    {
        first = tmp;
    }
    else
    {
        Film *t = first;
        while (t->next != NULL)
        {
             t = t->next;
        }
        t->next = tmp;
        tmp->pred = t;
    }
}
 
void main()
{
    Film *first = NULL;
    char menuItem;
    do{
        cout<<"Vyberite odin iz punktov menu:\n";
        cout<<"0. Vyhod.\n";
        cout<<"\nRabota so spiskom:\n";
        cout<<"1. Dobavit' nivyy element v spisok.\n";
        cout<<"2. Prosmotr vsego spiska.\n";
        cout<<"3. Udalenie elementa iz spiska po parametry.\n";
        cout<<"4. Udalenie spiska.\n";
        cout<<"5. Vygruzit' spisok v fail.\n";
        cout<<"\nStatistika:\n";
        cout<<"6. Sredniy budget vseh filmov.\n";
        cout<<"7. Samyy neudachnyy film po versii BVT-11.\n";
        cout<<"8. Film s naibol'shim i naimen'shim reytimgom.\n";
        cout<<"9. Film s naibol'shim i naimen'shim bydzhetom.\n";
        cout<<"10. Film s naibol'shim i naimen'shim kassovym sborom.\n";
        cout<<'>';
        cin>>menuItem;  
        switch (menuItem)
        {
        case '1' :
            system("cls");
            inputFilm(first);
            break;
 
        }
        system("cls");
    }
    while (menuItem != '0');
}
0
63 / 63 / 2
Регистрация: 10.03.2014
Сообщений: 73
25.04.2014, 19:07  [ТС] 4
Цитата Сообщение от zer0mail Посмотреть сообщение
Так не правильно.
Надо либо (*first).pred=tmp либо эквивалентное: first->pred=tmp;
Также неверно tmp->next = *first;
слева указатель на объект, справа сам объект.
Как-то ТС щедро расставляет звездочки...
Согласен, но немного переделав, программа нормально работает, привожу код:

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <cstring>
#include <ctime>
#include <dos.h>
#include <cstdio>
using namespace std;
struct Film{
    char name[20];
    char director[20];
    char mainActor[20];
    char country[20];
    short int yearOut;
    unsigned int budget;
    unsigned int cashDues;
    float rating;
    Film *next, *pred;
} *first = NULL;
 
void inputFilm(Film **first)
{
    Film *tmp = new Film;
    cout << "Vvedi nazvanie filma:\n";
    cin >> tmp->name;
    cout << "Vvedi nazvanie rezhissera:\n";
    cin >> tmp->director;
    cout << "Vvedi glavnogo aktera:\n";
    cin >> tmp->mainActor;
    cout << "Vvedi stranu vypuska filma:\n";
    cin >> tmp->country;
    cout << "Vvedi god vypuska:\n";
    cin >> tmp->yearOut;
    cout << "Vvedi bydget:\n";
    cin >> tmp->budget;
    cout << "Vvedi kassovye sbory:\n";
    cin >> tmp->cashDues;
    cout << "Vvedi reyting filma:\n";
    cin >> tmp->rating;
    if(*first == NULL){
        tmp->next = 0; //По данному нулю отслеживается конец списка
        tmp->pred = 0;
        *first = tmp;
    }
    (*first)->pred = tmp;
    tmp->next = *first;
    tmp->pred = 0;    
    *first = tmp;
}
 
void main()
{
    char menuItem;
    do{
        cout<<"Vyberite odin iz punktov menu:\n";
        cout<<"0. Vyhod.\n";
        cout<<"\nRabota so spiskom:\n";
        cout<<"1. Dobavit' nivyy element v spisok.\n";
        cout<<"2. Prosmotr vsego spiska.\n";
        cout<<"3. Udalenie elementa iz spiska po parametry.\n";
        cout<<"4. Udalenie spiska.\n";
        cout<<"5. Vygruzit' spisok v fail.\n";
        cout<<"\nStatistika:\n";
        cout<<"6. Sredniy budget vseh filmov.\n";
        cout<<"7. Samyy neudachnyy film po versii BVT-11.\n";
        cout<<"8. Film s naibol'shim i naimen'shim reytimgom.\n";
        cout<<"9. Film s naibol'shim i naimen'shim bydzhetom.\n";
        cout<<"10. Film s naibol'shim i naimen'shim kassovym sborom.\n";
        cout<<'>';
        cin>>menuItem;  
        switch (menuItem)
        {
        case '1' :
            system("cls");
            inputFilm(&first);
            break;
 
        case '2' :
            system("cls");
            display(first);
            break;
 
            break;
        }
        system("cls");
    }
    while (menuItem != '0');
}
0
25.04.2014, 19:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2014, 19:07
Помогаю со студенческими работами здесь

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

Двусвязные списки
Сформировать двусвязный список и выполнить: Структура содержит фамилию и 4 оценки. Удалить из...

Помещение структуры в вектор, удаление структуры, изменение элементов структуры
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный...

Шаблонные двусвязные списки.
Два велосипеда из закрома ов родина. Не пропадать же добру. А поделюсь -- так может какой студиозус...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru