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

Удаление четных и отрицательных элементов (списки) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Процедуры и функции http://www.cyberforum.ru/cpp-beginners/thread581745.html
Два простых числа называются ,,близнецами,, если они отличаются друг от друга на 2 (например 41 и 43). Напечатать все пары ,,близнецов,, из отрезка , где n-заданное натуральное число больше 2. Только нужно обязательно через функцию решить.
C++ Двунаправленный линейный список удалить 2е вхождение элемента вот кусок кода char s;int i; cin>>s; p=list->right; if (seeklist (list,s,p,i)) { int k=1; p=p->right; do { if (p->dat==s) http://www.cyberforum.ru/cpp-beginners/thread581742.html
C++ Ввод исходной информации и вывод результатов организовать в функции main()
Ввести строку символов. Закодировать ее (изменить код символа на 3). Шифрование оформить в виде функции пользователя, передав введенный массив символов как аргумент. Ввод исходной информации и вывод результатов организовать в функции main(). помогите пожалуйста написать программу
Найти элемент массива с максимальной суммой делителей C++
Помогите пожалуйста Дан целочисленный массив A.Найти элемент массива с максимальной суммой делителей. Вывести на экран значение найденного элемента и его порядковый номер в массиве
C++ Сборка загрузочного модуля http://www.cyberforum.ru/cpp-beginners/thread581727.html
задание звучит так: "Сборка загрузочного модуля из двух с помощью интерфейса командной строки". Не могу понять что от меня требуется... не прошу писать программы, просто если не сложно объясните что это???? т.е. у нас есть два отдельных скомпилированных файла(что логично для загрузочного) и мы шаманим в командной строке, или нужно изменить сам текст программ?
C++ Как компилировать программу C++ или код в бинарник (что бы запускался без участия ОС) Помогите пожалуйста как компилировать прогу написанную на с++ или код в бинарник (что бы запускался без участия ОС) И сразу второй вопрос что лучще делать сервер на апаче или по средствам виндовс. подробнее

Показать сообщение отдельно
rakota
35 / 35 / 1
Регистрация: 05.02.2012
Сообщений: 76
22.05.2012, 20:40     Удаление четных и отрицательных элементов (списки)
Собственно, я немного доработал ваш код. Увы, не смог обойтись без <utility> и объекта pair, но можно как-то и без них обойтись, наверно.
Собственно ваша структура (тут ничего не изменилось)

C++
1
2
3
4
5
struct tElem
{
    int value;
    tElem *next,*prev;
};

Вывод

C++
1
2
3
4
5
6
7
8
9
void print (tElem *t)
{
    tElem* k = t;
    while(k)
    {
        cout<<k->value<<' ';
        k=k->next;
    }
}

Создание списка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
tElem* create_list(tElem* t, ifstream &f)
{
    tElem* temp;
    temp = t;
    temp = new tElem;
    f >> temp->value;
    temp->prev=NULL;
    tElem* r = temp;
    while(!f.eof())
    {
        temp->next=new tElem;
        temp->next->prev=temp;
        f >> temp->next->value;
        temp=temp->next;
    }
    temp->next = NULL;
    return r;
}

Реализация удаления таких-то чисел

Тут скорее всего возникнут вопросы. Спрашивайте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
pair<tElem*,bool> _delete_smt(tElem *t)
{
    tElem *a=t;
    if ((a->value % 2) == 0 && (a->value)<0)
    {
        a->next->prev=a->prev;
        a->prev->next=a->next;
        tElem* m = a;
        return make_pair(m,1);
    }
    return make_pair(a,0);
}

Собственно удаление всех чисел по критерию

C++
1
2
3
4
5
6
7
8
9
10
void delete_smt(tElem *t)
{
    tElem* temp = t;
    while (temp)
    {
        pair<tElem*,bool> n = _delete_smt(temp);
        temp=temp->next;
        if(n.second) delete n.first;
    }
}

Очистка памяти

Обязательно удаляйте список после использования с помощью этой функции!
C++
1
2
3
4
5
6
7
8
9
10
void clear(tElem* t)
{
    tElem* temp = t->next, *t2 = t;
    while(temp)
    {
        delete t2;
        t2 = temp;
        temp = t2->next;
    }
}

main()

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    ifstream f("input.txt");
    if(!f) {cout << "fail!"; return 1;}
    tElem *list = NULL;
    list = create_list(list,f);
    print(list);
    delete_smt(list);
    print(list);
    clear(list);
    return 0;
}

Надеюсь, что всё правильно скопировал. Также я бы очень вам рекомендовал в дальнейшем оформить программу с помощью классов и ООП. Но это так, пожелание
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru