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

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

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

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

06.11.2013, 01:49. Просмотров 278. Ответов 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;
}
Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 01:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двусвязный список, сортировка путём включения минимальных в новый список (C++):

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

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

Двусвязный список (в конец двусвязного списка добавить другой список) - C++
здравствуйте, подскажите пожалуйста, как в конец двусвязного списка добавить другой список?

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

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

Переделать двусвязный список в двусвязный кольцевой - C++
Здравствуйте, у меня єсть двусвязный список однако он не кольцевой! как это запрограммировать? и второй вопрос как обеспечить вставку...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2013, 01:49
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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