Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление элемента из односвязного списка 
:(
    Опции темы
Vadv
Дата 22.9.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 25.3.2008

Репутация: нет
Всего: нет



Подскажите как из очереди удалить элемент?
Код

void sort(NodePtr head, NodePtr p,NodePtr tail,int N)
{
    NodePtr pSort;
    NodePtr headSort=NULL, tailSort;
    NodePtr d;//указатель  на удаляемый элемент
    int max;
    int Nk=N;
    for(int j=0;j<N;j++)
    {
        p = head;
        max=p->info;
        for(int i=0;i<Nk;i++){//ищем максимальный элемент
            if(max<p->info)
                max=p->info;
            p=p->next;
        }
        //теперь удалим найденый элемент из p.
        p = head;//вернемся в начало списка
        for(int i=0;i<Nk;i++){
            if(p->info==max)//если элемент равен максимальному удалим
                if(i==0){//если элемент стоит первым в очереди, удаление с помощьюе head
                    d = head;
                    head = head->next;
                    delete d;
                    break;
                }
                else{//иначе через p.
                    p->next = d->next;
                    delete d;
                    break;
                }
                p=p->next;
        }
        //добавим новый элемент в pSort;
        if(headSort==NULL)
        {
            headSort = new node;
            headSort->info =max;    
            headSort->next = NULL;
            tailSort = headSort;
        }
        else
        {
            pSort = new node;
            pSort->info = max;
            tailSort->next = p;        // в данном случае - NULL
            pSort->next = NULL;
            tailSort = pSort;
        }
        Nk--;
    }
    pSort=headSort;
    for (int i =0; i<N; i++)
        {
            cout << pSort->info << ' ';
            pSort = pSort->next;
        }
    cout<<endl;
}


Пишет, что 
Run-Time Check Failure #3 - The variable 'd' is being used without being defined.
PM MAIL   Вверх
IKM2007
Дата 22.9.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Ошибка в строке 28. Используешь d не определив. 
Код

p->next = d->next;



--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Vadv
Дата 22.9.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 25.3.2008

Репутация: нет
Всего: нет



а что делать когда в списке один элемент остается? У меня получается, что при удаление пред последнего элемента, последнего не остается..
PM MAIL   Вверх
IKM2007
Дата 22.9.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Для этого лучше писать отдельную приват-функцию, которая возвращает указатель на index-ный элемент.
Код

class Class
{
---
private:
NodePtr *find(int index)const;
---
};

Определение:
Код

Class::NodePtr *Be::find(int index) const
{
if(index<1||index>amount)
{    
    cout<<"return NULL: index = "<<index<<" amount = "<<amount<<endl;
return NULL;
}
else
{
NodePtr *ptr=head;
for(int i=1;i<index;i++)
ptr=ptr->next;
return ptr;
}
}

И в твоем коде.
Код

else{//иначе через p.
                    p = find(i-1);
                    d=p->next;
                    p=d->next;
                    delete d;
                    break;
                }



--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Vadv
Дата 22.9.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 25.3.2008

Репутация: нет
Всего: нет



Честно говоря, не особо понял что да как тут, да и выходит за пройденные темы, хотелсоь бы реализовать на том,что прошел. (без классов, со структурами). Но все равно спасибо большое за помощь.
А как проще можно отсортировать очередь? Я просто пошел видимо тернистым путем smile

Это сообщение отредактировал(а) Vadv - 22.9.2008, 22:14
PM MAIL   Вверх
IKM2007
Дата 22.9.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Смотри здесь.
Сортировка и поиск


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Vadv
Дата 22.9.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 25.3.2008

Репутация: нет
Всего: нет



IKM2007, алгоритм и так более менее понятен, мне не ясно ,как удалить элемент ,и на его место другой поставить... было бы идеально если бы кто кодом показал..
PM MAIL   Вверх
J0ker
Дата 23.9.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



вообще-то бабл-сорт не лучший алгоритм
quicksort намного эффективней
и параллелится легко

Это сообщение отредактировал(а) J0ker - 23.9.2008, 21:14


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0709 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.