SlideShare a Scribd company logo
1 of 46
CV_RTF: algo posidelky
«Основные структуры данных»
Книга

Фундаментальные алгоритмы на С++
О чём речь?
Как расставлять стаканчики?
Как устроена память?
Как оценить скорость?
Стандартный размер наименьшей
ячейки памяти равен восьми битам, то есть
восьми двоичным разрядам.
Совокупность из 8 битов является
основной единицей представления данных
– байт.
Указатели
Указатель (англ. pointer) — переменная,
диапазон значений которой состоит из
адресов ячеек памяти или специального
значения — нулевого адреса. Последнее
используется для указания того, что в
данный момент там ничего не записано.
Указатели
Указатель (англ. pointer) — переменная,
диапазон значений которой состоит из
адресов ячеек памяти или специального
значения — нулевого адреса. Последнее
используется для указания того, что в
данный момент там ничего не записано.
Указатели
#include <iostream>
using namespace std;
int main() {
double a = 7.5;
cout << "a contain: " << a << endl <<
"a address is " << &a << endl;
return 0;
}
a contain: 7.5
a address is 0xbfea6ef8
Указатели
#include <iostream>
using namespace std;
int main() {
int N = 5;
int* a = new int[N];
for (int i = 0; i < N; i++)
cout << "a[" << i << "] = " <<
&a[i] << endl;
cout << "sizeof(int value) = “
<< sizeof(N) << endl;
return 0;
}
Указатели
#include <iostream>
using namespace std;
int main() {
int N = 5;
int* a = new int[N];
for (int i = 0; i < N; i++)
cout << "a[" << i << "] = " << &a[i]
<< endl; cout << "sizeof(int value) =
" << sizeof(N) << endl; return 0;
}
a[0] = 0x84a6008
a[1] = 0x84a600c
a[2] = 0x84a6010
a[3] = 0x84a6014
a[4] = 0x84a6018
sizeof(int value) = 4
Указатели
#include <iostream>
using namespace std;
int main() {
int N = 2;
int a[N][N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cout << "a[" << i << "][" << j << "]
= “
<< &a[i][j] << endl;
return 0;
}
Указатели
#include <iostream>
using namespace std;
int main() {
int N = 2;
int a[N][N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cout << "a[" << i << "][" << j << "]
= “
<< &a[i][j] << endl;
return 0;
}
a[0][0] = 0xbfe4d258
a[0][1] = 0xbfe4d25c
a[1][0] = 0xbfe4d260
a[1][1] = 0xbfe4d264
Указатели
#include <iostream>
using namespace std;
int main() {
int d = 25;
int* a = &d;
cout << "d = " << d << " " << "&d = “
<< &d << endl << "a = " << a << " *a = “
<< *a << endl << "&(*a) = " << &(*a)
<< endl;
*a = 123;
cout << "d = " << d << endl << "*a = “
<< *a << endl;
return 0;
}
d = 25 &d = 0xbfeff258a = 0xbfeff258 *a
= 25&(*a) = 0xbfeff258d = 123*a = 123
Указатели
#include <iostream>
using namespace std;
int main() {
int N = 5;
int p[N];
for (int i = 0; i < N; i++) {
p[i] = i;
cout << "p[" << i << "] = “ << p[i] << " ";
}
cout << endl;
for (int i = 0; i < N; i++) {
*(p+i) = (N-1) – i;
cout << "p[" << i << "] = “ <<
p[i] << " “;
}
cout << endl;
return 0;
}
Указатели
p[0] = 0 p[1] = 1 p[2] = 2 p[3] = 3 p[4] = 4
p[0] = 4 p[1] = 3 p[2] = 2 p[3] = 1 p[4] = 0
Указатели
#include <iostream>
using namespace std;
int main() {
int N = 5;
int p[N];
for (int i = 0; i < N; i++) {
p[i] = i;
cout << "p[" << i << "] = “ << p[i] << " ";
}
cout << endl;
for (int i = 0; i < N; i++) {
*(p+i) = (N-1) – i;
cout << "p[" << i << "] = “ <<
p[i] << " “;
}
cout << endl;
return 0;
}
Указатели
p[i][j] == *(*(p+i)+j)
Структуры
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
const int N = 3;
struct example {
float x; float y;
} point, point_array[N];
Структуры
float get_rand();
int main () {
point.x = 5.7f;
point.y = 7.5f;
for (int i = 0; i < N; i++) {
point_array[i].x = get_rand();
point_array[i].y = get_rand(); cout
<< i << " : x = “
<< point_array[i].x <<
" | y = " << point_array[i].y <<
endl;
}
cout << "x = " << point.x
<< " y = " << point.y << endl;
return 0;
}
Структуры
0
1
2
x

:
:
:
=

x =
x =
x =
5.7

8.3
7.7
9.3
y =

| y = 8.6
| y = 1.5
| y = 3.5
7.5
Связные списки
— базовая динамическая структура данных,
состоящая из узлов, каждый из которых
содержит как собственно данные, так и одну
или две ссылки («связки») на следующий
и/или предыдущий узел списка.
Связные списки

struct node {
Item item;
node *next;
node (Item x, node* t) {
item x; next = t;
};
};
typedef node *link;
link x = new node;
Связные списки
Удаление элемента
t = x->next;
x->next = t->next;

Какие проблемы?
Связные списки
Удаление элемента
t = x->next;
x->next = t->next;
delete t;
Связные списки
Вставка элемента

t->next = x->next;
x->next = t;
Связные списки
Задача: Алгоритм Иосифа
Связные списки
Задача: Повернуть список
Связные списки
Связные списки
Двухсвязный список
Связные списки
Соглашения
Связные списки
Соглашения
Связные списки
Соглашения
Связные списки
С++ это Вам не Java
LinkedList ll = new LinkedList();
ll.add("F");
ll.add("B");
ll.addFirst("A");
ll.add(1, "A2");
ll.remove("F");
ll.remove(2);
ll.removeFirst();
Составные структуры
Представление строчки
Составные структуры
Представление графа
Составные структуры
Представление графа
Стек
Стек (англ. stack — стопка) — структура данных,
представляющая из себя список элементов,
организованных по принципу LIFO (англ. last in —
first out, «последним пришёл — первым вышел»).
Стек
Стек

Задача: написать стек используя
связный лист
Стек и STL
У стека есть немного функций:
•push() - добавить элемент
•pop() - удалить верхний элемент
•top() - получить верхний элемент
•size() - размер стека
•empty() - true, если стек пуст
Стек и STL
#include <stack>
// ---stack<char> s;
const int n = x.length();
for(int i = 0; i < n; ++i)
s.push(x[i]);
Очереди
Очереди, как следует из название, используют
принцип first in first out (FIFO). То есть, тот, кого мы
первым запихнули в очередь, первым из нее и
выйдет (хотя в реальной жизни не всегда так....)
Очереди
Очереди и STL
Перечень функций почти тот-же:
•push() - добавить элемент
•pop() - удалить первый элемент
•size() - размер очереди
•empty() - true, если очередь пуста
•front() - получить первый элемент
•back() - получить последний элемент
Очереди и STL
#include <queue>
// …
queue<int> events;
int n;
while (cin>>n)
events.push(n);
while (!events.empty) {
make(events.front());
events.pop();
}

More Related Content

What's hot

Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиMikhail Kurnosov
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Mikhail Kurnosov
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очередиMikhail Kurnosov
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотекPyNSK
 
Олег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonОлег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonYandex
 
Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)Mikhail Kurnosov
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Theoretical mechanics department
 
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11Technopark
 
Highload. Создание специализированных высокопроизводительных индексов
Highload. Создание специализированных высокопроизводительных индексовHighload. Создание специализированных высокопроизводительных индексов
Highload. Создание специализированных высокопроизводительных индексовAlexander Byndyu
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Alexander Granin
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskellhusniyarova
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклыSergey Nemchinsky
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in actionYuri Trukhin
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаMikhail Kurnosov
 

What's hot (20)

Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные списки
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)
 
msumobi2. Лекция 2
msumobi2. Лекция 2msumobi2. Лекция 2
msumobi2. Лекция 2
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очереди
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
Олег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonОлег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и Python
 
Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)
 
Java 8. Lambdas
Java 8. LambdasJava 8. Lambdas
Java 8. Lambdas
 
Java8. Innovations
Java8. InnovationsJava8. Innovations
Java8. Innovations
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование
 
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11
 
Highload. Создание специализированных высокопроизводительных индексов
Highload. Создание специализированных высокопроизводительных индексовHighload. Создание специализированных высокопроизводительных индексов
Highload. Создание специализированных высокопроизводительных индексов
 
Основы NumPy
Основы NumPyОсновы NumPy
Основы NumPy
 
Урок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графовУрок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графов
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskell
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклы
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировка
 

Similar to Algo 00

Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееdelimitry
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложенийPositive Hack Days
 
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...CocoaHeads
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)Anton Bukov
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey Paznikov
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and ClojureVasil Remeniuk
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey Paznikov
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#Dmitri Soshnikov
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияAlexey Paznikov
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CГлеб Тарасов
 
Anton Shabouta "Implementing async binary clients in pure PHP"
Anton Shabouta "Implementing async binary clients in pure PHP" Anton Shabouta "Implementing async binary clients in pure PHP"
Anton Shabouta "Implementing async binary clients in pure PHP" Fwdays
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
MySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации баговMySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации баговSveta Smirnova
 

Similar to Algo 00 (20)

Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущее
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложений
 
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
Anton Shabouta "Implementing async binary clients in pure PHP"
Anton Shabouta "Implementing async binary clients in pure PHP" Anton Shabouta "Implementing async binary clients in pure PHP"
Anton Shabouta "Implementing async binary clients in pure PHP"
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Array Work C
Array Work CArray Work C
Array Work C
 
MySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации баговMySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации багов
 

Algo 00