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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Файлы. Получить значения функции , вычисленной с заданной точностью e http://www.cyberforum.ru/cpp-beginners/thread840808.html
В бинарном файле записаны вещественные числа. Получить значения функции , вычисленной с заданной точностью e, для каждого числа, имеющегося в файле.
C++ Как работает эта функция? Вот код программы крестики-нолики. Пожалуйста, объясните на пальцах как работает ф-ция "botMove". Мне нужно написать такую же, но у меня двумерный массив. Вообще непонятно как компьютер всегда правильно ходит и откуда взялось число 49. #include <iostream> #include <clocale> #include <windows.h> #include <time.h> using namespace std; char field = {'-', '-', '-', '-', '-', '-', '-', '-',... http://www.cyberforum.ru/cpp-beginners/thread840804.html
Написать программу, которая с использованием метода базовой точки выводит на экран изображение кораблика. C++
Собственно само задание. 6). Написать программу, которая с использованием метода базовой точки выводит на экран изображение кораблика.
C++ Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел.
Собственно само задание. 5). Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел.
C++ Дан символьный файл f. Записать в файл g компоненты файла f в обратном порядке http://www.cyberforum.ru/cpp-beginners/thread840775.html
Собственно само задание. 4). Дан символьный файл f. Записать в файл g компоненты файла f в обратном порядке
C++ Даны сведения о результатах сессии. Вывести список группы по убыванию общего балла. Собственно само задание. 3)Даны сведения о результатах сессии: ФИО студента, названия четырех предметов и оценки, полученные по каждому предмету. Вывести список группы по убыванию общего балла. подробнее

Показать сообщение отдельно
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
17.04.2013, 20:12     Удаление элементов в списке
Scorpiom, в удалении нужно потом сделать предыдущий последним, тогда все будет ок

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void udal(){
    if(head==0)
    {
        printf("Spisok pust\n"); return; 
    };
    List* t, t1;
    t=head;
    while(t->next!=tail){
        t1 = t;
        t=t->next;
    }
    tail=t;
    t->next=NULL;
    delete tail;
    tail = t1;
 
    printf("element udalen\n");
};
Добавлено через 29 минут
Scorpiom, и вот то, что просил, тут 2 функцию, первая удаляет конкретный элемент, она проверяет 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
void delList(List *Ptr)
        {
            List *tmp = Head;
            List *cur = NULL;
 
            if(Head != NULL)
            {
                if(Head == Ptr)                 //если удаляем 1 элемент
                {
                    cur = Head -> next;
                    delete Head;
                    Head = cur;
                }
                else
                {
                    while((tmp != NULL) && tmp != Ptr)
                    {
                        cur = tmp;
                        tmp = tmp -> next;
                    }
 
                    if(tmp -> next == NULL)                 //если элемент между
                    {                                       //1 и последним
                        delete tmp;
                        cur -> next = NULL;
                    }
                    else                                    //если элемент последний
                    {
                        cur -> next = tmp -> next;
                        delete tmp;
                    }
                }
            }
        }
 
        void udal_N_K(int N, int K){
 
            int number(1);                  
            List* t(Head), *t1(NULL);       
 
            while(t -> next != NULL && number != N){
                t1 = t;
                t = t -> next;
                ++number;
            }
 
            t = t1;
            while(t -> next != NULL && number != (K + 1)){
                t1 = t;
                t = t -> next;
                delList(t);
                t = t1;
                ++number;
            }
        };
проверку на соответствие значений промежутка количеству элементов списка уже сам сделаешь, единственное дам совет, кол-во элементов лучше подсчитывать сразу при добавлении каждого нового, чем потом проходить по списку еще раз, пустая трата времени, и не забудь уменьшать кол-во при удалении
 
Текущее время: 04:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru