Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774

Коструктор в списке

24.11.2015, 07:16. Показов 608. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Извините что неуч и спрашиваю дебильные вопросы. Вот к примеру: обыкновенный двусвязный список,
хочу перегрузить конструктор, что бы не следить постоянно за head->prev и tail->next. В моем коде вариант с моим перегруженным конструктором и вызовом его в Add, за комментирован(по причине шо нэ работает).
Подскажите на счет реализации этой моей "идеи".
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include<iostream>
using namespace std;
struct Node
{
    Node*next,*prev;
    int x;
};
class List
{
    Node*head, *tail;
public:
    List() :head(NULL),tail(NULL) {};
    List(Node*, Node*) { 
        head->prev=NULL; 
        tail->next=NULL; 
        cout << "created" << endl;
    };
    ~List();
    void Add(int x);
    void Show();
};
List::~List()
{
    tail = head->next;
    delete head;
    head = head->next;
}
void List::Add(int x)
{
    Node*temp = new Node;
    temp->next = NULL;
    temp->x = x;
    if (head != NULL)
    {
        tail->next = temp;
        temp->prev = tail;
        tail = temp;
    }   
    else
    {
        temp->prev = NULL;
        head = tail = temp;
    }
    //List(head, tail);
}
void List::Show()
{
    if (head == NULL)
    {
        cout << "List is empty" << endl;
        exit(1);
    }
    else
    {
        Node*temp = head;
        while (temp)
        {
            cout << temp->x << "-->";
            temp = temp->next;
        }
        cout << "NULL\n\n";
    }
}
int main()
{
    List lst;
    lst.Add(10);
    lst.Add(20);
    lst.Add(30);
    lst.Add(40);
    lst.Add(50);
    lst.Add(60);
    lst.Show();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.11.2015, 07:16
Ответы с готовыми решениями:

Не объявляется коструктор и деструктор
компилятор mingw32-g++ среда: CodeBlocks. Изучаю самостоятельно тему и есть ошибки недостающих строк. Уважаемое сообщество, прошу...

Передача текста в коструктор
При передаче текста в конструктор пишет что нет типа const char. Можно ли как то это преобразовать в string class Film { private: ...

Посчитать количество атомов в многоуровневом списке (в списке со вложенными списками)
Здравствуйте! Нужно написать программу, которая бы вычисляла, сколько всего атомов в списке (списочной структуре), в том числе во...

10
76 / 50 / 26
Регистрация: 22.02.2015
Сообщений: 306
24.11.2015, 07:29
Почему бы не просто:
C++
1
2
3
4
5
6
7
List(){
head = new Node();
head = NULL;
list = new Node();
list = NULL;
}
//и ещё добавить конструкторы в структуру...
1
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
24.11.2015, 07:35  [ТС]
DUMP,
Точно можно просто проинициализировать в структуре!!! Мое почтение!
Цитата Сообщение от DUMP Посмотреть сообщение
head = new Node();
и это
Цитата Сообщение от DUMP Посмотреть сообщение
head = NULL;
разве не одно и то же?
0
76 / 50 / 26
Регистрация: 22.02.2015
Сообщений: 306
24.11.2015, 07:41
anti-k,
C++
1
2
3
head = new Node(); // указатель указывает на только созданный объект
head = NULL; // теперь указывает на ноль, а объект остался
/* Убери эти строчки с NULL'ом , извини, утро :)*/
1
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
24.11.2015, 07:49  [ТС]
DUMP,
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,647
Записей в блоге: 6
24.11.2015, 08:07
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include<iostream>
struct Node {
    Node * next;
    Node * prev;
    int x;
    Node(): next(NULL), prev(NULL), x()
    {}
    Node(int new_x): next(NULL), prev(NULL), x(new_x)
    {}
 
};
class List {
    Node * head;
    Node * tail;
public:
    List() :head(NULL),tail(NULL)
    {};
    ~List();
    void Add(int x);
    void Show();
};
List::~List() {
    if(tail) {
        Node* temp = tail->prev;
        while (tail) {
            delete tail;
            tail = temp;
            if(tail)
                temp = tail->prev;
        }
    }
}
void List::Add(int x) {
    Node * temp = new Node(x);
    if (tail != NULL) {
        tail->next = temp;
        temp->prev = tail;
        tail = temp;
    }
    else {
        head = tail = temp;
    }
}
void List::Show() {
    if (head == NULL) {
        std::cout << "List is empty" << std::endl;
        exit(1);
    }
    else {
        Node*temp = head;
        while (temp) {
            std::cout << temp->x << "-->";
            temp = temp->next;
        }
        std::cout << "NULL\n\n";
    }
}
int main()
{
    List lst;
    lst.Add(10);
    lst.Add(20);
    lst.Add(30);
    lst.Add(40);
    lst.Add(50);
    lst.Add(60);
    lst.Show();
    return 0;
}
1
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
24.11.2015, 08:19  [ТС]
Ilot,
Подскажите пожалуйста почему в таком случае не работает такая сортировка?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 void List::Sort()
{
    for (Node*temp1 = head->next; temp1;)
    {
        for (Node*temp2 = temp1; temp2;)
        {
            if (temp2->x > (temp2->prev)->x)
            {
                (temp2->prev)->next = temp2->next;
                (temp2->next)->prev = temp2->prev;
            }
            temp2 = temp2->prev;
        }
        temp1 = temp1->next;
    }
}
Добавлено через 40 секунд
Ilot, Буду крайне признателен и сяду сразу учить merge
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,647
Записей в блоге: 6
24.11.2015, 08:55
Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
void List::Sort() {
    for (Node*temp1 = head->next; temp1;) {
        for (Node*temp2 = temp1; temp2;) {
            if (temp2->x > (temp2->prev)->x)
                std::swap(temp2->x, temp2->prev->x);
            temp2 = temp2->next;
        }
        temp1 = temp1->next;
    }
}
1
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
24.11.2015, 09:02  [ТС]
Ilot,
Спасибо, но так оно увы свапит только поля, в случае когда много полей это будет не оправдано?
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,647
Записей в блоге: 6
24.11.2015, 10:16
Не проверял, но должно быть примерно так:
C++
1
2
3
std::swap(temp2->prev, temp2->prev->prev);
std::swap(temp2->next, temp2->prev->next);
std::swap(temp2, temp2->prev);
Т.е. вместо обмена полей обмениваем указатели в узлах, а также указатели на сами узлы.
1
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
24.11.2015, 10:34  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
2
3
std::swap(temp2->prev, temp2->prev->prev);
std::swap(temp2->next, temp2->prev->next);
std::swap(temp2, temp2->prev);
Увы, хотя очевидно, что должно работать , буду дежучить, пока не заработает!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.11.2015, 10:34
Помогаю со студенческими работами здесь

Определить первый атом в списке, а если такого в списке нет, вывести nil
Помогите с написанием функции на lisp. 1. Функция которая определяет первый атом в списке, а если такого в списке нет, выводит нил....

Найти в одном списке максимальный элемент, а в другом списке соответствующий ему по индексу
Здравствуйте! Помогите решить задачу - есть два cписка a = и b = . Необходимо найти из списка 'a' максимальное значение, а из списка 'b'...

Как сделать так, чтобы выбранное в одном списке имя не отображалось в другом списке
Добрый день, хочу попросить вашей помощи: Есть таблица Эксель в ней идёт диапазон имён Ячейки А1:Миша; А2:Петя; А3: Ваня и так далее ...

Словарь в списке. Последний элемент словаря в списке
Есть следующий список: namelis=( Как можно обратиться к последнему элементу данного списка? Если names то выводит {'name':...

В списке есть вложенные списки,если все числа во вложенном списке положительные,то вывести сумму этих чисел
есть список ,в нём вложенные подсписки,если во вложенном подсписке все элементы положительные то вывести сумму этих чисел.Например (list...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru