Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75

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

24.03.2019, 19:31. Показов 2456. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2019, 19:31
Ответы с готовыми решениями:

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

Допустимо ли вместо индекса массива использовать i-ый элемент другого массива?
Другими словами, допустимо ли использовать структуру такого типа: int Amas,mas1,mas2; ... if(Amas]]&gt;n) { ... }

Использовать new вместо обьявления массива из трех структур
//хелп, использовать new вместо обьявления массива из трех структур, намекните куда мне думать... #include &quot;stdafx.h&quot; ...

14
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
24.03.2019, 19:49
Да пожалуйста:
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  [ТС]
Вот дела, думал надо будет программу переделывать, благодарю
0
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
24.03.2019, 23:50
Цитата Сообщение от ghostgames18 Посмотреть сообщение
благодарю
Незачто) Успехов в изучении программирования!
1
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
26.03.2019, 09:10  [ТС]
Так, препод сказал сделать без использования include <list>, тему возобновляю, @Krokodil9798 если сможешь, помоги
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
26.03.2019, 12:08
ghostgames18, на форуме множество тем с реализациями двухсвязного списка; на них и нужно заменить list
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
26.03.2019, 16:27  [ТС]
ReDoX, это да, видел, много вариаций, но не до конца понял, как именно заменить массив на него, придется структуру переделывать? Помогите пожалуйста в виде кода, а то с #include <list> понял, а без него как-то не доходит, а препод просит
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
26.03.2019, 20:01
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  [ТС]
буду пробовать, но если кто-то захочет помочь в работающем коде - не откажусь, до след. вторника время есть
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
30.03.2019, 18:15  [ТС]
вообщем почитал книжки, посмотрел реализации на форуме, пытался подогнать под мой код с массивами, но ничего не выходит, слишком замудренно, если кто может мой код выше преобразовать в двусвязный список без использования #include <list>, помогите пожалуйста, буду вечно благодарен.
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
30.03.2019, 19:19
Цитата Сообщение от 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  [ТС]
Спасибо, попробую, а что делать с for (auto i = as.begin(); i != as.end(); i++)? получается as же в массиве был, а без него не работает
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
31.03.2019, 09:34
ghostgames18, создать копию головы и пробегаться по всем элементам
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 75
31.03.2019, 16:00  [ТС]
а как это записать правильно?
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
31.03.2019, 16:40
C++
1
2
3
4
5
6
7
auto temp = head;
 
while (temp) {
  // че-то делаем
 
  temp = temp->next;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2019, 16:40
Помогаю со студенческими работами здесь

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

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

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

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

Заменить массив структур на односвязный список, и на двусвязный список
Взять текст задания и заменить массив структур на односвязный список, и на двусвязный список using namespace std; class person { ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru