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

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

Восстановить пароль Регистрация
 
kalina18
1 / 1 / 0
Регистрация: 06.05.2012
Сообщений: 11
06.11.2013, 01:49     Двусвязный список, сортировка путём включения минимальных в новый список #1
Здравствуйте.
Задача формируется так:

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


Написал следующий код, который правилен "орфографически", но выкидывает при выполнении. ВЫкидывает во время выолнения именно удаления, то есть этой строки:
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++
Создать список целых чисел. Создать новый список, записав в него отрицательные элементы C++
Двусвязный список C++
Двусвязный список C++
C++ Двусвязный список. Загрузка, сохранение в файл, сортировка по вводимому параметру

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

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

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