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

Сортировка односвязного списка - C++

Восстановить пароль Регистрация
 
Kulibin474
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 5
30.05.2012, 01:56     Сортировка односвязного списка #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
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
#include <iostream>
#include <stdlib.h>
#include <locale.h>
 
using namespace std;
 
struct list {
    int elem;
    list *next;
    list(int n = 0, list *p = NULL)
    {
        elem = n;
        next = p;
    }
};
 
void menu()
{   cout << "<1> - Добавить n элементов в первый список" << endl;
    cout << "<2> - Напечатать список" << endl;
    cout << "<3> - Сортировка выбором" << endl;
    cout << "<4> - Выход" << endl;
}
 
void print(list *head) //Печать передаваемого списка на экран.
{   
    cout << "Ваш список: ";
    while(head)
    {
        cout << head->elem ;
        cout << " "; 
        head = head->next;
    }
    cout << endl;
}
 
list *add_element(list *head, int value) //Добавление элемента value в указанный список head.
{
    list *q = new list(value), *t = head;
    if(head == NULL) return q;
    while(t->next != NULL) 
        t = t->next;
    t->next = q;
    return head;
}
 
list *delete_max(list *head, int max)
{       list *d,*null=0;
        if(head->elem == max) {
        if(head->next == 0)
            {*head=0; return head;}
        else {
        d=head;
        delete d;
        return head;}
        }
        else{
    list *t=head,*tmp;
    while(t->next)
        if (t->next->elem == max)
            {tmp = t->next;
            t->next=t->next->next;
            delete(tmp);
            return head;}
        else t=t->next;}
}
 
int max(list *head)
{   list *L1=head,*max;
    int m;
    m = INT_MIN;
    while(L1)
        {   if((L1->elem) > m) {
                m=L1->elem;
                max=L1;
        }
            L1=L1->next;
    }
    L1=head;
    return max->elem;
}
 
list *sort(list *head,int n)
{   list *q=0;
    for(int i=0; i<n; i++) 
    {   q=add_element(q,max(head));
        delete_max(head,max(head));
        };
return q;
}
 
void main()
{   setlocale(LC_ALL,"Russian");
    int choose;
    int n,count=0;
    list *L1=0;
    while(1)
    {
        menu();
        cin >> choose;
        switch(choose)
            {
        case 1:{
            cout << "Введите количество добавляемых элементов:" << endl;
            cin >> n;
            count+=n;
            cout << "Введите элементы:" << endl; 
            for(int i=0; i<n; i++) {
                int e_value;
                cin >> e_value;
                L1 = add_element(L1,e_value);
                }
            break;
               }
        case 2: {
                if (L1) print(L1); 
                else cout << "Список пуст!" << endl;
                break;}
        case 3: {
                L1=sort(L1,count);
                break;}
        case 4: {exit(0);}
        }
    }
}
В частных случаях сортирует нормально, но когда в списке встречаются 2 элемента, или мы сортируем список после того, как еще раз добавим в него элементы, большие последнего -- выдает такую ошибку:
Необработанное исключение в "0x013719eb" в "Lab3.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfeeefeee".
Подскажите пожалуйста, почему программа работает неверно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2012, 01:56     Сортировка односвязного списка
Посмотрите здесь:

[C++]сортировка односвязного списка C++
C++ Сортировка односвязного списка
C++ Сортировка односвязного списка (нужно редактирование)
C++ сортировка односвязного списка
Сортировка односвязного списка (2 метода) C++
Сортировка односвязного списка пузырьком C++
C++ Сортировка односвязного списка
Не работает сортировка для односвязного списка C++

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

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

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