Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2015, 15:16   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию С,С++, как удалить элемент списка?

Ребят, всем привет, есть список чисел, вопрос в том, как из него удалить все отрицательные элементы?

пробовал delete spis2, но элемент списка не удаляется.


вот отрывок кода, где удаление и вывод чисел с отрицательными элементами

Код:
    spis2=head2;
    while(spis2)
    {
        ui->textEdit->append(QString("%1").arg(spis2->numeric));
       if (spis2->numeric<0)  delete spis2;

        spis2=spis2->next;

    }
а вот часть 2, где список должен оказаться без отрицательных элементов

в итоге на месте отрицательных элементов остается такое число:370135848, а положительное, естественно выводится так, как оно должно и быть.


Код:
 spis2=head2;

    while(spis2)
    {
        ui->textEdit->append(QString("%1").arg(spis2->numeric));

        spis2=spis2->next;


    }

вот полный код

Код:
struct spisok
{
    int numeric;
    spisok *next;
};



void MainWindow::on_pushButton_clicked()
{

    spisok *head=NULL, *head1=NULL, *head2=NULL,
            *inputnewspisok=NULL,*spis1=NULL,*spis2=NULL;


    ui->textEdit->clear();

    int j=ui->lineEdit->text().toInt(),chislo=0,count=0;
    if (j==0) j=10;


    srand(time(NULL));


    ui->textEdit->append(QString("Исходный список:"));

    for (int i=0;i<j;i++)
    {   chislo=rand()%1000-500;//chislo = rand() % 253 - 126;


        //пока число вне диапозона-генерируем новое
        while (chislo>126||chislo<-126)
        {
            chislo=rand()%1000-500;
            count++;//сколько раз число вне диапозона
        }




        //заполняем исходный список
        inputnewspisok=new spisok;
        inputnewspisok->numeric=chislo;
        ui->textEdit->append(QString("%1;").arg(inputnewspisok->numeric));





        if (chislo % 2 == 0)
        {
            if (head1 == NULL)
            {
                head1 = spis1 = new spisok;
                head1->numeric = chislo;
                head1->next = NULL;
            }
            else
                if (chislo > spis1->numeric)
                {
                    spis1->next = new spisok;
                    spis1 = spis1->next;
                    spis1->numeric = chislo;
                    spis1->next = NULL;
                }
        } else
        {
            if (head2 == NULL)
            {
                head2 = spis2 = new spisok;
                head2->numeric = chislo;
                head2->next = NULL;
            }
            else
                if (chislo < spis2->numeric)
                {
                    spis2->next = new spisok;
                    spis2 = spis2->next;
                    spis2->numeric = chislo;
                    spis2->next = NULL;
                }
        }

        delete inputnewspisok;
        inputnewspisok->next=head;
        head=  inputnewspisok;

    }



    //вывод

    ui->textEdit->append(QString("\nЧисло вне диапозона появлялось: %1\n\nРезультат списка 1:").arg(count));
    spis1=head1;
    while(spis1)
    {
        ui->textEdit->append(QString("%1").arg(spis1->numeric));
      delete spis1;
        spis1=spis1->next;


    }

    ui->textEdit->append(QString("\n\nРезультат списка 2:").arg(count));


    spis2=head2;
    while(spis2)
    {
        ui->textEdit->append(QString("%1").arg(spis2->numeric));
       if (spis2->numeric<0)  delete spis2;

        spis2=spis2->next;

    }


    ui->textEdit->append(QString("\nБез отрицательных езультат списка 1:"));

    spis2=head2;

    while(spis2)
    {
        ui->textEdit->append(QString("%1").arg(spis2->numeric));

        spis2=spis2->next;


    }



}
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 10.06.2015, 15:41   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Кто ж так удаляет? Ну лень вам почитать что-нибудь, посмотрите как создаете список или нарисуйте его на листочке... указатели кто будет переставлять перед удалением?
p51x вне форума Ответить с цитированием
Старый 10.06.2015, 15:52   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А как это делается?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 10.06.2015, 16:27   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

1. Берете листок бумаги
2. Рисуете список (если не знаете, что это такое - смотрите вики или любую книжку)
3. Предполагаете, что удаляете елемент между двумя
4. Смотрите какие указатели надо изменить перед удалением
5. Меняете
6. Удаляете
p51x вне форума Ответить с цитированием
Старый 11.06.2015, 07:42   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
ui->textEdit->clear();
    items *i=0, *prev=0;
    i=head;
    prev=head;
    while(i)
    {
        if(i->spisok_slov[0]=='k'||i->spisok_slov[0]=='K'||
                i->spisok_slov[0]=='К'||i->spisok_slov[0]=='к')

        {
            if(prev)
            { //Если не начало списка
                prev->next=i->next; //Пересцепка
                delete i;
                i=prev->next;
            }
            else
            { //Если начало списка
                prev=i;
                i=i->next;
                delete prev;
            }
        }
        else {
            prev=i->next;
            i=i->next;
        }
    }
    prev=head;
    while(prev)
    {ui->textEdit->append(QString("%1").arg(prev->spisok_slov));
        prev=prev->next;
    }
все равно не удаляется:D

все слова типа string, начинающиеся на К как русскую, так и латинскую
from dark to light)

Последний раз редактировалось Stilet; 11.06.2015 в 10:37.
Алексей_2012 вне форума Ответить с цитированием
Старый 11.06.2015, 10:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Рекомендую к ознакомлению: http://www.programmersforum.ru/showp...8&postcount=25
Обрати внимание на функцию del()
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удалить последний элемент из списка.ООП-Классы Otar4ik Помощь студентам 1 02.02.2014 22:36
Удалить элемент списка KatCH Общие вопросы по Java, Java SE, Kotlin 7 01.02.2013 16:13
как удалить n-ый элемент вектора? Tiva Помощь студентам 1 09.11.2012 20:28
TComponent как элемент списка блюд m91da Помощь студентам 1 25.11.2010 20:16
помогите удалить элемент из связанного списка kermit Помощь студентам 5 13.06.2008 10:14