Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Литература по Visual C++ https://www.cyberforum.ru/ cpp-beginners/ thread160244.html
Доброго времени суток. 1. Подскажите пожалуйста хорошую книжку по Visual C++ класса - "от А до Я" среда VS. что бы в ней было описание всех формочек, кнопочек до сети и графики и тд. 2....
Цикл for и 56 карт C++
Выводит 14! карт в каждой строке. Я не понял как это получается. // 7_6.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <cstdlib>...
Печать слова копейка в согласованном падеже C++
какая для целого числа печатает слово копейка в согласованном падеже.
C++ Не могу понять в чем ошибка: реализация односвязного списка #include <iostream> using namespace std; struct list { int key; list *next; }; void addList(list *start); https://www.cyberforum.ru/ cpp-beginners/ thread160183.html
C++ Функция, определяющая достижение начала файла: есть ли такая? https://www.cyberforum.ru/ cpp-beginners/ thread160173.html
Собственно мне нужна функция, проверяющая достижение начала файла, типа feof только наоборот. Гуглил, ничего не нашел =(
Есть исходники браузера? C++
Есть у кого-нибудь исходники браузера? П.С.Администрации сделайте в каждом разделе форума чат, примерно для таких вопросов. Добавлено через 6 минут П.С. Исходники нужны на чистом Си
Вычислить произведение ряда C++
Господа,нужна помощь. Кому не лень,не трудно,помогите чем могите. Собственно вот: Блок А 1. В области 12 районов. Известны количество жителей каждого района ( в тысячах человек) и плотность...
C++ Непонятная операция Всем доброго времени суток! Помогите разобраться, ранее не встречал: Есть enum Sute {clubs,diamonds,hearts,spades} в main() мы создаем колоду карт и заполняем. Так вот при заполнении в цикле есть... https://www.cyberforum.ru/ cpp-beginners/ thread160112.html
C++ Закрывается программа https://www.cyberforum.ru/ cpp-beginners/ thread160092.html
После запуска откомпилированной программы я её запускаю и окно программы сразу закрывается (пользуюсь компилятором Code::Blocks) как можно это исправить
C++ Вопрос насчёт рекурсии в цикле Здравствуйте. У меня вопрос насчёт рекурсии в цикле. Вот пример: int massiv={1,2,3}; int heapPermute(int n){ cout <<"В начале n=" <<n <<' '; int temp=0; int razmer =... https://www.cyberforum.ru/ cpp-beginners/ thread160071.html
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10859 / 6734 / 1618
Регистрация: 25.07.2009
Сообщений: 12,476
19.08.2010, 17:38 0

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

19.08.2010, 17:38. Просмотров 2819. Ответов 8
Метки (Все метки)

Ответ

Цитата Сообщение от 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2010, 17:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Добавление узла перед заданным в односвязном списке
Вот такой код я нашел, но он похоже с ошибками, нету * как минимум. проставил их но тоже не помогло...

Удаление повторяющихся элементов в односвязном списке
Добрый день! Задание такое: построить линейный список из нескольких динамических переменных,...

Удаление всех вхождений элемента Х в односвязном списке L
Доброй ночи. Ситуация HELP, ситуация SOS. Есть задача &quot;Написать программу удаление всех...

Как можно сместить ID в односвязном списке после удаление элемента
народ можете подсказать как можно сместить айди в односвязном списке послу удаление элемента, на...

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