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

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

Войти
Регистрация
Восстановить пароль
 
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
#1

Добавление и удаление элементов из двусвязного списка - C++

18.12.2013, 23:36. Просмотров 1243. Ответов 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
32
33
34
35
36
37
38
struct st {
    int n;                      //полезные данные
    st* next,prev;              //указатели на предыдущий и следующий элементы
};
 
class list {
    st* head;                   //начало списка
    st* tail;                   //конец списка
    int size,max_size;          //количество элементов и максимально возможное
public:
    void Add(int x) {
        if (size<max_size) {
            st* temp=new st;    //новый элемент
            temp->n=x;          //запись данных в новый элемент
            st* p=new st;       //хранилище под старый последний элемент
            p=tail;             //запись старого последнего в хранилище
            tail=temp;          //хвост указывает на новый элемент
            tail->next=NULL;    
            tail->prev=p;       
            size++;
        }
    }
    void Clear() {              //неправильно?? в памяти останется мусор?
        Head=Tail=NULL;
        size=0;
    }
    
    void Del() {
        st* temp=new st;        //хранилище под текущий хвост
        tail=tail->prev;        //перенос хвоста на предпоследний элемент
        delete temp;            //удаление хранилища
        size--;
    }
    void Clear() {              //теперь правильно?
        while (tail!=NULL)
            Del();
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2013, 23:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Добавление и удаление элементов из двусвязного списка (C++):

Добавление в конец двусвязного списка - C++
Помогите найти ошибку в коде: не работает добавление в конец. Список формируется добавлением в начало! Функция добавления: ...

Удаление элемента из двусвязного списка - C++
Помогите пожалуйста найти где я ошибся. Элементы в список добавляются, вывод на экран тоже работает, но после удаления любого элемента:...

Удаление элемента из двусвязного списка - C++
Надо удалить элемент из двусвязного списка, если выполняется условие (2013-(current-&gt;god)&lt;3). Я пытаюсь как могу, но что то все равно...

Удаление элемента из двусвязного списка - C++
Доброго всем времени суток. Нужна помощь. Есть двусвязный список. Функции передаем какое то число(номер элемента) предыдущий...

Удаление из двусвязного циклического списка - C++
Начал реализовывать структуру данных - Фибоначчиевы кучи. Столкнулся с проблемой при написании функции удаления минимального элемента....

Удаление элемента из двусвязного списка - C++
Собственно, в коде все рабочее, кроме удаления. После ввода элемента выдает ошибку 0xC0000005. Где-то напутал с выделением памяти? ...

3
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
19.12.2013, 00:08 #2
На мой неопытный взгляд ошибок так много, что их можно долго перечислять. Начиная от стилистических(вроде название класса с маленькой буквы, названия методов с большой, объявления нескольких переменных на одной строке, неинформативные имена переменных), кончая логическими, код которых надо не исправлять, а просто стирать и писать с нуля. Вы хоть компилировать это пробовали?
Советую вначале разобраться что такое указатели и как ими пользоваться прежде чем начинать работу со списками. Похоже вы не понимаете, что при объявлении указателя не обязательно присваивать ему новую, свежевыделенную память
0
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
19.12.2013, 00:14  [ТС] #3
Цитата Сообщение от Buckstabue Посмотреть сообщение
Похоже вы не понимаете, что при объявлении указателя не обязательно присваивать ему новую, свежевыделенную память
это я как раз понимаю. я выделяю память что б связь не пропала
стилистические ошибки меня сейчас слабо волнуют, а вот по части логических если есть что добавить-пожалуйста=)
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
19.12.2013, 00:25 #4
Самое простое: у вас банально нет проверки на пустоту списка. Если список пуст, то несколько меняется алгоритм добавления элемента.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2013, 00:25
Привет! Вот еще темы с ответами:

Удаление структуры из двусвязного списка - C++
Доброго времени суток! Пытаюсь создать функцию удаления из списка структуры, не выполняется цикл while в функции del() в чем я не прав? ...

Добавление и удаление элементов в середину списка - C++
Доброго всем времени суток!! Есть прога добавления и удаления элементов в списке, из начала, конца. А вот с серединой что-то туговато.. Кто...

Удаление и добавление элементов однонаправленного списка - C++
Здравствуйте уважаемые гуру. Хотелось бы попросить вашей помощи в данном задании: Записи в линейном списке содержат ключевое поле типа...

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


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
19.12.2013, 00:25
Ответ Создать тему
Опции темы

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