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

Двусвязный линейный список - C++

Восстановить пароль Регистрация
 
yesinoff
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 14
29.02.2016, 17:00     Двусвязный линейный список #1
Дан Двусвязный линейный список. ну например фамилия и имя. как сделать добавление в начало списка? и как объявлять его?
помогите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.02.2016, 17:00     Двусвязный линейный список
Посмотрите здесь:

C++ Двусвязный линейный список
C++ Двусвязный линейный список
C++ Линейный двусвязный список
C++ Линейный двусвязный список
C++ Линейный двусвязный список
Двусвязный линейный список C++
Линейный Двусвязный список! C++
Линейный двусвязный список для хранения записей C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BlackMare
93 / 6 / 3
Регистрация: 25.02.2016
Сообщений: 30
01.03.2016, 18:41     Двусвязный линейный список #2
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
100
101
102
103
104
#include <iostream> // std::cout
#include <string> //sd::string
//-------------------------------------------------------------------------------
 
class student
{
public:
    std::string name;
    unsigned int group;
 
    student(std::string, unsigned int);
 
    student* prev() const {return prev_ptr;}
    student* next() const {return next_ptr;}
 
    student* push_front(student*);
    student* insert(student*);
    student* erase();
 
    unsigned int size();
    student* begin() {return begin_;}
    student* end() {return end_;}
 
private:
    student* begin_;
    student* end_;
    student* prev_ptr;
    student* next_ptr;
 
};
//-------------------------------------------------------------------------------
student::student(std::string nm, unsigned int pn)
            :name{nm}, group{pn}
            {
            begin_ = this;
            end_ = this;
            prev_ptr = nullptr;
            next_ptr = nullptr;
            }
//-------------------------------------------------------------------------------
student* student::push_front(student* n)
{
    this->next_ptr = n;
    n->prev_ptr = this;
    n->begin_ = this->begin_;
    n->end_ = this;
    return n;
}
//-------------------------------------------------------------------------------
student* student::insert(student* n) // n перед p
{
    student* p = this;
    if(n == nullptr) return p;
    if(p == nullptr) return n;
    n->next_ptr = p;
    if(p->prev_ptr) p->prev_ptr->next_ptr = n;
    n->prev_ptr = p->prev_ptr;
    p->prev_ptr = n;
    return n;
}
//-------------------------------------------------------------------------------
student* student::erase()
{
    if(this == nullptr) return this;
    if(this->prev_ptr) this->prev_ptr->next_ptr = this->next_ptr;
    if(this->next_ptr) this->next_ptr->prev_ptr = this->prev_ptr;
    return this->prev();
}
//-------------------------------------------------------------------------------
unsigned int student::size()
{
    unsigned int count = 0;
    student* temp = this;
    while (temp) {
        ++count;
        temp = temp->prev();
    }
    return count;
}
//-------------------------------------------------------------------------------
int main()
{
/*****
* Заполняем список
*****/
    student* pb = new student{"Petrov D.F.", 74};
    pb = pb->push_front(new student{"Ivanov D.G.", 11});
    pb = pb->push_front(new student{"Bolotov S.F.", 17});
    pb = pb->push_front(new student{"Gorbunov I.R.", 10});
    pb = pb->push_front(new student{"Horin K.L.", 20});
    pb = pb->push_front(new student{"Murov D.G.", 333});
    pb = pb->push_front(new student{"Pastuhov V.N.", 5635755});
    pb = pb->push_front(new student{"Karin J.K.", 4482});
//-------------------------------------------------------------------------------
    student* temp = pb;
    while (temp)
    {
        std::cout << temp->name << " " << temp->group << " -->" << temp->size() << std::endl;
        temp = temp->prev();
    }
 
    return 0;
}
//-------------------------------------------------------------------------------
Визуально (примерно):
Миниатюры
Двусвязный линейный список  
Yandex
Объявления
01.03.2016, 18:41     Двусвязный линейный список
Ответ Создать тему
Опции темы

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