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

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

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

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

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
Ответы с готовыми решениями:

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

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

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

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

7
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.05.2012, 16:33 2
сортировка не работает корректно потому что для этого необходимо каждое число сравнивать с каждым элементом списка. Для этого необходимо создать иметь два указателя на начало списка.
допустим 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 3
спасибо, попробую этим методом
 Аватар для stawerfar
150 / 64 / 8
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.05.2012, 20:42 4
Ну или так:
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 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.05.2012, 20:49 5
Цитата Сообщение от stawerfar Посмотреть сообщение
код рабочий. Поймешь его после ознакомления с STL ;
Знаешь для чего дают такие задания? Чтоб человек как-раз разобрался с базовыми алгоритмами и контейнерами STL.

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

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

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

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

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

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

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

Сортировка однонаправленного списка вставками
помогите реализовать сорртировку вставками в однонаправленном линейном списке

Перевод из массивов в списки. Сортировка однонаправленного списка по убыванию.
Приветствую уважаемых формчан. Дочке в школе задали задачу по Паскалю\Делфи. Составить программу,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru