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

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

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

Двусвязный список, сортировка путём включения минимальных в новый список - C++

06.11.2013, 01:49. Просмотров 276. Ответов 0
Метки нет (Все метки)

Здравствуйте.
Задача формируется так:

Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка.


Написал следующий код, который правилен "орфографически", но выкидывает при выполнении. ВЫкидывает во время выолнения именно удаления, то есть этой строки:
C++
1
node_delete ( head_old, tail_old, point );
, которая ссылается на соответствующую функцию.


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
134
135
136
#include<iostream>
using namespace std;
 
struct NODE 
{
    int value;
    NODE *next, *prev;
};
typedef NODE *PNODE;
 
 
PNODE create_node (int value)
{
    PNODE node_new = new NODE; 
    node_new->prev = NULL;
    node_new->next = NULL;
    node_new->value = value; 
    
    return node_new;
}
 
 
void add_first(PNODE &head, PNODE &tail, PNODE node_new)
{
    node_new->next = head;
    node_new->prev = NULL;
    if ( head ) 
        head->prev = node_new;
    head = node_new;
    if ( ! tail ) 
        tail = head; 
}
 
 
void add_last(PNODE &head, PNODE &tail, PNODE node_new)
{
    node_new->prev = tail;
    node_new->next = NULL;
    if ( tail ) 
        tail->next = node_new;
    tail = node_new;
    if ( ! head )
        head = tail; 
}
 
 
void add_after (PNODE &head, PNODE &tail, PNODE p, PNODE node_new)
{
    if ( ! p->next )
        add_last (head, tail, node_new); 
    else 
    {
    node_new->next = p->next;
    node_new->prev = p;
    p->next->prev = node_new; 
    p->next = node_new;
    }
}
 
 
void add_before (PNODE &head, PNODE &tail, PNODE p, PNODE node_new)
{
    if ( ! p->prev )
        add_first (head, tail, node_new); 
    else 
    {
        node_new->prev = p->prev; 
        node_new->next = p;
        p->prev->next = node_new; 
        p->prev = node_new;
    }
}
 
void node_delete(PNODE &head, PNODE &tail, PNODE node_delete)
{
    if (head == node_delete)
    {
        head = node_delete->next; 
        if ( head )
            head->prev = NULL;
        else 
            tail = NULL; 
    }
    else 
    {
        node_delete->prev->next = node_delete->next;
        if ( node_delete->next )
            node_delete->next->prev = node_delete->prev;
        else 
            tail = NULL; 
    }
    delete node_delete;
}
 
PNODE find_min (PNODE head)
{
    PNODE q = head, m = head;
    while ( q )
    {
        if (q->value < m->value)
            m = q;
        q = q->next;
    }
    return m;
}
 
 
 
int main()
{
    int i {}, value {}, n{};
    PNODE head_old = NULL, tail_old = NULL, point = NULL;
    PNODE head_new = NULL, tail_new = NULL;
    for (i = 0; i < 5; i++)
    {
        cin >> value;
        point = create_node ( value );
        add_first ( head_old, tail_old, point);
        ++n;
    }
 
    for ( i = 0; i < n; i++)
    {
 
        point = find_min ( head_old );
        add_first ( head_new, tail_new, point );
        node_delete ( head_old, tail_old, point );
    }
    point = head_new;
    while ( point )
    {
        cout << point->value;
        point = point->next;
    }
    return 0;
}
Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 01:49     Двусвязный список, сортировка путём включения минимальных в новый список
Посмотрите здесь:

Двусвязный список. Загрузка, сохранение в файл, сортировка по вводимому параметру - C++
Здравствуйте! Нужна помощь с функцией загрузки информации из файла. Файл создается, информация сохраняется, но не извлекается. Выдает,...

Иерархия классов "Структура - Список - Кольцевой Двусвязный список" - C++
Неделю назад получил задание и срок выполнения до конца мая. Разработка иерархии классов. Структура - Список - Кольцевой Двусвязный...

Указатели. Двусвязный список - C++
struct Link { string value; Link *prev; Link *succ; Link (const string &amp;v) :value(v), prev(0),succ(0){} }; Link...

Двусвязный список. Функция swap - C++
Дописать в класс list функцию: swap – поменять содержимое текущего списка с заданным. #pragma once template&lt;class T&gt; class list...

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

Двусвязный список(сохранение в файл) - C++
Помогите, пожаааааалуйста, срочно надо для курсовой. Надо функцию сохранение в файл переделать с помощью fout.open(), тк компилятор...

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

Добавление элемента в двусвязный список - C++
двусвязный список, как сделать добавление элемента? пока вот что сочинил. /*Список*/ struct list_item_t { list_item_t...

Двусвязный список, фильтрация данных - C++
Добрый день, многоуважаемые форумчане! Я окончательно запутался в этой теме. Очень нуждаюсь в Вашей помощи :( Есть код. Ужасно кривой. ...

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


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

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

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