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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sivilan
6 / 6 / 0
Регистрация: 17.03.2013
Сообщений: 66
#1

Сортировка односвязного(линейного) списка(код внутри) - C++

18.02.2014, 17:33. Просмотров 193. Ответов 0
Метки нет (Все метки)

Здравствуйте.Нужна помощь,у меня самого не получается,уже не знаю как организовать сортировку перестановкой указателей,то есть ссылок элементов друг на друга.В коде ниже организована с помощью массива,а мне нужно с помощью перестановки только ссылок(указателей)элементов списка.Спасибо
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
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
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream>
using namespace std;
 
struct foot
{
    int mesto;
    foot *next;
};
foor *last=NULL;
 
void menu ()
{
    cout<<endl<<"\nViberite nomer deistviya";
    cout<<endl<<"1.Zapolnit' tyrnirnuy tablicy";
    cout<<endl<<"2.Sortirovat' elementi tyrnirnuy tablici ";
    cout<<endl<<"3.Pokazat' tyrnirnuy tablicy";
    cout<<endl<<"4.Ydalit' elementi tyrnirnuy tablici";
    cout<<endl<<"5.Vihod\n";
 
}
 
void add(foot ** first, int m )
{
    if ((*first)==NULL)
    {
        *first = new foot();
        (*first)->mesto = m;
        (*first)->next=NULL;
    }
    else
 {
       foot *adr = *first;
       while (adr->next)
       {
           adr=adr->next;
       }
       adr->next=new foot();
       adr=adr->next;
       adr->mesto=m;
    }
}
 
void show(foot *first)
{
 while (first!=NULL)
 {
  cout << endl << first->mesto;
  first = first->next;
 }
}
 
 void del(foot** first, int m)
{
    foot *ptmp = *first;
    int cntr = 0;
    while(ptmp!=NULL)
    {
        if(ptmp->mesto == m)
        {
            if(cntr==0)
            {
                *first = (*first)->next;
                delete ptmp;
                ptmp = 0;
            }
            else
            {
                ptmp = *first;
                while(--cntr!=0)
                    ptmp = ptmp->next;
                foot* pdel = ptmp->next;
                ptmp->next = pdel->next;
                delete pdel;
                pdel = 0;
            }
            break;
        }
        ptmp = ptmp->next;
        ++cntr;
    }
}
 
void sor(foot* first)
{
    if(first && first->next)
    {
        foot* const pf = first;
        int cntr = 0;
        while(first)
        {
            ++cntr;
            first = first->next;
        }
        foot* *arr = new foot*[cntr];
        first = pf;
        for(int i = 0; first; ++i)
        {
            arr[i] = first;
            first = first->next;
 
        }
        int i, j, tmp;
        for(i = 0; i < cntr; ++i)
        {
            tmp = arr[i]->mesto;
            for(j = i - 1; j >= 0 && arr[j]->mesto > tmp; --j)
                arr[j+1]->mesto = arr[j]->mesto;
            arr[j+1]->mesto = tmp;
        }
    }
}
 
 
 int main ()
 {
    int val, opt;
    foot *first = NULL;
    while(true)
    {
 
        menu();
        cin>> opt;
        switch (opt)
        {
        case 1:
         cout<<"Element dlya dobavleniya: ";
         cin>> val;
         add(&first, val);
         break;
        case 2:
            sor(first);
            break;
        case 3:
         show(first);
         break;
        case 4:
         cout<<"Element dlya udaleniya: ";
         cin>> val;
         del (&first, val);
         break;
        case 5:
            return 0;
        }
    }
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 17:33     Сортировка односвязного(линейного) списка(код внутри)
Посмотрите здесь:

Гайд по сортировке односвязного линейного списка - C++
Посоветуйте пожалуйста толковый гайд по сортировке. Уже столько всего перерыл, прочитал, но понять алгоритм не получается Добавлено...

Проход по элементам односвязного линейного списка - C++
Допустим у меня существует класс линейного односвязного списка. Надо пройти по его элементам и присвоить каждому соответствующее...

Удалить из односвязного линейного списка определенный узел - C++
Построить односвязный список из входной последовательности целых чисел. Написать программу, которая удаляет из линейного списка входной...

Стек на основе односвязного списка (доработать код) - C++
Написать класс &quot;стек&quot; (первый пришел, последний ушел) на основе односвязного списка. Реализовать методы Push и Pop. Стек хранит структуру...

Сортировка динамического линейного списка - C++
Подскажите пожалуйста как вывести список книг изданных после указанного года.Я уже все пересмотрела везде только добавить -удалить.Это я...

сортировка линейного списка перестановками - C++
я написал алгоритм который будет просто менять поля value а не перенаправлять указатели, но программа не работает правильно не могли бы вы...

Сортировка линейного списка по полю year - C++
Господа подскажите как осуществить сортировку списка по полю year? При этом неважно по убыванию или возрастанию, метод сортировки тоже...

Почему не работают методы списка (односвязного), при вызове ф-ий? (Код прилагается) - C++
Написал такой код, для односвязного списка. И когда начал компилировать, столкнулся с проблемой : не работают методы. Ошибка в том,...

Сортировка двунаправленного линейного списка по алгоритму Хоара - C++
ПОМОГИТЕ СРОЧНО!!!! нужно отсортировать двунаправленный линейный список по алгоритму Хоара менять местами можно только указатели!! код...

Сортировка линейного списка слиянием сверху вниз - C++
«Функция merge должна сливать список, на который указывает a, со списком, на который указывает b, с помощью вспомогательного указателя с....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru