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

Сортировка двунаправленного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа построения графа Герца http://www.cyberforum.ru/cpp-beginners/thread63613.html
добрый вечер! вот есть такая задачка Ориентированный граф сильно связен, если для любой пары вершин u,v существует путь из u в v. Компонентой сильной связности назовем произвольный максимальный сильно связный подграф. Конденсацией ориентированного графа(или графом Герца, или фактор-графом) называется орграф,который получается стягиванием в одну вершину каждой компоненты сильной связности...
C++ Обработка строк на C, за коментарии +)) Задача. Написать программу, которая в исходном тексте определяет количество каждой из букв и все символы, которые не являются буквами заменить символом '@'. На экран вывести список букв с количеством их в тексте и измененный текст(обработка исходного текста, который состоит из 8-10 строк длиной 60-80 символов каждая и расположен во входном файле на диске. В программе необходимо предусмотреть... http://www.cyberforum.ru/cpp-beginners/thread63602.html
C++ Обработка одномерных масивов, обьясните новичку.
1) Найти максимальный элемент массива A. 2) Найти среднее арифметическое элементов массива В. A (25), B (30) Метод сортировки массива А : перестановкой. Заранее спасибо.
C++ Обработка одномерных масивов.
1) Найти максимальный элемент массива A. 2) Найти среднее арифметическое элементов массива В. A (25), B (30) Метод сортировки массива А : перестановкой. Заранее спасибо.
C++ Вопросы http://www.cyberforum.ru/cpp-beginners/thread63590.html
Ребята, никто не писал никогда код на С++, связанный с имитационным моделированием? Просто, дали, там набор математич. формул и теория, а реального воплощения на С++ не находил.
C++ Посчитать сумму чисел. Нужно закончить программу. Доброго времени суток. Задача - посчитать сумму по такой формуле: (1+0.1)(2+0.2)...(N+N/10) #include <stdio.h> #include <math.h> #include <iomanip> #include <iostream> using namespace std; подробнее

Показать сообщение отдельно
TheKnyazz
10 / 10 / 1
Регистрация: 27.04.2009
Сообщений: 30
15.11.2009, 13:25  [ТС]     Сортировка двунаправленного списка
В общей сложности сделал еще и сортировку выбором.
Вот так сортируется двунаправленный список методом выбора.
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
int sort(myList* &top,myList* &endl,int key)
{//сортировка Выбором
myList* sort;    // элемент для того, чтобы запоминать отсортированные элементы
myList* big;    // переменная для хранения или самого большого элемента, или наоборот
myList* temp;   // временная переменная, ней мы пробегаем по циклам
temp = big = top;       // начальные значения
sort = NULL;
 while (big!=NULL)    // пока у нас есть не отсортированные элементы
 {
    big=temp;     // запоминаем наименший элемент как первый из неотсорт списка
    if(big!=NULL) //проверка последнего прохода
    {
    while (temp!=NULL)
    {
            switch(key)
        {   //проверка по ключу            //поиск минимального элемента
            case 1://по фамилии
            if (strcmp(temp->data.Fio,big->data.Fio)<0) big=temp;break;
            case 2://по таб. номеру
            if (temp->data.tabNum < big->data.tabNum) big=temp;break;
            case 3://по году рождения
            if (temp->data.age < big->data.age) big=temp;break;
            case 4://по участку
            if (temp->data.num_sector < big->data.num_sector) big=temp;break;
        }
      temp=temp->forward;//следующий элемент
    }
    if (big->back!=NULL)
       big->back->forward=big->forward;   // отчленение минимального из списка
    if (big->forward!=NULL)
       big->forward->back=big->back;
    if (sort!=NULL)
    {
        big->forward=sort->forward;    // так вставляем если уже есть
        sort->forward=big;           // сортированный список
        big->back=sort;
        if(big->forward!=NULL)     // для последнего элемента,
        {                          // чтобы не присваивать  пустоте значения
        big->forward->back=big;
        }
        sort=big;              //запомиманем конец отсортированного списка
    }
    else                       // если первый элемент отсортированного
      {
        if (big!=top) big->forward=top;
        big->back=NULL;
        big->forward->back=big;
        top=sort=big;       // запоминаем указатели на конец и
      }                     // начала нового сортированного списка
  temp=big->forward; // передвигаем указатель на начало не сорт списка
      }
 }
temp=top;
while(temp!=NULL)
   {
     endl=temp;
     temp=temp->forward;
   } //находим последний элемент
return 1;
}
Может быть кому-нибудь пригодится.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru