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

Удалить элемент из односвязного списка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти наибольшее расстояние между точками http://www.cyberforum.ru/cpp-beginners/thread432284.html
Здравствуйте. Пользователь задает координаты нескольких точек, программа должна определить, между какими точками наибольшее расстояние. На экран вывести эти две точки. Вот, что пока накалякал. #include<stdio.h> #include<iostream.h> #include<conio.h> #include<math.h>
C++ Как кодираются дробные числа в пакетах? Пытаюсь снифером ловить пакеты и доставать из них данные. В частности несколько приходящих чисел интересует. Целые числа легко находятся, а вот дробные непонятно как искать. Например есть вот такой кусок хекса: 12 14 09 48 E1 7A 14 AE 77 60 40 10 11 1A 07 08 DC CC DE 3D 10 04 1A 14 09 8F C2 F5 28 5C 77 60 40 10 Здесь точно присутствуют числа 131.74 и 131.73 (предполагаю, что где то на местах,... http://www.cyberforum.ru/cpp-beginners/thread432277.html
C++ 2 задачи на С ++ и одна задача на С++ на oснoве MFC
Вот а помогите ещё три задачи решить) Вторую задачу не надо. а по четвёртой почти всё сделал но у меня прога не считает уравнение а сразу выдают ошибку если не правильно всё. void CMy1234556Dlg::OnButton1() { if (m_C<0)
C++ Максимальный элемент двумерного массива и его положение
Всем доброго времени суток. Помогите, пожалуйста, с задачей... Инициализировать массив n x n. n вводит пользователь. Найти максимальный элемент в массиве и его положение: номер строки, номер столбца. Собственно, вот мои наработки, но не знаю как определить положение... Заранее спасибо! #include <iostream> using namespace std; int main() {
C++ Помогите разобраться с кодом http://www.cyberforum.ru/cpp-beginners/thread432248.html
Код - проверка ввода данных. Если вводиться "x6x", то вызывается исключение, правильным вводом являются только символы, например: "xxx", исключение работает правильно и после вызова исключения и исправления ошибки программа продолжает работу, а вот если исключение не вызывается т.е с первого раза вводятся правильные данные "xxx" то программа заканчивается после окончания выполнения функции...
C++ Задачка Ребят, может кто срочно решить задачу? Описать структуры, описывающие шар и точку в 3-мерном пространстве. Определить функцию, которая проверяет, находится ли точка внутри заданного шара. подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.01.2012, 12:19     Удалить элемент из односвязного списка
ТатьянаR, вот Вам работающий список с добавлением/удалением элементов и незамысловатым интерфейсом:
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct NODE {
    int val;
    struct NODE * next;
} node_t;
 
typedef struct LIST {
    node_t * first;
    node_t * last;
} list_t;
 
int addnode(list_t * list, int val){
    node_t * n;
    
    if ( ! ( n = malloc(sizeof(node_t)) ) )
        return -1;
    
    n->val = val;
    n->next = NULL;
    
    if ( list->first == NULL )
        list->first = n;
    else
        list->last->next = n;
    list->last = n;
    
    return 0;
}
 
void clearlist(list_t * list){
    while ( list->first != NULL ){
        list->last = list->first->next;
        free(list->first);
        list->first = list->last;
    }
}
 
node_t * findbyval(list_t * list, int val){
    node_t * ptr = list->first;
    
    while ( ptr != NULL && ptr->val != val )
        ptr = ptr->next;
    
    return ptr;
}
 
int delnode(list_t * list, node_t * node){
    if ( list->first == node )
        list->first = list->first->next;
    else {
        node_t * ptr;
        for ( ptr = list->first; ptr->next != NULL && ptr->next != node; ptr = ptr->next )
            ;
        if ( ptr->next == NULL )
            return -1;
        else if ( ptr->next == list->last )
            list->last = ptr;
        ptr->next = node->next;
    }
    
    free(node);
    return 0;
}
 
void dump(list_t * list){
    node_t * node;
    
    for ( node = list->first; node != NULL; node = node->next )
        printf("%d ", node->val);
    
    printf("\n");
}
 
void usage(void){
    printf("\n+ value - add to list\n- value - remove from list\np0 - print list\nh0 - this help message\nq0 - quit\n\n");
}
 
int main(void){
    list_t list = { NULL, NULL };
    int val, onoff;
    char act, tail;
    
    onoff = 1;
    usage();
    while ( onoff ){
        printf("> ");
        if ( scanf("%c%d%c", &act, &val, &tail) != 3 || tail != '\n' ){
            fprintf(stderr, "Wrong input!\n");
            break;
        }
        
        switch ( act ) {
            case '+' :
                if ( addnode(&list, val) ){
                    fprintf(stderr, "Memory error!\n");
                    exit(1);
                }
                break;
            case '-' : 
                {
                    node_t * ptr = findbyval(&list, val);
                    if ( ptr == NULL )
                        printf("Value %d not in list\n", val);
                    else if ( delnode(&list, ptr) )
                        fprintf(stderr, "Failed to removing value!\n");
                }
                break;
            case 'p' :
                dump(&list);
                break;
            case 'h' :
                usage();
                break;
            case 'q' :
                printf("See you...\n");
                onoff = 0;
                break;
            default :
                printf("Unknown action.\n");
                break;
        }
    }
    
    clearlist(&list);
    exit(0);
}
Добавлено через 4 минуты
go, есть подозрение, что будет теряться указатель на начало/конец списка. Попробуйте полную версию сделать...
 
Текущее время: 17:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru