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

Как работает вставка в двусвязном списке? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Прилинковать SDL к V.S. 2010 http://www.cyberforum.ru/cpp-beginners/thread931162.html
Доброго всем вечера. Я знаю, что подобных тем было много, но, справиться с проблемой не могу. Скачал с оф.сайта все .h, SDL.lib, SDLmain.lib и SDL.dll. dll поместил в System32, либы и .h собрал в папку. В свойствах проекта указал к папке путь и выбрал Многопоточный Dll (\WD) В компоновщике указал обе библиотеки и выбрал \SUBSYSTEM:WINDOWS. При компиляции простенького проекта: LINK :...
C++ Вывод текста на консольное окно Всем привет! подскажите пожалуйста, во время вывода текста как перевести курсор на следующую строку? http://www.cyberforum.ru/cpp-beginners/thread931155.html
C++ Оптимизация, редактирование кода
Здраствуйте! Пишу крестики-нолики, но одно меня смущает, как это можно оптимизировать, поставить на цикл, а то ниче в голову не лезет. И можно ли как-то с помощью условной операции чередовать в этом коде победу Х или 0. Помогите пожалуйста. if(board=='X' && board=='X' && board=='X' || board=='X' && board=='X' && board=='X') cout<<"Player X win"; //диагонали if(board=='X' &&...
C++ Программа по Дейтлу
Решаю задачи по Дейтлу и вот тут очень интересное упражнение : Нужно нарисовать : http://uploads.ru/FlIsZ.png но получается вот что : http://uploads.ru/V5Hek.png Вот код Подозрения на консоль , то что она не может отобразить пробелы или как то выходят они ....
C++ На языке СИ++ написать программу,Выполняющую следующие операции: http://www.cyberforum.ru/cpp-beginners/thread931147.html
На языке СИ++ написать программу,Выполняющую следующие операции: Ввод рисунка из файла *.bmp. Подсчет общего числа пикселей в строке,столбце матрицы рисунка. Подсчет числа пикселей каждого цвета в рисунке. Вывод этих значений на экран.
C++ Тыкните в ошибку пожалуйста(условия) Написал простенький код,но почему-то после ввода имени,программа сразу пишет про возраст(либо большой\либо маленький),хотя я его не вводил. #include <iostream> using namespace std; int main() { char name; int age; cout<<"Vvedite ima:"; подробнее

Показать сообщение отдельно
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
30.07.2013, 22:33     Как работает вставка в двусвязном списке?
Привет всем! я не понимаю как работает вставка в двусвязном списке, а точне не понимаю зачем писать нужно вот такую строку cur->next->prev = tmp; в функции insert() ? почему если написать такую строку pm_tail->next->prev = tmp; в функции push_back() , то вставка в конец списка не работает, и наоборот если эту строчку cur->next->prev = tmp; не написать в функции insert(), будет вставлять значение только по указатель next. что это строчка означает ?
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
 
using namespace std;
 
class List
{
public:
    List() = default;
 
    void push_back(const int value)
    {
        Node* tmp = new Node;
        tmp->data = value;
        tmp->next = nullptr;
        tmp->prev = nullptr;
 
        if(pm_head == nullptr)
            pm_head = pm_tail = tmp;
        else
        {
            tmp->next = pm_tail->next;
            tmp->prev = pm_tail;
            //pm_tail->next->prev = tmp;
            pm_tail->next = tmp;
            pm_tail = tmp;
        }
    }
 
    void insert(const int index, const int value)
    {
        Node* tmp = new Node;
        tmp->data = value;
        tmp->next = nullptr;
        tmp->prev = nullptr;
 
        Node* cur = pm_head;
        for(int i = 1; i < index - 1 && cur->next != nullptr; i++)
            cur = cur->next;
 
        tmp->next = cur->next;
        tmp->prev = cur;
        cur->next->prev = tmp; //вот эта строчка
        cur->next = tmp;
    }
 
    void show() const
    {
        cout<<"next"<<endl;
        Node* tmp = pm_head;
        while(tmp)
        {
            cout<<tmp->data<<'\t';
            tmp = tmp->next;
        }
        cout<<endl<<endl;
        cout<<"prev"<<endl;
        tmp = pm_tail;
        while(tmp)
        {
            cout<<tmp->data<<'\t';
            tmp = tmp->prev;
        }
        cout<<endl<<endl;
    }
 
    ~List()
    {
        Node* tmp = pm_head;
        while(tmp)
        {
            tmp = tmp->next;
            delete pm_head;
            pm_head = tmp;
        }
    }
 
private:
    struct Node
    {
        int data;
        Node* prev, *next;
    };
    Node* pm_head = nullptr;
    Node* pm_tail = nullptr;
};
 
int main()
{
    List l;
    l.push_back(54);
    l.push_back(12);
    l.push_back(8);
    l.push_back(78);
    l.push_back(23);
    l.insert(3, 555);
    l.insert(6, 111);
    l.show();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru