Двусвязные списки
Идея списка
Идея списка
Узел списка и его содержимое
Узел списка (код)
Список руками
Список руками
Список руками 2
Список руками 2
Вывод списка
Вывод списка
Дополнение списка
Создание списка с нуля
Ввод-обработка-вывод
Ввод-обработка-вывод
Ввод-обработка-вывод
Вставка узла
Удаление узла
Удаление узла
Удаление узла
545.00K
Категория: ПрограммированиеПрограммирование

Двусвязные списки

1. Двусвязные списки

Основы Программирования 2020.
Матковский Иван Васильевич
1

2. Идея списка

Основы Программирования 2020.
Матковский Иван Васильевич
2

3. Идея списка

Основы Программирования 2020.
Матковский Иван Васильевич
3

4. Узел списка и его содержимое

Основы Программирования 2020.
Матковский Иван Васильевич
4

5. Узел списка (код)

struct node{
int info;
node* next;
node* prev;
};
Основы Программирования 2020.
Матковский Иван Васильевич
5

6. Список руками

struct node{
int info;
node *next;
node *prev;
};
int main() {
node *first, * second;
first = new node;
first->info = 10;
second = new node;
second->info = 20;
first->next = second;
second->next = NULL;
first->prev = NULL;
second->prev = first;
cout << first->info << endl;
cout << second->info << endl;
cout << first->next->info << endl;
cout << second->next->info << endl;
cout << first->prev->info << endl;
cout << second->prev->info << endl;
}
Основы Программирования 2020.
Матковский Иван Васильевич
6

7. Список руками

struct node{
int info;
node *next;
node *prev;
};
int main() {
node *first, * second;
first = new node;
first->info = 10;
second = new node;
second->info = 20;
first->next = second;
second->next = NULL;
first->prev = NULL;
second->prev = first;
cout << first->info << endl;
cout << second->info << endl;
cout << first->next->info << endl;
cout << second->next->info << endl;
cout << first->prev->info << endl;
cout << second->prev->info << endl;
}
Основы Программирования 2020.
Матковский Иван Васильевич
7

8. Список руками 2

node *a, *b, *c;
a = new node;
a->info = 10;
b = new node;
b->info = 20;
c = new node;
c->info = 30;
a->next = c; a->prev=c;
b->next = a; b->prev=c;
c->next = b; c->prev=b;
cout << a->next->info << endl;
cout << a->next->next->info << endl;
cout << b->next->info << endl;
cout << b->next->next->info << endl;
cout << c->next->info << endl;
cout << c->next->next->info << endl;
cout << a->prev->info << endl;
cout << a->prev->prev->info << endl;
cout << b->prev->info << endl;
cout << b->prev->prev->info << endl;
cout << c->prev->info << endl;
cout << c->prev->prev->info << endl;
Основы Программирования 2020.
Матковский Иван Васильевич
8

9. Список руками 2

node *a, *b, *c;
a = new node;
a->info = 10;
b = new node;
b->info = 20;
c = new node;
c->info = 30;
a->next = c;
b->next = a;
c->next = b;
cout << a->next->info << endl;
cout << a->next->next->info << endl;
cout << b->next->info << endl;
cout << b->next->next->info << endl;
cout << c->next->info << endl;
cout << c->next->next->info << endl;
cout << a->prev->info << endl;
cout << a->prev->prev->info << endl;
cout << b->prev->info << endl;
cout << b->prev->prev->info << endl;
cout << c->prev->info << endl;
cout << c->prev->prev->info << endl;
Основы Программирования 2020.
Матковский Иван Васильевич
9

10. Вывод списка

for(node* cur = start; cur!=NULL; cur = cur->next){
cout << cur->info << endl;
}
Основы Программирования 2020.
Матковский Иван Васильевич
10

11. Вывод списка

for(node* cur = start; cur!=NULL; cur = cur->next){
cout << cur->info << endl;
}
for(node* cur = finish; cur!=NULL; cur = cur->prev){
cout << cur->info << endl;
}
Основы Программирования 2020.
Матковский Иван Васильевич
11

12. Дополнение списка

newNode = new node;
newNode->info = 50;
newNode->next = NULL;
newNode->prev = NULL;
tail->next = newNode;
newNode->prev = tail;
tail=newNode;
Основы Программирования 2020.
Матковский Иван Васильевич
12

13. Создание списка с нуля

node *newNode = new node;
newNode->info = 10;
newNode->next = NULL;
newNode->prev = NULL;
start = newNode;
tail = newNode;
Основы Программирования 2020.
Матковский Иван Васильевич
13

14. Ввод-обработка-вывод

node *head=NULL, *tail=NULL, *newNode; int x;
while(cin>>x){
newNode = new node;
newNode->info = x;
newNode->next = NULL;
newNode->prev = NULL;
if(tail==NULL){
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
newNode->prev = tail;
tail = newNode;
}
Основы Программирования 2020.
}
Матковский Иван Васильевич
14

15. Ввод-обработка-вывод

for(node* cur = head; cur!=NULL; cur=cur->next){
cout << cur->info << " ";
}
cout << endl;
for(node* cur = tail; cur!=NULL; cur=cur->prev){
cout << cur->info << " ";
}
cout << endl;
Основы Программирования 2020.
Матковский Иван Васильевич
15

16. Ввод-обработка-вывод

for(node* cur = head; cur!=NULL; cur=cur->next){
cur->info *= 2;
}
for(node* cur = head; cur!=NULL; cur=cur->next){
cout << cur->info << " ";
}
cout << endl;
for(node* cur = tail; cur!=NULL; cur=cur->prev){
cout << cur->info << " ";
}
cout << endl;
Основы Программирования 2020.
Матковский Иван Васильевич
16

17. Вставка узла

newNode = new node;
newNode->info = 45;
newNode->next = NULL;
newNode->prev = NULL;
newNode->next = target->next;
newNode->prev = target;
target->next->prev = newNode;
target->next = newNode;
Основы Программирования 2020.
Матковский Иван Васильевич
17

18. Удаление узла

killNode = target->next;
target->next->next->prev = target;
target->next = target->next->next;
delete killNode;
Основы Программирования 2020.
Матковский Иван Васильевич
18

19. Удаление узла

killNode = target->prev;
target->prev->prev->next = target;
target->prev = target->prev->prev;
delete killNode;
Основы Программирования 2020.
Матковский Иван Васильевич
19

20. Удаление узла

killNode = target->next;
after = target->next->next;
after ->prev = target;
target->next = after;
delete killNode;
Основы Программирования 2020.
Матковский Иван Васильевич
20
English     Русский Правила