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

Удаление структуры из двусвязного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ visual studio 2012 не позволяет смотреть результат программы http://www.cyberforum.ru/cpp-beginners/thread1082801.html
Доброго времени суток, может быть, я не правильно сформулировал свою проблему, но смысл в том что смотреть результат программы, можно лупившись в окошко http://rghost.ru/51965024
C++ Изменить "прогон" массивов Здравствуйте. Задание по сортировке. Преподаватель, сказал, что моя программа сортирует одинаковый массив. Нужно сделать так, чтобы программа сортировал 10000 разных массивов. Программа ниже. #include "StdAfx.h" #include <iostream> #include <locale.h> #include <conio.h> #include <stdio.h> /* printf */ #include <time.h> /* clock_t, clock, CLOCKS_PER_SEC */ http://www.cyberforum.ru/cpp-beginners/thread1082793.html
Напишите программу, которая удаляет из слова X все буквы, которые встречаютьс в слове Z C++
Программа работает не правильно:( не могу понять как удалить буквы. #include <stdio.h> #include <conio.h> #include <iostream> int main() { int i,j; char mas1; char mas2;
Функция: определить, сколько раз заданное число встречается в массиве C++
Помогите, пожалуйста. Написать программу с функцией, которая определяет, сколько раз заданное число встречается в массиве.
C++ Ошибка с условиями http://www.cyberforum.ru/cpp-beginners/thread1082766.html
Проблемы с else{}оно выскакивает не тогда когда нужно. cin.ignore() не помог,хотя в похожей ситуации он пригодился. Из-за не знания я в тупике. #include <iostream> #include <locale.h> #include "std_lib_facilities.h" using namespace std; int main(){
C++ Среднее арифметическое положительных элементов массива, произведение и количество отрицательных элементов в массиве X найти среднее арифметическое положительных элементов массива, произведение и кол-во отрицательных элементов массива. подробнее

Показать сообщение отдельно
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
04.02.2014, 12:56     Удаление структуры из двусвязного списка
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
void del()   // udalenie zapisi
{
spis *temp, *p=head; // vvodim vremennuu peremenuu temp, nugna dla udalenia tekushei strukturi, p=head - na nachalo spiska.
    int g;
        clrscr();
    printf("\n Vvedite god:");
    scanf("%10d",&g);
    printf("\n Delete zapisi menshim godom ");
 
    do{
        if(p->year<=g)  // esli nashli zapis
...

Вот так делать нельзя. Если в списке нет элементов схватите краш. У вас нет проверки, что указатель p не ссылается на ноль.
Вот этот блок:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  else if (p->prev==NULL) //esli zapis pervaya 
            {
                head=p->next;
                p->next->prev=NULL;
 
            }
            else if (p->next==NULL)  //esli zapis poslednaya
            {
                tail=p->prev;
                p->prev->next=NULL;
 
            }
            else  // udalaem zapis iz serediny
            {
                p->prev->next=p->next; // v predydushei i posleduyshey strukturah mi perepisyvaem ukazateli
                p->next->prev=p->prev; //  drug na druga minuy tekushuu
 
            }

Я бы переписал вот так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
           
if (p->prev==NULL) //esli zapis pervaya 
{
        head=p->next;
        p->next->prev=NULL;
}
if (p->next==NULL)  //esli zapis poslednaya
{
    tail=p->prev;
    p->prev->next=NULL;
}
if ((p->prev !=NULL)
&& (p->next != NULL))   // udalaem zapis iz serediny
{
    p->prev->next=p->next; // v predydushei i posleduyshey strukturah mi perepisyvaem ukazateli
    p->next->prev=p->prev; //  drug na druga minuy tekushuu
}

Это не принципиально однако так легче понять код. Мое мнение.

Вот здесь:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
if(...)
{
...
            temp=p;
            p=p->next;
            free(temp); // osvobogdaem pamat
        }
        else{
        p=p->next;  // perehodim k sleduushemu elementu
        }

Не грамотно использовать один и тот же код дважды. Может лучше так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
    if(...)
    {
    ...
        temp=p;
 
    }
p=p->next;  // perehodim k sleduushemu elementu
if (temp != NULL)
            free(temp); // osvobogdaem pamat
}
 
Текущее время: 03:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru