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

Сортировка односвязного списка пузырьком - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
pitline
41 / 9 / 4
Регистрация: 21.12.2013
Сообщений: 208
02.05.2014, 18:58     Сортировка односвязного списка пузырьком #1
Сортирую список по убыванию пузырьком (он заполняется 46 случайными числами от 1 до 26)
Смысл понятен но в синтаксисе языка делаю ошибки.
Собственно сам код
C++ (Qt)
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
#include <iostream>
#include <conio.h>
#include <ctime>
#include <cstdlib>
 
#include <list>
 
using namespace std;
//создаем функцию для вывода списка
void Print(mylist *b)
{
    mylist *print = b;
    while(print)
    {
        cout << print->a.key << "->";
        print = print->next;
    }
    cout << "NULL\n" << endl;
}
 
 
//функция заполнения и сортировки
  int main()
  {
      //заполнение
  srand(time(0));
    int n, tmp;
    int *begin, *end;//указатель на начало и конец списка
    list<int> mylist; //создаем список
      for (int i = 0; i < 46; i++)
      {  
          //присваиваем переменной n случайные значения от 1 до 46
          n=1 + rand() % 26;
          
          //заполняем список значениями от 1 до 46 включительно
          mylist.push_back(n);
      }
 
 
      //сортировка
       for (int i = 0; i < 46; i++)
      {  
          for (int j = 0; j < 46; j++)
          {
              if(mylist->begin < mylist->next)//если последующий больше предыдущего
 
                  //меняем местами элементы упорядочивая по убыванию
              {
                tmp = mylist->next;
                mylist->begin = mylist->next;
                mylist->begin =tmp;
              }
          }
      }
 
      cout << "Вывод списка" << endl;
 
      Print(begin);
      _getch();
      return 0;
  }
Думаю по комментам и смыслу понятно что где, спасибки все кто терпеливо проглядел код)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2014, 18:58     Сортировка односвязного списка пузырьком
Посмотрите здесь:

[C++]сортировка односвязного списка C++
C++ Сортировка односвязного списка
сортировка пузырьком связного списка C++
C++ сортировка односвязного списка
Сортировка односвязного списка (2 метода) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TenGen
Будущее рядом
 Аватар для TenGen
96 / 94 / 20
Регистрация: 06.03.2014
Сообщений: 342
02.05.2014, 19:11     Сортировка односвязного списка пузырьком #2
pitline, а вы уверены, что List работает именно так? В нем есть вот такое ? a.key?
pitline
41 / 9 / 4
Регистрация: 21.12.2013
Сообщений: 208
02.05.2014, 19:26  [ТС]     Сортировка односвязного списка пузырьком #3
Цитата Сообщение от TenGen Посмотреть сообщение
В нем есть вот такое ? a.key?
a.key значение элемента списка которое нужно вывести, но я не знаю как его записать и такая запись не правильная, но как вписать в этот вывод цикл с перебором элементов списка я не знаю
TenGen
Будущее рядом
 Аватар для TenGen
96 / 94 / 20
Регистрация: 06.03.2014
Сообщений: 342
02.05.2014, 19:38     Сортировка односвязного списка пузырьком #4
pitline, обычно в таких случаях делают собственную реализацию списка) что бы понять принцип действия и устройства. Но если не хотите такой вариант (или вас заставляют использовать именно готовые реализации), то для начала: передаваемый параметр в функции должен иметь тип list<int>. Вы вписали вместо типа объекта название списка из функции main, так работать не будет. Указатель в функции тоже должен иметь тип list<int>. И я не нашел в list поле a.key
pitline
41 / 9 / 4
Регистрация: 21.12.2013
Сообщений: 208
02.05.2014, 19:49  [ТС]     Сортировка односвязного списка пузырьком #5
Т. е. в строке 36
Цитата Сообщение от pitline Посмотреть сообщение
mylist.push_back(n);
должен иметь вид как
C++ (Qt)
1
list<int>.push_back(n);
?
А в выводе наверно нужно поставить вместо a.key *begin(указатель на начало списка)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
void Print(mylist *b)
{
    mylist *print = b;
    while(print)
    {
        cout << print->*begin << "->";
        print = print->next;
    }
    cout << "NULL\n" << endl;
}
Если знаете подскажите пожалуйста как вообще правильно записывается цикл с перебором элементов списка, спасибо.
TenGen
Будущее рядом
 Аватар для TenGen
96 / 94 / 20
Регистрация: 06.03.2014
Сообщений: 342
02.05.2014, 19:57     Сортировка односвязного списка пузырьком #6
pitline,
C++
1
2
3
4
5
6
7
8
9
10
11
void Print(list<int> *b)
{
    iterator *counter = b->begin;
    cout << counter.value << endl; // Я не знаю, какое поле в списке хранит значение
    while(counter->next)
    {
        cout << counter->value << endl";
        counter = counter->next;
    }
    cout << "NULL\n" << endl;
}
Что то типа такого... Но я могу ошибиться.

mylist.push_back(n); правильно написан, потому что при вызове функции вы указываете имя объекта, с которым хотите работать. Когда же вы передаете в функцию параметры, вы указываете тип входящего параметра, то есть list<int>
Yandex
Объявления
02.05.2014, 19:57     Сортировка односвязного списка пузырьком
Ответ Создать тему
Опции темы

Текущее время: 00:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru