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

Упорядочить список целых чисел - C++

Восстановить пароль Регистрация
 
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
25.05.2014, 14:01     Упорядочить список целых чисел #1
Здравствуйте. Нужно создать список целых чисел. Упорядочить его элементы и вывести на печать. Списки можно создавать вводом из файла или с клавиатуры.

Не могу понять, как именно создавать и упорядочивать? Можно ли пузырьком?


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
#include <iostream>
using namespace std;
 
int main()
{
    int size;
    cin >> size;
 
    int *a = new int[size];
 
    for (int i = 0; i < size; i++)
    {
        cin >> a[i];
    }
    for (int i = 0; i < size; i++)
    {
        for (int j = size - 1; j > i; j--)
        {
            if (a[j] < a[j - 1])
            {
                swap (a[j], a[j - 1]);
            }
        }
    }
    for (int i = 0; i < size; i++)
    {
        cout << a[i] << ' ';
    }
 
    return 0;
}
Вот сортировка, но как применить ее к списку? И как его задать правильно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 14:01     Упорядочить список целых чисел
Посмотрите здесь:

C++ Сформировать список из вещественных чисел. Упорядочить список по возрастанию.
Массивы. Упорядочить элементы заданного массива целых чисел по убыванию количества единиц... C++
Дан список из n целых не отрицательных чисел C++
Дан список из n целых не отрицательных чисел a1,a2,..,an. Найти a1+a2+..+an C++
Создать список целых чисел. Создать новый список, записав в него отрицательные элементы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 428
25.05.2014, 14:04     Упорядочить список целых чисел #2
Привет юзай stl и не парь себе мозг)
контейнер list
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
25.05.2014, 14:15  [ТС]     Упорядочить список целых чисел #3
Вот, я покопался:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
   int arr[] = { 1, 6, 0, 100};
   list<double> l (arr, arr + sizeof(arr) / sizeof(int));
   l.sort();
   copy(l.begin(), l.end(), ostream_iterator<double>(cout, " "));
   cout << endl;
   return 0;
}
Как можно сделать, чтобы эти цифры можно было вводить с клавиатуры или читать из файла?
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 428
25.05.2014, 14:21     Упорядочить список целых чисел #4
Ввод с клавы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
   list<int> l;
   copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(l));
   l.sort();
   copy(l.begin(), l.end(), ostream_iterator<int>(cout, " "));
   cout << endl;
   return 0;
}
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
25.05.2014, 14:33  [ТС]     Упорядочить список целых чисел #5
У меня так просто открывается окно. Я могу вводить туда числа, но прога ничего не делает. Может, я что то не правильно понял?

Еще я пытался сделать это через ввод массива

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
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{  setlocale (LC_ALL, "RUS");
unsigned int size = 0;
cout << "ВВедите размер массива: ";
cin >> size;
cin.sync(); //очищение буфера стандартного ввода
int arr = new int[size];
cout << "Ввод массива...";
for (int i =0; i< size; i++)
{
    cout << "Введите " << i << " элемент массива: ";
    cin >> arr[i];
    cin.sync();
}
 //  int arr[] = { 1, 6, 0, 100};
   list<double> l (arr, arr + sizeof(arr) / sizeof(int));
   l.sort();
   copy(l.begin(), l.end(), ostream_iterator<double>(cout, " "));
   cout << endl;
   return 0;
}
Но этот способ тоже почему-то отказывается работать...
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 428
25.05.2014, 14:40     Упорядочить список целых чисел #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
   list<int> l;
   copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(l));
   l.sort();
   copy(l.begin(), l.end(), ostream_iterator<int>(cout, " "));
   cout << endl;
   return 0;
}
Тут будет читать числа до первой ошибки. То есть например вводиш 1 2 3 4 5 q. В итоге получиш лист 1 2 3 4 5.

Добавлено через 2 минуты
Ну и твой код
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
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
  setlocale (LC_ALL, "RUS");
  unsigned int size = 0;
  cout << "ВВедите размер массива: ";
  cin >> size;
  cin.sync(); //очищение буфера стандартного ввода
  int* arr = new int[size];
  cout << "Ввод массива...";
  for (int i =0; i< size; i++) {
    cout << "Введите " << i << " элемент массива: ";
    cin >> arr[i];
    cin.sync();
  }
  list<int> l (arr, arr + size);
  l.sort();
  copy(l.begin(), l.end(), ostream_iterator<int>(cout, " "));
  cout << endl;
  return 0;
}
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
25.05.2014, 14:48  [ТС]     Упорядочить список целых чисел #7
О, спасибо. Я в этих функциях еще не работал ни разу, вы мне очень помогли. А как можно, допустим, если ввели два одинаковых числа, чтобы в упорядоченный список он вводил только одно, т.е. если 1 3 2 1 5, было 1 2 3 5?
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 428
25.05.2014, 14:51     Упорядочить список целых чисел #8
Можна после того как создал лист применить алгоритм
l.unique();

Добавлено через 21 секунду
это как вариант
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
25.05.2014, 22:36  [ТС]     Упорядочить список целых чисел #9
Спасибо)

Добавлено через 7 часов 44 минуты
Я попытался реализовать эту же задачу не используя функцию 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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
 
using namespace std;
 
struct Node       //Структура являющаяся звеном списка
 {
     int x;     //Значение x будет передаваться в список
     Node *Next,*Prev; //Указатели на адреса следующего и предыдущего элементов списка
 };
 
 class List   //Создаем тип данных Список
 {
     Node *Head,*Tail; //Указатели на адреса начала списка и его конца
 
 public:
     List():Head(NULL),Tail(NULL){}; //Инициализируем адреса как пустые
     ~List(); //Деструктор
     void Show(); //Функция отображения списка на экране
     void Add(int x); //Функция добавления элементов в список
     void Sort();
 };
 
List::~List() //Деструктор
 {
     while (Head) //Пока по адресу на начало списка что-то есть
     {
         Tail=Head->Next; //Резервная копия адреса следующего звена списка
         delete Head; //Очистка памяти от первого звена
         Head=Tail; //Смена адреса начала на адрес следующего элемента
     }
 }
 
 void List::Add(int x)
 {
   Node *temp=new Node; //Выделение памяти под новый элемент структуры
   temp->Next=NULL;  //Указываем, что изначально по следующему адресу пусто
   temp->x=x;//Записываем значение в структуру
 
   if (Head!=NULL) //Если список не пуст
   {
       temp->Prev=Tail; //Указываем адрес на предыдущий элемент в соотв. поле
       Tail->Next=temp; //Указываем адрес следующего за хвостом элемента
       Tail=temp; //Меняем адрес хвоста
   }
   else //Если список пустой
   {
       temp->Prev=NULL; //Предыдущий элемент указывает в пустоту
       Head=Tail=temp; //Голова=Хвост=тот элемент, что сейчас добавили
   }
 }
 
 void List::Show()
 {
//ВЫВОДИМ СПИСОК С КОНЦА
     Node *temp=Tail;
      //Временный указатель на адрес последнего элемента
     while (temp!=NULL) //Пока не встретится пустое значение
     {
     cout<<temp->x<<" "; //Выводить значение на экран
     temp=temp->Prev; //Указываем, что нужен адрес предыдущего элемента
     }
     cout<<"\n";
/*
 //ВЫВОДИМ СПИСОК С НАЧАЛА
     temp=Head; //Временно указываем на адрес первого элемента
      while (temp!=NULL) //Пока не встретим пустое значение
     {
     cout<<temp->x<<" "; //Выводим каждое считанное значение на экран
     temp=temp->Next; //Смена адреса на адрес следующего элемента
     }
     */
     cout<<"\n";
 }
 
 void List::Sort()
 {
 
    Node * list = Head; // связанный список
    Node * node, * node2;
 
      for( node = list; node; node = node->Next )
        for( node2 = list; node2; node2 = node2->Next )
            if( node->x > node2->x ){ // если число из node меньше числа из node2 то переставляем их
                int i = node->x;
                node->x = node2->x;
                node2->x = i;
            }
 
     std::cout<<"\n";
 
 }
 
int main ()
{
// system("CLS");
 List lst; //Объявляем переменную, тип которой есть список
 lst.Add(1); //Добавляем в список элементы
 lst.Add(2);
 lst.Add(3);
 lst.Add(4);
 lst.Add(5);
 
 
 
 lst.Show(); //Отображаем список на экране
 lst.Sort();
  lst.Show();
 cout<<"\n";
 
 
//  system("PAUSE");
}
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 428
26.05.2014, 14:51     Упорядочить список целых чисел #10
Опишы проблему с выводом. У меня на Code blocks все прекрасно работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2014, 19:05     Упорядочить список целых чисел
Еще ссылки по теме:

Упорядочить массив целых положительных чисел по возрастанию, определить номер минимального простого числа C++
C++ Создать однонаправленный кольцевой список целых чисел
C++ Линейный список из целых чисел

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

Или воспользуйтесь поиском по форуму:
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
26.05.2014, 19:05  [ТС]     Упорядочить список целых чисел #11
В это программе числа задаются прямо с коде. А нужно, чтобы их можно было вводить с клавиатуры.

Добавлено через 2 часа 59 минут
А, все, разобрался)
Yandex
Объявления
26.05.2014, 19:05     Упорядочить список целых чисел
Ответ Создать тему
Опции темы

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