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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ 6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика http://www.cyberforum.ru/cpp-beginners/thread590994.html
Разбираю 6-ю главу книги Роберт Седжвик: Фундаментальные алгоритмы C++. Части 1-4 Расматриваются простые методы сортировки, любых типов данных. http://www.proklondike.com/books/cpp/sedzhvik_fundamental_algo1_4.html В листингах 6.1-6.5 представлены методы сортировок, а в листингах 6.6-6.10 преставлена клиентская программа для любых типов данных типа Item. В общем переписал вроде все...
C++ Переделать программу из C# в C++ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace слияние { http://www.cyberforum.ru/cpp-beginners/thread590982.html
задача про багаж с другими условиями! C++
Багаж пассажира характеризуется количеством вещей и общим весом вещей. Дан файл f, содержащий информацию о багаже нескольких пассажиров, информация о багаже каждого отдельного пассажира представляет собой соответствующую пару чисел. Дать сведения о багаже, число вещей в котором не меньше, чем в любом другом багаже, а вес вещей не больше, чем в любом другом багаже с этим же числом вещей. #include...
C++ компилирование с /clr
нашел пример функции чтения из файла http://msdn.microsoft.com/ru-ru/library/y52yxde8.aspx и он не компилится.. в опциях меняю на Common Language Runtime Support (/clr) и получаю 1>kursach1.cpp(1): warning C4652: compiler option 'CDecl(/Gd)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header 1>kursach1.cpp(1): warning...
C++ Указатели на функции c интегралом http://www.cyberforum.ru/cpp-beginners/thread590974.html
Составить функцию, которая по формуле I\approx h\left(\frac{f(a)}{2}+f(a+h)+f(a+2h)+...+f(a+(n-1)h)+\frac{f(b)}{2} \right), где n фиксировано h=\frac{b-a}{n} вычисляет значение определённого интеграла I=\int_{a}^{b}f(x)dx от произвольной функции одной переменной. С помощью составленной функции вычислить значение интеграла \int_{0.5}^{3.5}\sqrt{2{x}^{2}+3}dx для n=3, 6, 9. Для вычисления...
C++ Как в консоли поменять ширину экрана программно? как программно задать ширину консоли подробнее

Показать сообщение отдельно
Kulibin474
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 5
30.05.2012, 01:56     Сортировка односвязного списка
Здравствуйте! Задали сделать сортировку выбором односвязного списка. Вот мой код:

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".
Подскажите пожалуйста, почему программа работает неверно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru