Форум программистов, компьютерный форум 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-мерном пространстве. Определить функцию, которая проверяет, находится ли точка внутри заданного шара. подробнее

Показать сообщение отдельно
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
23.01.2012, 19:55
Цитата Сообщение от easybudda Посмотреть сообщение
на попытке удалить несуществующий элемент валится,
Торопился. И не пробовал. Перед 36 строчкой вставить это
C++
1
2
        if ( !buf->next )
            exit(1);


Хотя если честно, то здесь (в моем коде) необходимо хранить ссылку на удаляемый элемент в виде
C++
1
2
3
4
list *node; // Звено перед удаляемым
list* &del = node->next // для первого list* &del = first;
// т.е.
list* &del = search(first, 1); // как-то так
что тоже является ухитрением, но del указатель на удаляемый элемент, а как мы его нашли не имеет значение (указатели ведь искать надо, а не с потолка брать)
Полный, исправленный, код.
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
#include <iostream>
 
typedef struct list_ {
        int key;
        struct list_* next;
} list;
 
void push(list* &first, int key) // Длюавление в конец, параметр - ссылка на певый узел, и ключ
{
        list *t = new list;
        t->key = key;
        t->next = NULL;
        
        if ( !first )   // Список еще не создан
                first = t;
        else
        {
                list *buf = first;
                while ( buf->next && (buf = buf->next) );
                buf->next = t;
        }
}
 
list* &search(list* &first, int key) // Поиск, параметр - ссылка на певый узел, и ключ  
{
        static list* &t = first;
        t = first;
        static list *buf = first; 
        buf = first;
        if ( !first )
                exit (1);
        if ( first->key == key)
                return t;       
        while ( buf && (buf->next) && (buf->next->key != key) )
                buf = buf->next;
    if ( !buf->next )
        exit(1);
        if ( buf->next->key == key )
                return buf->next;
        else
                exit(1);
}
 
void del_node(list* &node) { // Передаем указатель  предыдущего звена, на это
        list* t;
        if ( t = node->next ) {
                node->key = node->next->key; // Или все скопировать с помощью memcpy
                node->next = node->next->next;
                delete t;
        }
        else { // Если этот узел последний
                delete node;
                node = NULL;
        }
}
        
void print(list *first)
{
        while ( first )
        {
                std::cout << first->key << " ";
                first = first->next;
        }
        std::cout << std::endl;
}
        
int main()
{
        list *first = NULL;
        
        //----------------------------------------------
        push(first, 1);
        push(first, 2);
        push(first, 3);
        push(first, 4);
        push(first, 5);
        push(first, 6);
        //-----------------------------------------------
        print(first);
        del_node(search(first, 6));
        print(first); 
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru