Односвязные списки
Массив
Свойства массива
Свойства массива
Свойства массива
Свойства массива
Свойства массива
Свойства массива
Резюме
Идея списка
Узел списка и его содержимое
Узел списка (код, картинка)
Список руками
Список руками
Список руками 2
Список руками 2
Вывод списка
Дополнение списка
Дополнение списка
Создание списка с нуля
Ввод-обработка-вывод
Ввод-обработка-вывод
Результат работы
Стек vs очередь
Очередь как черный ящик
Стек как черный ящик
Дополнение стека
Дополнение списка
Ввод-обработка-вывод
Ввод-обработка-вывод
Результат работы
Удаление
Удаление
Вставка в середину
Вставка в середину
Вставка в середину
580.00K
Category: programmingprogramming

Односвязные списки. Массив

1. Односвязные списки

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

2. Массив

• Набор последовательно расположенных в
памяти однотипных элементов
Основы Программирования 2020.
Матковский Иван Васильевич
2

3. Свойства массива

• Быстрый доступ к первому элементу

4. Свойства массива

• Быстрый доступ к элементу по индексу

5. Свойства массива

• Быстрая вставка элемента в конец

6. Свойства массива

• Быстрое удаление последнего элемента

7. Свойства массива

• Медленная вставка в начало/середину

8. Свойства массива

• Медленное удаление из начала/середины

9. Резюме

• Быстрый доступ к элементу по индексу
• Медленное добавление в начало и
середины
• Медленное удаление из начала и середины
• Трудности с выделением памяти и
расширением
Основы Программирования 2020.
Матковский Иван Васильевич
9

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

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

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

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

12. Узел списка (код, картинка)

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

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

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

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

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

15. Список руками 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->info << endl;
cout << b->info << endl;
cout << c->info << endl;
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;
Основы Программирования 2020.
Матковский Иван Васильевич
15

16. Список руками 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;
Основы Программирования 2020.
Матковский Иван Васильевич
16

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

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

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

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

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

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

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

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

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

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

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

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

23. Результат работы

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

24. Стек vs очередь

Очередь
• FIFO (First In – First Out)
Стек
• LIFO (Last In – First Out)
Основы Программирования 2020.
Матковский Иван Васильевич
24

25. Очередь как черный ящик

26. Стек как черный ящик

27. Дополнение стека

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

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

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

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

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

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

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

31. Результат работы

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

32. Удаление

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

33. Удаление

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

34. Вставка в середину

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

35. Вставка в середину

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

36. Вставка в середину

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