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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Енер
-30 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 50
#1

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

27.05.2014, 15:16. Просмотров 406. Ответов 4
Метки нет (Все метки)

День добрый уважаемые знатоки, начал разбираться с реализацией односвязных списков, вроде бы все как надо, но проблема в том что я не могу удалить первый узел в списке, почему удалить не могу я знаю, удаление происходит с посланием на предыдущий узел, а так как у первого узла нету предыдущего нужно сделать второй узел первый, и удалить бывший первый, сам процесс я понимаю, а вот реализовать не могу. Помогите пожалуйста, буду очень благодарен. Ниже приведу функцию удаления:
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++
Удаление элемента происходит правильно а вот с добавлением чтото не то.....вроде вставляет в конец списка но не то...... и как сделать так...

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

Создать динамический список. Удалить из него первый и последний элемент. - C++
Список. есть пример программы: Создать динамический список. Удалить из него первый и последний элемент. #include &lt;iostream.h&gt; ...

Вставить элемент в односвязный список - C++
Есть у меня такой код: Node *pv = new Node; //Node *b; char symbol; pv = head; valcount++; if (pv-&gt;item == 'A') { ...

односвязный список не вставляет последний элемент - C++
крашит при вставке последнего( с остальными вроде все норм #include&lt;iostream&gt; using namespace std; struct A { int key; }; ...

В односвязный список добавляется последний нулевой элемент - C++
Здравствуйте, такая проблема, почему-то в список добавляется последний нулевой элемент, в чем может быть трабл ? скрин Вот...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
27.05.2014, 15:22     Односвязный список: удалить первый элемент #2
В этой мешанине функций ничего не разобрать)
Механизм примерно такой:
C++
1
2
3
node* temp = first;
first = first->next;
delete temp;
Енер
-30 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 50
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
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
27.05.2014, 16:26     Односвязный список: удалить первый элемент #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну конечно, я ж тебе не готовый код привел, а схему. Я не видел весь твой класс, хз как у тебя там все называется и устроено - одной функции, причем как будто специально настолько запутанной -явно мало. Куча каких-то левых функций(насколько я понял, тут не просто односвязный список=)).

В схеме - node* - узел списка, first - 'голова' этого списка. Адаптируй под свой класс, и все.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2014, 21:51     Односвязный список: удалить первый элемент
Еще ссылки по теме:

Кольцевой односвязный список, удалить из него все отрицательные числа - C++
Здравствуйте, необходимо решить проблему в задаче: &quot;Сформулируйте кольцевой список с вещественным информационным полем и удалите из него...

В односвязный список записывается только один элемент вместо нескольких - C++
Мне нужно, чтобы в односвязный список записывалось сразу несколько элементов, но вместо этого записывается только один. Подскажите, как...

Создать односвязный список из последовательности чисел, удалить из него все простые числа - C++
Прошу помощи, не могу понять в чем ошибка, надо создать односвязный список из последовательности чисел, удалить из него все простые числа. ...

Проверить, упорядочены ли элементы, заменить первый нулевой элемент и удалить указанный элемент из массива - C++
Найти произведение отрицательных элементов массива, следующих после первого положительного элемента. Если по какой-либо причине вычислить...

Односвязный список. Подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка - C++
Помогите, плиз доработать функцию summ - она должна подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка. ...

Удалить первый элемент списка - C++
Подскажите пожалуйста!!! Как сделать так чтобы в этой программе происходило удаление элемента первого в списке??? В этой программе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Енер
-30 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 50
27.05.2014, 21:51  [ТС]     Односвязный список: удалить первый элемент #5
Огромное спасибо, очень помогло )
Yandex
Объявления
27.05.2014, 21:51     Односвязный список: удалить первый элемент
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru