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

Односвязный список: удалить первый элемент - C++

Восстановить пароль Регистрация
 
Енер
-31 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 38
27.05.2014, 15:16     Односвязный список: удалить первый элемент #1
День добрый уважаемые знатоки, начал разбираться с реализацией односвязных списков, вроде бы все как надо, но проблема в том что я не могу удалить первый узел в списке, почему удалить не могу я знаю, удаление происходит с посланием на предыдущий узел, а так как у первого узла нету предыдущего нужно сделать второй узел первый, и удалить бывший первый, сам процесс я понимаю, а вот реализовать не могу. Помогите пожалуйста, буду очень благодарен. Ниже приведу функцию удаления:
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
void CMyList::Delete(int num)
{
    int thisn=1;
    if(!(MoveToFirstSok()))
        cout<<Rus("Список пустой!\n");
    if((SokCount<num)||(SokCount<0)) cout<<Rus("Такого сока нет\n");
    else
    {
        while(GetCurSok())
        {
            if(num==thisn)  
            {
                Temp=GetCurSok();
                break;
            }
            else 
            {
                thisn++;
                MoveToNextSok();
            }
        }
    }
    MoveToFirstSok();
    for(int i=1;i<num-1;i++) MoveToNextSok();
    GetCurSok()->setNextSok(Temp->getNextSok());
    delete Temp;
    cout<<endl;
}
Очень нуждаюсь в вашей помощи.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2014, 15:16     Односвязный список: удалить первый элемент
Посмотрите здесь:

Односвязный список добавить и удалить элемент C++
Создать динамический список. Удалить из него первый и последний элемент. C++
C++ Доработка структуры (удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером)
Структура "Информация": - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить элемент перед элемент C++
C++ Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
27.05.2014, 15:22     Односвязный список: удалить первый элемент #2
В этой мешанине функций ничего не разобрать)
Механизм примерно такой:
C++
1
2
3
node* temp = first;
first = first->next;
delete temp;
Енер
-31 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 38
27.05.2014, 15:42  [ТС]     Односвязный список: удалить первый элемент #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
void CMyList::Delete(int num)
{
    int thisn=1;
    if(!(MoveToFirstSok()))
        cout<<Rus("Список пустой!\n");
    if((SokCount<num)||(SokCount<0)) cout<<Rus("Такого сока нет\n");
    else
    {
        while(GetCurSok())
        {
            if(num==thisn)  
            {
                Temp=GetCurSok();
                break;
            }
            else 
            {
                thisn++;
                MoveToNextSok();
            }
        }
    }
    MoveToFirstSok();
    node* Temp = First;
    First = First->Next;
    //delete Temp;
    for(int i=1;i<num-1;i++) MoveToNextSok();
    GetCurSok()->setNextSok(Temp->getNextSok());
    delete Temp;
    cout<<endl;
}
не совсем понимаю что такое node*, пишет что

1>c:\Sok\mylist.cpp(123) : error C2065: 'node' : undeclared identifier

не объявлена переменная.

И наверное два раза удалять Temp не нужно))
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
27.05.2014, 16:26     Односвязный список: удалить первый элемент #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну конечно, я ж тебе не готовый код привел, а схему. Я не видел весь твой класс, хз как у тебя там все называется и устроено - одной функции, причем как будто специально настолько запутанной -явно мало. Куча каких-то левых функций(насколько я понял, тут не просто односвязный список=)).

В схеме - node* - узел списка, first - 'голова' этого списка. Адаптируй под свой класс, и все.
Енер
-31 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 38
27.05.2014, 21:51  [ТС]     Односвязный список: удалить первый элемент #5
Огромное спасибо, очень помогло )
Yandex
Объявления
27.05.2014, 21:51     Односвязный список: удалить первый элемент
Ответ Создать тему
Опции темы

Текущее время: 16:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru