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

Создать линейный двунаправленный список, упрорядоченный по убыванию - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Виктория_
46 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 27
31.03.2012, 21:14     Создать линейный двунаправленный список, упрорядоченный по убыванию #1
Создать линейный двунаправленный список, упрорядоченный по убыванию.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2012, 21:14     Создать линейный двунаправленный список, упрорядоченный по убыванию
Посмотрите здесь:

C++ Двунаправленный линейный список
C++ Линейный двунаправленный список
C++ Циклический двунаправленный список, упорядоченный по убыванию
Создать двунаправленный список C++
C++ Двунаправленный линейный список
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
31.03.2012, 23:11     Создать линейный двунаправленный список, упрорядоченный по убыванию #2
Для размышления

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
#include <iostream>
#include <list> 
using namespace std;
int main()
{
    list<int> L;
    int n, x;
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        cin >> x;
        L.push_back(x);
    }
    
    L.sort();
    L.reverse();
 
    list<int>::iterator i;
    for (i = L.begin(); i != L.end(); ++i)
    {
        cout << *i << " ";
    }
    cout << endl;
    system("pause >> null");
    return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.04.2012, 00:24     Создать линейный двунаправленный список, упрорядоченный по убыванию #3
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct NODE {
    int value;
    struct NODE * prev;
    struct NODE * next;
} node_t;
 
typedef struct DESCLIST {
    node_t * first;
} desclist_t;
 
desclist_t * new_list(void){
    desclist_t * list;
    
    if ( ( list = (desclist_t*)malloc(sizeof(desclist_t)) ) == NULL ) 
        return NULL;
 
    list->first = NULL;
 
    return list;
}
 
void del_list(desclist_t * list) {
    node_t * tmp;
    while ( list->first ) {
        tmp = list->first->next;
        free(list->first);
        list->first = tmp;
    }
    free(list);
}
 
int insert(desclist_t * list, int value) {
    node_t * node;
 
    if ( ( node = (node_t*)malloc(sizeof(node_t)) ) == NULL )
        return -1;
    node->value = value;
 
    if ( list->first == NULL ) {
        node->prev = node->next = NULL;
        list->first = node;
    }
    else if ( list->first->value < node->value ) {
        node->prev = NULL;
        node->next = list->first;
        list->first->prev = node;
        list->first = node;
    }
    else {
        node_t * ptr = list->first;
        while ( ptr->next != NULL && ptr->next->value > node->value )
            ptr = ptr->next;
        node->prev = ptr;
        node->next = ptr->next;
        if ( ptr->next )
            ptr->next->prev = node;
        ptr->next = node;
    }
 
    return 0;
}
 
void dump(desclist_t * list) {
    node_t * node;
 
    if ( list->first == NULL )
        return;
    for ( node = list->first; node != NULL; node = node->next )
        printf("%d ", node->value);
 
    printf("\n");
}
 
void reversedump(desclist_t * list) {
    node_t * node;
 
    if ( list->first == NULL )
        return;
    for ( node = list->first; node->next != NULL; node = node->next )
        ;
    while ( node ) {
        printf("%d ", node->value);
        node = node->prev;
    }
 
    printf("\n");
}
 
int main(void){
    desclist_t * list;
    int value;
 
    if ( ( list = new_list() ) == NULL ) {
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
 
    printf("Enter some numbers and any nondigit symbol when done:\n");
    while ( printf("> ") && scanf("%d", &value) == 1 ) {
        if ( insert(list, value) ) {
            fprintf(stderr, "Memory error!\n");
            exit(1);
        }
    }
 
    printf("Descendant sorted:\n");
    dump(list);
    printf("Ascendant sorted:\n");
    reversedump(list);
 
    del_list(list);
    list = NULL;
 
    exit(0);
}

Не по теме:

Нашёл косяк, исправил, для проверки сделал вывод в обратную сторону...

Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
01.04.2012, 00:27     Создать линейный двунаправленный список, упрорядоченный по убыванию #4
easybudda,
Yandex
Объявления
01.04.2012, 00:27     Создать линейный двунаправленный список, упрорядоченный по убыванию
Ответ Создать тему
Опции темы

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