Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
s-mumrik

Структуры данных: сортировка однонаправленного списка

25.05.2012, 14:49. Показов 1619. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
значит так, есть вот эта программа:

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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <stdio.h>
#include <conio.h>
#include <math.h>
struct spisok
{   int info;
    spisok *link;
};
spisok *first=NULL;
 
 
void add(int data )
{
    if (first==NULL)
    {
    first=new (spisok);
    first->info=data;
    first->link=NULL;
    }
    else
    {
    spisok *adr;
    adr=first;
    while (adr->link!=NULL)
    {
      adr=adr->link;
    }
    adr->link=new (spisok);
    adr=adr->link;
    adr->info=data;
    adr->link=NULL;
    }
}
void print()
{
  spisok *adr;
  if (first==NULL)
    printf("!!!spisok pust \n");
  else{
    adr=first;
    while (adr!=NULL){
      printf("%d  ",adr->info);
      adr=adr->link;
    }
    printf("\n");
  }
}
 
void del(int data)
{
    spisok *adr,*adr1;
    adr=first;
    if (first==NULL)
      printf("!!!spisok pust \n");
    else
    {
      if (adr->info==data)
      {
    first=adr->link;
    delete adr;
      }
      else
      {
    if(adr->link->info==data)
    {
      adr1=adr->link;
      adr->link=adr->link->link;
      delete adr1;
    }
    else
    printf("\n!!!takogo elementa net \n");
      }
    }
}
 
void sortirovka (spisok *head )
{int k;
do
{
  k=0;
  int l=0;
  while (head->link != NULL)
  {
    if (head->info>head->link->info)
    {
    head;
    spisok *q=head;
    spisok *qq=head->link->link;
    first=head->link;
    first->link=q;
    first->link->link=qq;
    k=k+1;
    head=head->link;
    }
    else
    {
      head=head->link;
    }
    printf("%d",k);
  }
}
while (k!=0);
}
 
main()
{       clrscr();
    int n,a;
    do
    {
    printf("\n");
    printf("1. dobavit element \n");
    printf("2. posmotret spisok \n");
    printf("3. udalit element \n");
    printf("4. sortirovka elementov \n");
    printf("5. vyhod \n\n");
    printf("vyberite punkt menu: ");
    scanf("%d",&n);
    if (n==1)
    {
     printf("vvedite element \n");
     scanf("%d",&a);
     add(a);
    }
    if (n==2) print();
    if (n==3)
    {
        printf("vvedite ydaljaemoe chislo \n");
        scanf("%d",&a);
        del(a);
    }
    if (n==4) sortirovka(first);
    }
    while (n!=5);
}
все работает, кроме сортировки. то есть сортировка тоже работает, но только для сферического списка в вакууме(только для 2-х элементов). сортировка без перестановки элементов, то есть можно только перенаправить указатели. помогите пожалуйста разобраться, уже 2-ю неделю мучаюсь с прогой.

Добавлено через 21 час 32 минуты
вот этот участок не работает, подскажите пожалуйста, где ошибка.
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
void sortirovka (spisok *head )
{int k;
do
{
  k=0;
  int l=0;
  while (head->link != NULL)
  {
    if (head->info>head->link->info)
    {
    head;
    spisok *q=head;
    spisok *qq=head->link->link;
    first=head->link;
    first->link=q;
    first->link->link=qq;
    k=k+1;
    head=head->link;
    }
    else
    {
      head=head->link;
    }
    printf("%d",k);
  }
}
while (k!=0);
}
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.05.2012, 14:49
Ответы с готовыми решениями:

Сортировка однонаправленного списка
Доброго времени суток, уважаемые форумчане! Возникла проблема с сортировкой однонаправленного списка методом &quot;пузырька&quot;. Что...

Сортировка однонаправленного списка
Все работает как надо, кроме функции сортировки. Нужно отсортировать так, чтобы в списке сначала шли журналы, затем газеты. Интовую дату...

Сортировка однонаправленного списка записей
Написать программу сортировки однонаправленного списка записей со следующей структурой: Структура: Фамилия, место жительства, марка...

7
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.05.2012, 16:33
сортировка не работает корректно потому что для этого необходимо каждое число сравнивать с каждым элементом списка. Для этого необходимо создать иметь два указателя на начало списка.
допустим First и Second;
Тогда сравнения каждого элемента списка со всеми элементами списка будет выглядеть вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
spisok*First;
spisok*Second = First ->link;
spisok*temp;//для обмена
spisok * memory = Sicond;//запомнить первое положение
while(First->link)
{
   while(Second)
     {
       
      if(First->info<Second->info)
       { temp = First;
          First = Second;
          Second = temp;
        }
        Second = Second ->link;
       }
       First = First->link;
        Second = First->link ;
}
Вот как то так.
Конечно это не рабочий код так как надо предусмотреть и обмен внутренних указателей *.link.
Я просто объяснил логику сортировки списка!
1
s-mumrik
25.05.2012, 16:56
спасибо, попробую этим методом
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.05.2012, 20:42
Ну или так:
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
#include<iostream>
#include<list>
 
 
 
 
bool more(int o,int w)
{return o <w ? true : false;}
 
 
 
 
 
 
 
int main(void)
{
    std::list<int> list;
    std::list<int>::iterator iter;
    
    list.push_back(5);
    list.push_back(3);
    list.push_back(4);
    list.push_back(1);
    list.push_back(2);
    
    for(iter = list.begin(); iter != list.end() ; iter++)
    {
        std::cout << *iter << ' ';
    }
    list.sort(more);
    std::cout<<std::endl;
    for(iter = list.begin(); iter != list.end() ; iter++)
    {
        std::cout << *iter << ' ';
    }
    
    std::cout<<std::endl;
    
    system("pause");
return 0;
}
код рабочий. Поймешь его после ознакомления с STL ;
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.05.2012, 20:49
Цитата Сообщение от stawerfar Посмотреть сообщение
код рабочий. Поймешь его после ознакомления с STL ;
Знаешь для чего дают такие задания? Чтоб человек как-раз разобрался с базовыми алгоритмами и контейнерами STL.

Кстати, и для чего ты функцию-предикат написал, я не понял. list.sort() работает точно так же.
И запись int main(void) - C-шный стиль. Ну и название у списка неудачное.
0
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.05.2012, 23:04
Да, да, ты кроме критики , что нибудь позитивное сказать можешь? Почему то ты не отвечал на его вопрос, а мой ответ критикуешь? Знаю я таких как ты. Ни чего личного... Лучше вместо этого алгоритм написал а не умничал "капитан" очевидность!
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.05.2012, 23:28
Цитата Сообщение от stawerfar Посмотреть сообщение
Да, да, ты кроме критики , что нибудь позитивное сказать можешь? Почему то ты не отвечал на его вопрос, а мой ответ критикуешь? Знаю я таких как ты. Ни чего личного... Лучше вместо этого алгоритм написал а не умничал "капитан" очевидность!
Вот позитивное: код рабочий.

Некоторые люди просят покритиковать их, дабы научиться языку. А вы, я смотрю, уже мастер и критику в свой адрес воспринимаете очень жестко. Люди на ошибках учаться. В первую очередь, я помогаю вам, а не пытаюсь задеть. А ответ автору уже вы дали во 2 посте и вполне адекватный.

Ну и раз ты называешь мои посты "очевидными", а меня капитаном очевидностью, зачем тогда пишешь?
0
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.05.2012, 23:37
Да все в порядке у меня с восприятием к критики если она конструктивная.
Дело в том что я человеку ответил дважды, причём единственный в силу сложившихся обстоятельств. А со стороны заходит человек и критика выглядит нападением. Моя последующая реакция типична для 98% людей. Я просто защищался чисто интуитивно. Так что все нормаль , без обид! :-)
А по поводу стиля, так он у каждого свой. Так вот "void" писать мне просто нравиться, да и к тому же это полезная инфа об методе или функции, говорящая что функция 100% ни чего ни принимает, ведь могут и значения по умолчанию. Это помогает другим программистам, более комфортно чувствовать себя при работе с Вашим кодом. Ну этом моё мнение, их много и каждый придерживается своей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2012, 23:37
Помогаю со студенческими работами здесь

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

Сортировка однонаправленного списка (метод пузырька)
Написал программу однонаправленного списка записей со следующей структурой: ФИО, место жительства, марка авто, год выпуска. Помогите...

Написать программу линейного списка однонаправленного типа данных float добавление и удаление в любом месте элемента
Написать программу линейного списка однонаправленного типа данных float добавление и удаление в любом месте элемента. Нахождение...

Структуры и массивы, сортировка списка.
Задание звучит так... Написать программу, в которой необходимо создать структуру, элементами которой являются: имя, фамилия, год рождения...

Сортировка линейного, однонаправленного списка
Как отсортировать элементы линейного, однонаправленного списка?Список реализован динамически. Может кто поможет?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru