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

Элементарные операции с динамических двусвязным списком

04.09.2013, 23:49. Показов 1672. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Нужна ваша помощь!
В общем задание:
Сформировать динамический двусвязный список.
Структура содержит фамилию спортсмена, вид спорта, количество очков. Добавлять новые записи так, чтобы информация по каждому виду спорта располагалась последовательно.


Получилось только создать динамический двусвязный список и вывести его на экран, а вот последовательно информацию по виду спорта не получается.. Как Я понял, нужно сделать следующее:
создать массив типа "строка" и занести в неё текущий элемент списка (struc -> namesport = а), потом сделать ещё одну переменную, которая будет указывать на следующий элемент списка за текущим (а -> next = b), а потом просто сравнить их, и если они равны, то ставить их рядом? если да, то как это реализовать, не пойму пока что.. и если Я не правильно веду ход мыслей, поправьте меня, пожалуйста.
Недостающая функция в программе "sort".
Помогите, пожалуйста!

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
#include <iostream>
#include <conio.h>
using namespace std;
 
struct structr
{
    char name[20];
    char namesport[20];
    int numb;
    structr *next;
    structr *prev;
};
 
void show (structr *struc);
//void sort (structr *struc);
 
void main (void)
{
SetConsoleCP(1251);  //Устанавливаем кодировку для ввода
SetConsoleOutputCP (1251); //Устанавливаем кодировку для вывода
    structr *head = 0;
    structr *tail = 0;
    char input[20];
    char input1[20];
    char ch = '0';
    while (ch!=27)
        {
            if (head)
                {   
                    tail -> next = new structr;
                    tail -> next -> prev = tail;
                    tail = tail -> next;
                }
            else 
            {
                head = new structr;
                tail = head;
                head -> prev = 0;
            }
            cout<<"Фамилия:";
            cin>>input;
            strcpy(tail->name,input);
 
            cout <<"Вид спорта: ";
            cin>>input1;
            strcpy(tail->namesport,input1);
 
            cout<<"Введите номер:";
            cin>>tail->numb;
            tail->next = 0;
            cout<<"Для выхода нажмите ESC, для продолжения-любую другую клавишу";
            cout<<endl;
            ch = getch();
        }
show(head);
sort(head);
_getch();
 
}
void show (structr *struc)
{
    while (struc)
    {cout << "Фамилия: " << struc -> name;
    cout <<endl << "Номер: " << struc -> numb;
    cout <<endl << "Вид спорта: " << struc -> namesport;
    cout << endl << endl;
    struc = struc -> next;
    }
}
 
/*void sort (structr *struc)
{   
    
}
*/
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.09.2013, 23:49
Ответы с готовыми решениями:

Нужны задачки для упражнения в работе со списком, стеком, очередью и двусвязным списком
Недавно научился строить список, стек, очередь, двусвязный список в С++, что бы закрепить навыки мне нужны задачки. Можете подсказать, где...

Работа с двусвязным списком
Программа работает, но частично (косяк с вводом строк и не работает определение принадлежности элемента списка). Исправьте, пожалуйста!=( ...

Программа с двусвязным списком крашится
Здравствуйте! написал код для двусвязного списка, проблема следующая: все компилируется, запускается интерфейс, но какую бы функцию я...

3
 Аватар для egor2116
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
05.09.2013, 13:37
Если необходимо расположить элементы списка по спорту последовательно в памяти, то я думаю что при вводе нового спортсмена необходимо проверять предыдущий узел на совпадение по виду спорта,если да то записать узел, если нет двигаться дальше назад пока не найдешь узел с этим же видом спорта записать узел при этом остальные сдвинуть на 1 вперед, если узла с таким видом спорта еще не было записать в конец списка.

Проще говоря сортируй список по полю Вид спорта сразу при записи узла, либо запиши все последовательно потом отсортируй и выводи.
1
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
05.09.2013, 23:18  [ТС]
Цитата Сообщение от egor2116 Посмотреть сообщение
Если необходимо расположить элементы списка по спорту последовательно в памяти, то я думаю что при вводе нового спортсмена необходимо проверять предыдущий узел на совпадение по виду спорта,если да то записать узел, если нет двигаться дальше назад пока не найдешь узел с этим же видом спорта записать узел при этом остальные сдвинуть на 1 вперед, если узла с таким видом спорта еще не было записать в конец списка.

Проще говоря сортируй список по полю Вид спорта сразу при записи узла, либо запиши все последовательно потом отсортируй и выводи.
спасибо.
только в этом-то и проблема, что не понимаю как сортировать.. сравнивать текущее поле namesport с последующим, и если они равны, то ставить их за первым элементом? а если не равны? то в конец списка?
0
 Аватар для egor2116
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
06.09.2013, 13:18
Первым делом выбери метод сортировки тут Алгоритмы сортировок
Почитай и посмотри ихние алгоритмы выбери понравившейся, там обычно на примере с массивами чисел а у тебя вместо массива будет список.
Потом напиши метод сортировки
/*void sort (structr *struc)
{

}
*/
Сортировать будешь по полю Вид спорта в алфавитном порядке.
Предполагаю что для этого нужно будет сделать маленькую функцию compare для сравнения какая из строк больше, в цикле по символьно сравниваются две строки и возвращает либо номер узла либо bool либо большее поле и т.д.

Как то так. Будут вопросы задавай чем смогу помогу.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2013, 13:18
Помогаю со студенческими работами здесь

Задача с двусвязным списком. Правильно ли решена?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;malloc.h&gt; typedef struct node { int data; struct node *next; struct node...

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

Создание класса для работы с двусвязным списком
Помогите, пожалуйста, построить класс для работы с двусвязным списком. Элементы списка – действительные числа. Создать список List1,...

Работа с двусвязным нециклическим списком: инверсия списка
Есть программа для работы с двухсвязным списком. Есть проблемы с функцией инверсии списка. Visual C++ выдает следующую ошибку: ...

Небольшая ошибка в структуре программы с двусвязным списком
Всем привет, есть программа, выполняющая основные операции с двусвязным списком. При выполнении выскакивает ошибка и подчеркиваются красным...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru