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

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

Восстановить пароль Регистрация
 
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
18.12.2013, 23:36     Добавление и удаление элементов из двусвязного списка #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
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();
    }
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
19.12.2013, 00:08     Добавление и удаление элементов из двусвязного списка #2
На мой неопытный взгляд ошибок так много, что их можно долго перечислять. Начиная от стилистических(вроде название класса с маленькой буквы, названия методов с большой, объявления нескольких переменных на одной строке, неинформативные имена переменных), кончая логическими, код которых надо не исправлять, а просто стирать и писать с нуля. Вы хоть компилировать это пробовали?
Советую вначале разобраться что такое указатели и как ими пользоваться прежде чем начинать работу со списками. Похоже вы не понимаете, что при объявлении указателя не обязательно присваивать ему новую, свежевыделенную память
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
19.12.2013, 00:14  [ТС]     Добавление и удаление элементов из двусвязного списка #3
Цитата Сообщение от Buckstabue Посмотреть сообщение
Похоже вы не понимаете, что при объявлении указателя не обязательно присваивать ему новую, свежевыделенную память
это я как раз понимаю. я выделяю память что б связь не пропала
стилистические ошибки меня сейчас слабо волнуют, а вот по части логических если есть что добавить-пожалуйста=)
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
19.12.2013, 00:25     Добавление и удаление элементов из двусвязного списка #4
Самое простое: у вас банально нет проверки на пустоту списка. Если список пуст, то несколько меняется алгоритм добавления элемента.
Yandex
Объявления
19.12.2013, 00:25     Добавление и удаление элементов из двусвязного списка
Ответ Создать тему
Опции темы

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