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

Сортировка односвязного списка (нужно редактирование) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужна помощь с программой http://www.cyberforum.ru/cpp-beginners/thread562268.html
ПРограмма должна выполнять расчет коэффициентов характеристического полинома квадратной матрицы
C++ Алгоритм нахождения ПРОСТЫХ чисел в файле Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Из файла f получить файл g, оставив только ПРОСТЫЕ числа. Порядок следования чисел сохранить. При обрабоке файла не... http://www.cyberforum.ru/cpp-beginners/thread562248.html
C++ Определить каких букв больше в строке: гласных или согласных и на сколько.
1)Ввести строку А с клавиатуры состоящую из заглавных русских букв. Определить каких букв больше: гласных или согласных и на сколько. Вывести все слова заканчивающиеся на букву "а". 2)Удалить все...
Кнут - деление длинных чисел C++
Нужна помощь в переводе алгоритма деления длинных чисел из книги: Д. Э. Кнут - Искусство Программирование Том 2 Получисленные Алгоритмы. Особенно интересен третий шаг, я никак не могу понять, что...
C++ C++ http://www.cyberforum.ru/cpp-beginners/thread562233.html
Где закачать C++ для 64-разрядную Windows 7
C++ Индексы седловых точек Помогите пожалуйста! Буду премного благодарен за решение этой задачи на языке C++: Элемент матрицы назовём седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в... подробнее

Показать сообщение отдельно
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
01.05.2012, 03:41
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
void swap(Book* x, Book* y)
{
    string strtmp;
    unsigned int inttmp;
    strtmp = x->author;
    x->author = y->author;
    y->author = strtmp;
    strtmp = x->name;
    x->name = y->name;
    y->name = strtmp;
    inttmp = x->year;
    x->year = y->year;
    y->year = inttmp;
    inttmp = x->number;
    x->number = y->number;
    y->number = inttmp;
    inttmp = x->pages;
    x->pages = y->pages;
    y->pages = inttmp;
}
void sortByYear()    
{                       // Сортировка пузырьком
 
    Book * begin = first; //Начало очереди
    Book * current = first; //Текущая позиция в очереди
    char avtor[25]; //Переменная хранящая имя автора
    cout<<"Enter name avtor: ";
    cin>>avtor;
    for(current = first; current!=0; current = current->next)
        if(current->author==avtor)
            for(Book * current2 = current; current2!=0; current2=current2->next)
                if(current2->author==avtor)
                    if(current->year>current2->year)
                        swap(current,current2); // меняем местами
};
Вы меняли местами книги в списке, забыв об указателях. Нужно либо менять элементы списка местами и не забывать об указателях next, которые идут НА обмениваемые элементы, либо просто менять местами информационные поля, как сделал я в функции swap. Сделал я все по-тупому, за пару минут так что проверьте, но вроде работает. Было бы неплохо создать структуру data, а в неё уже поместить все информационные поля:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct Book {
   Data* inf;
    Book* next;
    ...
};
struct Data
{
    string author;
    string name;
    unsigned int year;
    unsigned int number;
    unsigned int pages;
};
Тогда проще будет менять местами поля.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru