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

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

Войти
Регистрация
Восстановить пароль
 
Kulibin474
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 5
#1

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

30.05.2012, 01:56. Просмотров 651. Ответов 0
Метки нет (Все метки)

Здравствуйте! Задали сделать сортировку выбором односвязного списка. Вот мой код:

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".
Подскажите пожалуйста, почему программа работает неверно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2012, 01:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка односвязного списка (C++):

Сортировка односвязного списка - C++
Помогите пишу курсач сделал все ф-ции кроме сортировки в голову не приходит как что не пробовал без результатно( прошу помочь( уже как...

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

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

Сортировка односвязного списка - C++
Здравствуйте уважаемые киберфорумщики! Нужна срочная помощь!!! В общем у меня есть задача которую нужно сделать но нет ни знаний ни...

Сортировка односвязного списка - C++
Добрый день форумчанам! Есть задача но не знаю как написать ее так как не знаю динамического программирования ) Будьте любезны...

Сортировка односвязного списка (2 метода) - C++
Здравствуйте, у меня проблема с сортировкой односвязного списка(то теряю указатель и получается список короче, то не до конца обходятся...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2012, 01:56
Привет! Вот еще темы с ответами:

Сортировка односвязного списка символов - C++
я понимаю как создавать, как заполнять, но как его сортировать я хз :(

Сортировка односвязного списка пузырьком - C++
Сортирую список по убыванию пузырьком (он заполняется 46 случайными числами от 1 до 26) Смысл понятен но в синтаксисе языка делаю ошибки....

Не работает сортировка для односвязного списка - C++
Код следующий: #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; #include &lt;algorithm&gt; #include &lt;string&gt; using...

Сортировка односвязного списка (нужно редактирование) - C++
нужно вот что - Задание : Сортировка книг данного автора по полю год издания, то есть, вводишь автора, и он &lt; кто ? /&gt;сортирует его...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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