Advertisement
Derga

Untitled

May 23rd, 2023
1,010
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.49 KB | None | 0 0
  1. #include <stack>
  2. #include <queue>
  3. #include <array>
  4. #include <list>
  5. #include <forward_list>
  6. #include <vector>
  7.  
  8. #include <set>
  9.  
  10. #include <map>
  11.  
  12. #include <unordered_map>
  13. #include <unordered_set>
  14.  
  15. #include <iostream>
  16.  
  17. using namespace std;
  18.  
  19.  
  20. //forward_list односвязный список
  21. struct Node {
  22.     int value;
  23.     Node* next;
  24.     //конструктор по умолчанию. После : - значит,
  25.     //что инициализация проиходит в момент создания переменной
  26.     Node() : value(0), next(nullptr) {
  27.     };
  28.    
  29.     Node(int value, Node* n) : value(0), next(n) {
  30.     };
  31. };
  32.  
  33. //двусвязный список //list<>
  34. //Он содержит указатель на предыдущий (и на следующий тоже) элементы
  35. struct Node {
  36.     int value;
  37.     Node* next;
  38.     Node* prev;
  39.     //конструктор по умолчанию. После : - значит,
  40.     //что инициализация проиходит в момент создания переменной
  41.     Node() : value(0), next(nullptr), prev(nullptr) {
  42.     };
  43.  
  44.     Node(int value, Node* n, Node* p) : value(0), next(n), prev(p) {
  45.     };
  46. };
  47.  
  48.  
  49.  
  50. //stl - standart template library
  51. int main() {
  52.     stack<int> s; //FILO
  53.     s.push(1);
  54.     cout << s.top() << '\n';
  55.     s.pop();
  56.     s.empty(); //возвращает true, усли пустой
  57.  
  58.     queue<int> q; //FIFO
  59.     q.push(1);
  60.     cout << q.front() << ' ' << q.back() << '\n';
  61.     q.pop();
  62.     cout << q.empty() << '\n';
  63.    
  64.     forward_list<int> fl;
  65.     fl.push_front(1);
  66.     cout << fl.front() << '\n';
  67.     //вставка элемента за константу
  68.     fl.insert_after(fl.begin(), 10); //так как это односвязный список вставляем после определенного элемента
  69.        
  70.     //вставка элемента за константу
  71.     list<int> l;
  72.     l.insert(l.begin(), 10); // тут свободно перемещаемся вперед и назад, вставлять значение легче.
  73.  
  74.     /*
  75.     Node nw;
  76.     Node n1;
  77.     auto o = n1->next;//&n2
  78.     n1->next = nw;
  79.     nw->next = o;
  80.  
  81.     n1->n2
  82.     o = n2
  83.     n1->nw
  84.     nw->n2
  85.     n1->nw->n2
  86.     */
  87.    
  88.     int c[100];
  89.  
  90.     array<int, 26> a;
  91.     a.fill(0);
  92.    
  93.     set<int> se;//красночерное дерево - оно же бинарное дерево поиска, все операции за логорифм, кроме
  94.     //минимум и максимум за константу. Самобалансируется! (родительский элемент меняется - не обязательно самый верхний)
  95.  
  96.     se.insert(1); //log(n)
  97.     se.find(10); //log(n)
  98.     cout << se.contains(7) << '\n';
  99.     //элементы хранятся отсортированными
  100.  
  101.     map<int, string> mp; //такое же красночерное дерево, с такими асимптотиками, только каждый элемент хранит еще и значение
  102.  
  103.     unordered_set<int> st;
  104.     //добавление за o(1) обычно, в худшем случае за o(n)
  105.     //таблица со списками. (каждый элемент - список)
  106.    
  107.     //разные элементы возвращают одинаковые hash - коллизия
  108.     //метод открытой адресации.
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement