0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
1

Вместо массива использовать двусвязный список

24.03.2019, 19:31. Показов 2101. Ответов 14
Метки нет (Все метки)

Реализовать вторую версию программы, вместо массива использовать двусвязный список;

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
#include "pch.h"
#include <iostream>
#include <string>
 
using namespace std;
 
struct AEROFLOT
{
    char punkt_naznachenia[20];
    int nomer_reisa;
    char tip_samoleta[10];
};
 
int main(void) {
    AEROFLOT as[7];
    int i, j, kol = 7;
 
    for (i = 0; i < kol; i++) {
        cout << i + 1 << "-ya zapis " << endl;
        cout << "/////////////////////" << endl;
        cout << "Vvedite nazvanie punkta naznachenia reisa: ";
        cin >> as[i].punkt_naznachenia;
        cout << "Vvedite nomer reisa: ";
        cin >> as[i].nomer_reisa;
        cout << "Vvedite tip samoleta: ";
        cin >> as[i].tip_samoleta;
        cout << "/////////////////////" << endl;
    }
 
    cout << endl;
    cout << "Vivod zapisey: " << endl;
    cout << " " << endl;
 
    for (i = 0; i < kol; i++) {
        cout << "Punkt naznachenia: " << as[i].punkt_naznachenia << " ";
        cout << "Nomer reisa: " << as[i].nomer_reisa << " ";
        cout << "Tip samoleta: " << as[i].tip_samoleta << " " << endl;
    }
 
    char poisk_reisa[20];
    cout << "Punkt naznachenia reisa: " << endl;
    cin >> poisk_reisa;
    bool f = false;
    for (i = 0; i < kol; i++)
        if (strcmp(as[i].punkt_naznachenia, poisk_reisa) == 0)
        {
            cout << "Nomer reisa: ";
            cout << as[i].nomer_reisa << endl;
            cout << "Tip samoleta: ";
            cout << as[i].tip_samoleta << endl;
            f = true;
        }
    if (!f) {
        cout << "Net takogo punkta naznachenia reisa. " << endl;
    }
 
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2019, 19:31
Ответы с готовыми решениями:

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

Допустимо ли вместо индекса массива использовать i-ый элемент другого массива?
Другими словами, допустимо ли использовать структуру такого типа: int Amas,mas1,mas2; ......

Использовать new вместо обьявления массива из трех структур
//хелп, использовать new вместо обьявления массива из трех структур, намекните куда мне думать......

Изменить способ выделения памяти для массива (вместо new использовать malloc)
#include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; struct str_Team{ char Komanda; int Ochki; int...

14
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
24.03.2019, 19:49 2
Да пожалуйста:
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
#include "pch.h"
#include <iostream>
#include <string>
#include <list>
 
using namespace std;
 
struct AEROFLOT
{
    char punkt_naznachenia[20];
    int nomer_reisa;
    char tip_samoleta[10];
};
 
int main(void) {
    list<AEROFLOT> as;
    int i, j, kol = 7;
 
    for (i = 0; i < kol; i++) {
        AEROFLOT temp;
        cout << i + 1 << "-ya zapis " << endl;
        cout << "/////////////////////" << endl;
        cout << "Vvedite nazvanie punkta naznachenia reisa: ";
        cin >> temp.punkt_naznachenia;
        cout << "Vvedite nomer reisa: ";
        cin >> temp.nomer_reisa;
        cout << "Vvedite tip samoleta: ";
        cin >> temp.tip_samoleta;
        cout << "/////////////////////" << endl;
        as.push_back(temp);
    }
 
    cout << endl;
    cout << "Vivod zapisey: " << endl;
    cout << " " << endl;
 
    for (auto i = as.begin(); i != as.end(); i++) {
        cout << "Punkt naznachenia: " << i->punkt_naznachenia << " ";
        cout << "Nomer reisa: " << i->nomer_reisa << " ";
        cout << "Tip samoleta: " << i->tip_samoleta << " " << endl;
    }
 
    char poisk_reisa[20];
    cout << "Punkt naznachenia reisa: " << endl;
    cin >> poisk_reisa;
    bool f = false;
    for (auto i = as.begin(); i != as.end(); i++)
        if (strcmp(i->punkt_naznachenia, poisk_reisa) == 0)
        {
            cout << "Nomer reisa: ";
            cout << i->nomer_reisa << endl;
            cout << "Tip samoleta: ";
            cout << i->tip_samoleta << endl;
            f = true;
        }
    if (!f) {
        cout << "Net takogo punkta naznachenia reisa. " << endl;
    }
 
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
24.03.2019, 19:57  [ТС] 3
Вот дела, думал надо будет программу переделывать, благодарю
0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
24.03.2019, 23:50 4
Цитата Сообщение от ghostgames18 Посмотреть сообщение
благодарю
Незачто) Успехов в изучении программирования!
1
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
26.03.2019, 09:10  [ТС] 5
Так, препод сказал сделать без использования include <list>, тему возобновляю, @Krokodil9798 если сможешь, помоги
0
446 / 332 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
26.03.2019, 12:08 6
ghostgames18, на форуме множество тем с реализациями двухсвязного списка; на них и нужно заменить list
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
26.03.2019, 16:27  [ТС] 7
ReDoX, это да, видел, много вариаций, но не до конца понял, как именно заменить массив на него, придется структуру переделывать? Помогите пожалуйста в виде кода, а то с #include <list> понял, а без него как-то не доходит, а препод просит
0
446 / 332 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
26.03.2019, 20:01 8
ghostgames18, ну в коде товарища крокодила есть метод push_back. Нужно сделать такой же метод с той же семантикой (добавление элемента в хвост). Структура будет выглядеть следующим образом:

C++
1
2
3
4
5
struct List {
  int inf;
  List* prev;
  List* next;
};
В main нужно будет создать указатели на голову и, если хотите, хвост (для удобства в ориентировании). Все остальное - использование этих указателей.

Короче говоря, нужно просто создать семантически одинаковые методы
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
27.03.2019, 09:33  [ТС] 9
буду пробовать, но если кто-то захочет помочь в работающем коде - не откажусь, до след. вторника время есть
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
30.03.2019, 18:15  [ТС] 10
вообщем почитал книжки, посмотрел реализации на форуме, пытался подогнать под мой код с массивами, но ничего не выходит, слишком замудренно, если кто может мой код выше преобразовать в двусвязный список без использования #include <list>, помогите пожалуйста, буду вечно благодарен.
0
446 / 332 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
30.03.2019, 19:19 11
Цитата Сообщение от ghostgames18 Посмотреть сообщение
слишком замудренно
бред

Посмотрел код крокодила: единственную функцию, которую нужно реализовать, - push_back. Остальное - пробег по списку

Быстрое гугление дает следующий код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void pushBack(DblLinkedList *list, void *value) {
    Node *tmp = (Node*) malloc(sizeof(Node));
    if (tmp == NULL) {
        exit(3);
    }
    tmp->value = value;
    tmp->next = NULL;
    tmp->prev = list->tail;
    if (list->tail) {
        list->tail->next = tmp;
    }
    list->tail = tmp;
 
    if (list->head == NULL) {
        list->head = tmp;
    }
    list->size++;
}
size можно выбросить, если не пользуемся. Слишком мудрено?
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
31.03.2019, 08:42  [ТС] 12
Спасибо, попробую, а что делать с for (auto i = as.begin(); i != as.end(); i++)? получается as же в массиве был, а без него не работает
0
446 / 332 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
31.03.2019, 09:34 13
ghostgames18, создать копию головы и пробегаться по всем элементам
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
31.03.2019, 16:00  [ТС] 14
а как это записать правильно?
0
446 / 332 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
31.03.2019, 16:40 15
C++
1
2
3
4
5
6
7
auto temp = head;
 
while (temp) {
  // че-то делаем
 
  temp = temp->next;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2019, 16:40
Помогаю со студенческими работами здесь

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

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

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

Заменить массив структур на односвязный список, и на двусвязный список
Взять текст задания и заменить массив структур на односвязный список, и на двусвязный список ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru