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

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

Войти
Регистрация
Восстановить пароль
 
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
#1

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

04.09.2013, 23:49. Просмотров 466. Ответов 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)
{   
    
}
*/
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 23:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Элементарные операции с динамических двусвязным списком (C++):

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

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

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

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

Разработать программу для создания и работы с двусвязным списком - C++
Задание: разработать программу для создания и работы с двусвязным списком , состоящим из структур. Для работы со списком создать меню со...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
05.09.2013, 13:37 #2
Если необходимо расположить элементы списка по спорту последовательно в памяти, то я думаю что при вводе нового спортсмена необходимо проверять предыдущий узел на совпадение по виду спорта,если да то записать узел, если нет двигаться дальше назад пока не найдешь узел с этим же видом спорта записать узел при этом остальные сдвинуть на 1 вперед, если узла с таким видом спорта еще не было записать в конец списка.

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

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

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

Как то так. Будут вопросы задавай чем смогу помогу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 13:18
Привет! Вот еще темы с ответами:

Работа с двусвязным списком, поиск и перемена местами двух элементов в списке - C++
Здравствуйте! Есть список List http://pastebin.com/tNSztz50 Не могу разобраться, как найти элемент в списке по его значению, и как...

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

Данное натуральное число N. Используя только элементарные арифметические операции (+, -, *, /) - C++
Ув.пользователи, помогите решить задачку (С + + или Visual C + +), очень нужно!( Данное натуральное число N. Используя только...

Используя только элементарные арифметические операции, определить сумму и произведение членов последовательности, которые кратны К - C++
Ув.пользователи, помогите решить задачку (С + + или Visual C + +). Данные целые положительные числа N, К, a1, ..., aN. Используя только...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.09.2013, 13:18
Ответ Создать тему
Опции темы

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