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

Удаление/добавление записи по ключу в односвязном списке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Литература по Visual C++ http://www.cyberforum.ru/cpp-beginners/thread160244.html
Доброго времени суток. 1. Подскажите пожалуйста хорошую книжку по Visual C++ класса - "от А до Я" среда VS. что бы в ней было описание всех формочек, кнопочек до сети и графики и тд. 2....
C++ Цикл for и 56 карт Выводит 14! карт в каждой строке. Я не понял как это получается. // 7_6.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <cstdlib>... http://www.cyberforum.ru/cpp-beginners/thread160209.html
Печать слова копейка в согласованном падеже C++
какая для целого числа печатает слово копейка в согласованном падеже.
Не могу понять в чем ошибка: реализация односвязного списка C++
#include <iostream> using namespace std; struct list { int key; list *next; }; void addList(list *start);
C++ Функция, определяющая достижение начала файла: есть ли такая? http://www.cyberforum.ru/cpp-beginners/thread160173.html
Собственно мне нужна функция, проверяющая достижение начала файла, типа feof только наоборот. Гуглил, ничего не нашел =(
C++ Есть исходники браузера? Есть у кого-нибудь исходники браузера? П.С.Администрации сделайте в каждом разделе форума чат, примерно для таких вопросов. Добавлено через 6 минут П.С. Исходники нужны на чистом Си подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9694 / 5644 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
19.08.2010, 17:38
Цитата Сообщение от Nameless One Посмотреть сообщение
А Вам точно нужен односвязный список? Может, лучше здесь использовать std::map?
На самом деле для подобных задач односвязный список - не лучший выбор. Вот переделанный пример отсюда. Читает значения, пока ноль не ввести, выводит уникальные значения, отсортированные по возрастанию:
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct LISTNODE {
    int nVal;
    struct LISTNODE * pNext;
} listnode_t;
 
listnode_t * new_node(int val, listnode_t * last){
    listnode_t * ln;
    if ( ( ln = (listnode_t*)malloc(sizeof(listnode_t)) ) == NULL ){
        perror("malloc");
        return NULL;
    }
    ln->nVal = val;
    ln->pNext = NULL;
    if ( last )
        last->pNext = ln;
    return ln;
}
 
void clear_list(listnode_t * ln){
    listnode_t * tmp;
    while ( ln ){
        tmp = ln->pNext;
        free(ln);
        ln = tmp;
    }
}
 
listnode_t * create_list(void){
    listnode_t * first, * last, * found, * prev, * inserted;
    int val;
 
    first = last = NULL;
    while ( 1 ){
        printf("> ");
        if ( scanf("%d", &val) != 1 ){
            fprintf(stderr, "Wrong input!\n");
            if ( first )
                clear_list(first);
            return NULL;
        }
        if ( ! val )
            break;
        if ( ! first ){
            if ( ( first = new_node(val, NULL) ) == NULL ){
                fprintf(stderr, "Memory error!\n");
                return NULL;
            }
            last = first;
        }
        else {
            for ( found = first; found != NULL && val > found->nVal; found = found->pNext )
                ;
            if ( ! found ){
                if ( ( last = new_node(val, last) ) == NULL ){
                    fprintf(stderr, "Memory error!\n");
                    clear_list(first);
                    return NULL;
                }
            }
            else if ( found->nVal == val )
                continue;
            else if ( found == first ){
                if ( ( inserted = new_node(val, NULL) ) == NULL ){
                    fprintf(stderr, "Memory error!\n");
                    clear_list(first);
                    return NULL;
                }
                inserted->pNext = first;
                first = inserted;
            }
            else {
                for ( prev = first; prev->pNext != found; prev = prev->pNext )
                    ;
                if ( ( inserted = new_node(val, NULL) ) == NULL ){
                    fprintf(stderr, "Memory error!\n");
                    clear_list(first);
                    return NULL;
                }
                prev->pNext = inserted;
                inserted->pNext = found;
            }
        }
    }
 
    return first;
}
 
void print_list(const listnode_t * ln){
    while ( ln ){
        printf("%d\n", ln->nVal);
        ln = ln->pNext;
    }
}
 
int main(void){
    listnode_t * ln;
 
    printf("Enter some numbers, 0 = finish:\n");
    if ( ( ln = create_list() ) == NULL ){
        fprintf(stderr, "Can't create list!\n");
        exit(EXIT_FAILURE);
    }
    print_list(ln);
    clear_list(ln);
 
    exit(EXIT_SUCCESS);
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru