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

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

Войти
Регистрация
Восстановить пароль
 
auditseo
55 / 55 / 0
Регистрация: 10.03.2014
Сообщений: 73
#1

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

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

Помогите разобарться:

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 минуты
В чем главная ошибка при передаче указателя на первый элемент?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2014, 18:28     Двусвязные структуры
Посмотрите здесь:

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

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

ДВУСВЯЗНЫЕ СПИСКИ - C++
Написал программу,а она не запускается. И ошибок не выдает. Подскажите пожайлуста что не так сделал. Разработать программу для...

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

ДВУСВЯЗНЫЕ СПИСКИ!!! - C++
Доброго времени суток... покажите пожалуйста примеры на организацию двусвязных списков, их удаление, редактирование, поиск нужного...

Двусвязные списки - C++
Сформировать двусвязный список и выполнить: Структура содержит фамилию и 4 оценки. Удалить из списка неуспевающих. Наррооод!!! Спасите,...

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

Указатели и двусвязные списки - C++
Уважаемые форумчане! Учусь по книжке Страструпа для начинающих. Вот пример кода: #include &lt;iostream&gt; #include &quot;1.h&quot; using...

Линейные двусвязные списки - C++
Проверьте пожалуйста. 1.Дан список. Найти указатель на его последний элемент. template&lt;typename T&gt; node&lt;T&gt; * FindLastElem(node&lt;T&gt;...

Односвязные и двусвязные списки - C++
Добрый день. Возникала проблема со списками. Нужно сделать программу 1)которая считывала бы слова из файла, записывали их в...

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

Очереди и Двусвязные списки! - C++
1) Создать очередь и заполнить её случайными целыми числами из диапазона 1-100. Найти и вывести на печать: Все простые числа, количество...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zer0mail
2323 / 1949 / 192
Регистрация: 03.07.2012
Сообщений: 6,996
Записей в блоге: 1
25.04.2014, 18:41     Двусвязные структуры #2
Цитата Сообщение от auditseo Посмотреть сообщение
(*first)->pred = tmp;
Так не правильно.
Надо либо (*first).pred=tmp либо эквивалентное: first->pred=tmp;

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

Как-то ТС щедро расставляет звездочки...
d_shablov
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');
}
auditseo
55 / 55 / 0
Регистрация: 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');
}
Yandex
Объявления
25.04.2014, 19:07     Двусвязные структуры
Ответ Создать тему
Опции темы

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