├── .vscode └── settings.json ├── C++ ├── .vscode │ └── settings.json ├── Arrays │ ├── DynamicArrays.cpp │ ├── WordSplit.cpp │ └── WordSplit.exe ├── LinkedLists │ ├── DoublyLinkedList │ │ ├── DoublyLinkedList.cpp │ │ └── WithClasses │ │ │ ├── DoublyLinkedList.h │ │ │ ├── Node.h │ │ │ └── main.cpp │ └── SinglyLinkedList │ │ ├── SinglyLinkedList.cpp │ │ └── WithClasses │ │ ├── Node.h │ │ ├── SinglyLinkedList.h │ │ └── main.cpp ├── Recursion │ ├── Pow.cpp │ ├── Product.cpp │ └── ReverseString.cpp └── StacksQueuesDeques │ ├── Deque.cpp │ ├── DequeWithTemplates.cpp │ ├── Queue.cpp │ ├── QueueWithTemplates.cpp │ ├── Stack.cpp │ └── StackWithTemplates.cpp ├── LICENSE ├── Python ├── Arrays │ ├── DynamicArrays.py │ └── WordSplit.py ├── BinaryTrees │ ├── BinaryTree.py │ ├── Node.py │ └── __pycache__ │ │ └── Node.cpython-38.pyc ├── LinkedLists │ ├── DoublyLinkedList │ │ ├── DoublyLinkedList.py │ │ ├── Node.py │ │ └── __pycache__ │ │ │ └── Node.cpython-37.pyc │ └── SinglyLinkedList │ │ ├── Node.py │ │ ├── SinglyLinkedList.py │ │ └── __pycache__ │ │ └── Node.cpython-37.pyc ├── Recursion │ ├── Pow.py │ ├── Product.py │ └── ReverseString.py └── StacksQueuesDeques │ ├── Deques.py │ ├── DequesFromPython.py │ ├── Queue.py │ ├── QueueByTwoStack.py │ ├── ReverseStringWithUseStack.py │ └── Stack.py ├── README.md ├── bagli_liste.jpg ├── binary_tree_0.png ├── binary_tree_1.png ├── binary_tree_2.png ├── binary_tree_3.png ├── binary_tree_4.png ├── cift_yonlu.jpg ├── dairesel_bagli_liste.jpg ├── dairesel_bagli_liste1.jpg ├── dizi_temsili.png ├── dizi_temsili1.png └── veri_tipleri.jpg /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "*.html": "html", 4 | "iterator": "cpp", 5 | "iostream": "cpp", 6 | "ostream": "cpp", 7 | "iosfwd": "cpp", 8 | "xstring": "cpp" 9 | }, 10 | "C_Cpp.errorSquiggles": "Disabled" 11 | } -------------------------------------------------------------------------------- /C++/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "C_Cpp.errorSquiggles": "Disabled", 3 | "files.associations": { 4 | "*.html": "html", 5 | "ostream": "cpp", 6 | "iostream": "cpp" 7 | } 8 | } -------------------------------------------------------------------------------- /C++/Arrays/DynamicArrays.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | class DynamicArray 6 | { 7 | private: 8 | int item_count; 9 | int capacity; 10 | int* dynamic_array; 11 | public: 12 | DynamicArray(/* args */); 13 | void append(int item); 14 | int get_item(int index); 15 | void resize(); 16 | int get_capacity(); 17 | ~DynamicArray(); 18 | }; 19 | 20 | DynamicArray::DynamicArray(/* args */) 21 | { 22 | this->item_count = 0; 23 | this->capacity = 1; 24 | this->dynamic_array=new int[this->capacity]; 25 | } 26 | 27 | void DynamicArray::append(int item){ 28 | if(this->item_count==this->capacity) 29 | this->resize(); 30 | this->dynamic_array[item_count] = item; 31 | this->item_count++; 32 | } 33 | 34 | int DynamicArray::get_item(int index){ 35 | return this->dynamic_array[index]; 36 | } 37 | 38 | void DynamicArray::resize(){ 39 | int* temp=new int[this->capacity]; 40 | for (int i = 0; i < this->capacity; i++) 41 | { 42 | temp[i]=this->dynamic_array[i]; 43 | } 44 | this->dynamic_array = new int[++this->capacity]; 45 | for (int i = 0; i < this->capacity - 1; i++) 46 | { 47 | this->dynamic_array[i]=temp[i]; 48 | } 49 | delete[] temp; 50 | } 51 | 52 | int DynamicArray::get_capacity(){ 53 | return this->capacity; 54 | } 55 | 56 | DynamicArray::~DynamicArray() 57 | { 58 | delete[] this->dynamic_array; 59 | } 60 | 61 | int main(){ 62 | DynamicArray newarray; 63 | newarray.append(1); 64 | newarray.append(3); 65 | newarray.append(5); 66 | for (int i = 0; i < newarray.get_capacity(); i++) 67 | { 68 | cout< 2 | 3 | using namespace std; 4 | 5 | string word_split(string first_word,string mixed_word); 6 | 7 | int main(){ 8 | cout< 2 | 3 | using namespace std; 4 | 5 | struct node{ 6 | int n; 7 | node* next; 8 | node* prev; 9 | }; 10 | 11 | void append(node* root, int x){ 12 | node* new_node = new node[1]; 13 | new_node->n = x; 14 | node* iter = root; 15 | while(iter->next!=nullptr){ 16 | iter=iter->next; 17 | } 18 | iter->next = new_node; 19 | new_node->prev = iter; 20 | new_node->next = nullptr; 21 | } 22 | 23 | node* add_front(node* root, int x){ 24 | node* new_node = new node[1]; 25 | new_node->n = x; 26 | new_node->prev=nullptr; 27 | new_node->next=root; 28 | root->prev=new_node; 29 | root = new_node; 30 | return root; 31 | } 32 | 33 | node* remove(node* root,int x){ 34 | node* iter = root; 35 | while(iter != nullptr && iter->n != x){ 36 | iter=iter->next; 37 | } 38 | if(iter == nullptr){ 39 | cout<<"Listede Boyle Bir Eleman Yok!"; 40 | } 41 | else{ 42 | if(iter->prev == nullptr){ 43 | root = iter->next; 44 | } 45 | else if(iter->next == nullptr){ 46 | iter->prev->next = nullptr; 47 | } 48 | else{ 49 | iter->prev->next = iter->next; 50 | iter->next->prev = iter->prev; 51 | } 52 | delete[] iter; 53 | return root; 54 | } 55 | } 56 | 57 | void insert_after(node* root, int x, int y){ 58 | node* iter = root; 59 | while(iter != nullptr && iter->n != x){ 60 | iter = iter->next; 61 | } 62 | if(iter == nullptr){ 63 | cout<<"Listede Boyle Bir Eleman Yok!"; 64 | } 65 | else{ 66 | node* new_node = new node[1]; 67 | new_node->n = y; 68 | new_node->next = iter->next; 69 | if(iter->next != nullptr) 70 | iter->next->prev = new_node; 71 | iter->next = new_node; 72 | new_node->prev = iter; 73 | } 74 | } 75 | 76 | void print_list(node* root){ 77 | cout<n<next; 82 | } 83 | cout<n = 0; 90 | root->next = nullptr; 91 | root->prev = nullptr; 92 | // for(int i = 1; i <= 5; i++){ 93 | // append(root,i); 94 | // } 95 | for(int i=1;i<=5;i++){ 96 | root=add_front(root,i); 97 | } 98 | append(root,8); 99 | root = remove(root,8); 100 | append(root,8); 101 | root = add_front(root,10); 102 | append(root,13); 103 | root = remove(root,10); 104 | root = remove(root,3); 105 | print_list(root); 106 | root = add_front(root,15); 107 | root = add_front(root,19); 108 | root = add_front(root,38); 109 | print_list(root); 110 | remove(root,3); 111 | remove(root,19); 112 | remove(root,28); 113 | print_list(root); 114 | cout<<"-------"< 5 | #include "Node.h" 6 | 7 | using namespace std; 8 | 9 | template 10 | class DoublyLinkedList 11 | { 12 | private: 13 | Node* root; 14 | public: 15 | DoublyLinkedList(); 16 | void add_front(T data); 17 | void append(T data); 18 | void insert_after(T prev_data,T data); 19 | void remove(T data); 20 | void print_list(); 21 | ~DoublyLinkedList(); 22 | }; 23 | 24 | template 25 | DoublyLinkedList::DoublyLinkedList() 26 | { 27 | this->root = nullptr; 28 | } 29 | 30 | template 31 | void DoublyLinkedList::add_front(T data){ 32 | Node* new_node = new Node(data); 33 | if(this->root != nullptr) 34 | this->root->set_prev(new_node); 35 | new_node->set_next(this->root); 36 | this->root = new_node; 37 | } 38 | 39 | template 40 | void DoublyLinkedList::append(T data){ 41 | Node* new_node = new Node(data); 42 | if(this->root == nullptr){ 43 | this->root = new_node; 44 | } 45 | else{ 46 | Node* iter = this->root; 47 | while(iter->get_next() != nullptr){ 48 | iter = iter->get_next(); 49 | } 50 | iter->set_next(new_node); 51 | new_node->set_prev(iter); 52 | } 53 | } 54 | 55 | template 56 | void DoublyLinkedList::insert_after(T prev_data, T data){ 57 | if(this->root == nullptr){ 58 | cout<<"Listede Eleman Yok"<* iter = this->root; 62 | while(iter->get_data() != prev_data && iter != nullptr){ 63 | iter = iter->get_next(); 64 | } 65 | if(iter == nullptr){ 66 | cout<<"Listede "<* new_node = new Node(data); 70 | new_node->set_next(iter->get_next()); 71 | if(iter->get_next() != nullptr) 72 | iter->get_next()->set_prev(new_node); 73 | iter->set_next(new_node); 74 | new_node->set_prev(iter); 75 | } 76 | } 77 | } 78 | 79 | template 80 | void DoublyLinkedList::remove(T data){ 81 | if(this->root == nullptr){ 82 | cout<<"Listede Eleman Yok"<* iter = this->root; 86 | while(iter != nullptr && iter->get_data() != data){ 87 | iter = iter->get_next(); 88 | } 89 | if(iter == nullptr){ 90 | cout<<"Listede "<get_prev() == nullptr && iter->get_next()==nullptr){ 94 | this->root=nullptr; 95 | } 96 | else if(iter->get_prev() == nullptr){ 97 | iter->get_next()->set_prev(nullptr); 98 | this->root = iter->get_next(); 99 | } 100 | else if(iter->get_next() == nullptr){ 101 | iter->get_prev()->set_next(nullptr); 102 | } 103 | else{ 104 | iter->get_prev()->set_next(iter->get_next()); 105 | iter->get_next()->set_prev(iter->get_prev()); 106 | } 107 | } 108 | } 109 | } 110 | 111 | template 112 | void DoublyLinkedList::print_list(){ 113 | Node* iter = this->root; 114 | while(iter != nullptr){ 115 | cout<get_data()<get_next(); 117 | } 118 | } 119 | 120 | template 121 | DoublyLinkedList::~DoublyLinkedList() 122 | { 123 | if(this->root!=nullptr){ 124 | this->root->~Node(); 125 | } 126 | } 127 | 128 | #endif 129 | -------------------------------------------------------------------------------- /C++/LinkedLists/DoublyLinkedList/WithClasses/Node.h: -------------------------------------------------------------------------------- 1 | #ifndef NODE_H 2 | #define NODE_H 3 | 4 | template 5 | class Node 6 | { 7 | private: 8 | T data; 9 | Node* next; 10 | Node* prev; 11 | public: 12 | Node(T data); 13 | T get_data(); 14 | void set_next(Node* next); 15 | void set_prev(Node* prev); 16 | Node* get_next(); 17 | Node* get_prev(); 18 | ~Node(); 19 | }; 20 | 21 | template 22 | Node::Node(T data) 23 | { 24 | this->data = data; 25 | this->next = nullptr; 26 | this->prev = nullptr; 27 | } 28 | 29 | template 30 | T Node::get_data(){ 31 | return this->data; 32 | } 33 | 34 | template 35 | void Node::set_next(Node* next){ 36 | this->next = next; 37 | } 38 | 39 | template 40 | void Node::set_prev(Node* prev){ 41 | this->prev = prev; 42 | } 43 | 44 | template 45 | Node* Node::get_next(){ 46 | return this->next; 47 | } 48 | 49 | template 50 | Node* Node::get_prev(){ 51 | return this->prev; 52 | } 53 | 54 | template 55 | Node::~Node() 56 | { 57 | if(this->next!=nullptr){ 58 | this->next->~Node(); 59 | } 60 | } 61 | #endif 62 | -------------------------------------------------------------------------------- /C++/LinkedLists/DoublyLinkedList/WithClasses/main.cpp: -------------------------------------------------------------------------------- 1 | #include "DoublyLinkedList.h" 2 | 3 | int main(){ 4 | DoublyLinkedList new_list; 5 | new_list.add_front(3); 6 | new_list.add_front(8); 7 | new_list.add_front(5); 8 | new_list.append(5); 9 | new_list.append(13); 10 | new_list.add_front(8); 11 | new_list.insert_after(8,12); 12 | new_list.insert_after(13,15); 13 | new_list.insert_after(15,21); 14 | new_list.add_front(17); 15 | new_list.append(77); 16 | new_list.insert_after(77,99); 17 | new_list.insert_after(77,43); 18 | new_list.remove(99); 19 | new_list.remove(43); 20 | new_list.remove(8); 21 | new_list.remove(17); 22 | new_list.remove(12); 23 | new_list.add_front(777); 24 | new_list.append(124); 25 | new_list.insert_after(124,23); 26 | new_list.insert_after(777,25); 27 | new_list.print_list(); 28 | DoublyLinkedList char_list; 29 | char_list.add_front('a'); 30 | char_list.add_front('k'); 31 | char_list.add_front('n'); 32 | char_list.add_front('a'); 33 | char_list.print_list(); 34 | char_list.append('k'); 35 | char_list.append('u'); 36 | char_list.append('s'); 37 | char_list.append('u'); 38 | char_list.print_list(); 39 | new_list.insert_after(8,99); 40 | new_list.print_list(); 41 | new_list.insert_after(3,17); 42 | new_list.print_list(); 43 | new_list.remove(99); 44 | new_list.print_list(); 45 | new_list.remove(8); 46 | new_list.print_list(); 47 | char_list.remove('s'); 48 | char_list.print_list(); 49 | 50 | return 0; 51 | } 52 | -------------------------------------------------------------------------------- /C++/LinkedLists/SinglyLinkedList/SinglyLinkedList.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | struct node 6 | { 7 | int n; 8 | node* next; 9 | }; 10 | 11 | void append(node* s_l_list,int data){ 12 | node* iter; 13 | iter = s_l_list; 14 | while(iter->next != nullptr){ 15 | iter = iter->next; 16 | } 17 | iter->next = new node[1]; 18 | iter->next->n = data; 19 | iter->next->next = nullptr; 20 | } 21 | 22 | void print_list(node* s_l_list){ 23 | node* iter; 24 | iter = s_l_list; 25 | while(iter != nullptr){ 26 | cout<n<next; 28 | } 29 | } 30 | 31 | node* add_front(node* s_l_list,int data){ 32 | node* new_node=new node[1]; 33 | new_node->n = data; 34 | new_node->next = s_l_list; 35 | s_l_list = new_node; 36 | return s_l_list; 37 | } 38 | 39 | void insert(node* s_l_list,int prev_data, int data){ 40 | node* iter; 41 | iter = s_l_list; 42 | while(iter->n != prev_data){ 43 | iter = iter->next; 44 | } 45 | node* new_node = new node[1]; 46 | new_node->n = data; 47 | new_node->next = iter->next; 48 | iter->next = new_node; 49 | } 50 | 51 | void remove(node* s_l_list,int data){ 52 | node* iter; 53 | iter = s_l_list; 54 | while(iter->next->n != data){ 55 | iter = iter->next; 56 | } 57 | node* temp = iter->next; 58 | iter->next = temp->next; 59 | delete[] temp; 60 | temp = nullptr; 61 | } 62 | 63 | int main(){ 64 | node* root; 65 | root = new node[1]; 66 | root->n = 0; 67 | root->next = nullptr; 68 | for (int i = 1; i <= 5; i++) 69 | { 70 | root = add_front(root,i); 71 | } 72 | print_list(root); 73 | append(root,6); 74 | print_list(root); 75 | append(root,17); 76 | print_list(root); 77 | insert(root,3,71); 78 | print_list(root); 79 | insert(root,6,47); 80 | print_list(root); 81 | root = add_front(root,59); 82 | print_list(root); 83 | remove(root,47); 84 | print_list(root); 85 | insert(root,6,47); 86 | print_list(root); 87 | 88 | return 0; 89 | 90 | } -------------------------------------------------------------------------------- /C++/LinkedLists/SinglyLinkedList/WithClasses/Node.h: -------------------------------------------------------------------------------- 1 | #ifndef NODE_H 2 | #define NODE_H 3 | 4 | template 5 | class Node 6 | { 7 | private: 8 | T data; 9 | Node* next; 10 | public: 11 | Node(T data); 12 | T get_data(); 13 | void set_next(Node* next); 14 | Node* get_next(); 15 | ~Node(); 16 | }; 17 | 18 | template 19 | Node::Node(T data) 20 | { 21 | this->data = data; 22 | this->next = nullptr; 23 | } 24 | 25 | template 26 | T Node::get_data(){ 27 | return this->data; 28 | } 29 | 30 | template 31 | void Node::set_next(Node* next){ 32 | this->next = next; 33 | } 34 | 35 | template 36 | Node* Node::get_next(){ 37 | return this->next; 38 | } 39 | 40 | template 41 | Node::~Node() 42 | { 43 | if(this->next!=nullptr){ 44 | this->next->~Node(); 45 | } 46 | } 47 | #endif -------------------------------------------------------------------------------- /C++/LinkedLists/SinglyLinkedList/WithClasses/SinglyLinkedList.h: -------------------------------------------------------------------------------- 1 | #ifndef SINGLY_LINKED_LIST 2 | #define SINGLY_LINKED_LIST 3 | 4 | #include 5 | #include "Node.h" 6 | 7 | using namespace std; 8 | 9 | template 10 | class SinglyLinkedList 11 | { 12 | private: 13 | Node* root; 14 | public: 15 | SinglyLinkedList(); 16 | void add_front(T data); 17 | void append(T data); 18 | void insert_after(T prev_data,T data); 19 | void remove(T data); 20 | void print_list(); 21 | ~SinglyLinkedList(); 22 | }; 23 | 24 | template 25 | SinglyLinkedList::SinglyLinkedList() 26 | { 27 | this->root = nullptr; 28 | } 29 | 30 | template 31 | void SinglyLinkedList::add_front(T data){ 32 | Node* new_node = new Node(data); 33 | new_node->set_next(this->root); 34 | this->root = new_node; 35 | } 36 | 37 | template 38 | void SinglyLinkedList::append(T data){ 39 | Node* new_node = new Node(data); 40 | Node* iter = this->root; 41 | while(iter->get_next() != nullptr){ 42 | iter = iter->get_next(); 43 | } 44 | iter->set_next(new_node); 45 | } 46 | 47 | template 48 | void SinglyLinkedList::insert_after(T prev_data, T data){ 49 | if(this->root == nullptr){ 50 | cout<<"Listede Eleman Yok"<* iter = this->root; 54 | while(iter->get_data() != prev_data && iter != nullptr){ 55 | iter = iter->get_next(); 56 | } 57 | if(iter == nullptr){ 58 | cout<<"Listede "<* new_node = new Node(data); 62 | new_node->set_next(iter->get_next()); 63 | iter->set_next(new_node); 64 | } 65 | } 66 | } 67 | 68 | template 69 | void SinglyLinkedList::remove(T data){ 70 | if(this->root == nullptr){ 71 | cout<<"Listede Eleman Yok"<* iter = this->root; 75 | while(iter->get_next() != nullptr && iter->get_next()->get_data() != data){ 76 | iter = iter->get_next(); 77 | } 78 | if(iter->get_next() == nullptr){ 79 | cout<<"Listede "<* temp = iter->get_next(); 83 | iter->set_next(temp->get_next()); 84 | delete temp; 85 | } 86 | } 87 | } 88 | 89 | template 90 | void SinglyLinkedList::print_list(){ 91 | Node* iter = this->root; 92 | while(iter != nullptr){ 93 | cout<get_data()<get_next(); 95 | } 96 | } 97 | 98 | template 99 | SinglyLinkedList::~SinglyLinkedList() 100 | { 101 | if(this->root!=nullptr){ 102 | this->root->~Node(); 103 | } 104 | } 105 | 106 | #endif -------------------------------------------------------------------------------- /C++/LinkedLists/SinglyLinkedList/WithClasses/main.cpp: -------------------------------------------------------------------------------- 1 | #include "SinglyLinkedList.h" 2 | 3 | int main(){ 4 | SinglyLinkedList new_list; 5 | new_list.add_front(3); 6 | new_list.add_front(8); 7 | new_list.add_front(5); 8 | new_list.print_list(); 9 | SinglyLinkedList char_list; 10 | char_list.add_front('a'); 11 | char_list.add_front('k'); 12 | char_list.add_front('n'); 13 | char_list.add_front('a'); 14 | char_list.print_list(); 15 | char_list.append('k'); 16 | char_list.append('u'); 17 | char_list.append('s'); 18 | char_list.append('u'); 19 | char_list.print_list(); 20 | new_list.insert_after(8,99); 21 | new_list.print_list(); 22 | new_list.insert_after(3,17); 23 | new_list.print_list(); 24 | new_list.remove(99); 25 | new_list.print_list(); 26 | new_list.remove(8); 27 | new_list.print_list(); 28 | char_list.remove('s'); 29 | char_list.print_list(); 30 | 31 | return 0; 32 | } -------------------------------------------------------------------------------- /C++/Recursion/Pow.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int my_product(int x,int y){ 6 | if(x == 1){ 7 | return y; 8 | } 9 | return y + my_product(x-1, y); 10 | } 11 | 12 | int my_pow(int x, int y){ 13 | if(y == 1){ 14 | return x; 15 | } 16 | return my_product(x,my_pow(x, y - 1)); 17 | } 18 | 19 | int main(){ 20 | cout< 2 | 3 | using namespace std; 4 | 5 | int my_product(int x, int y){ 6 | if(x == 1){ 7 | return y; 8 | } 9 | return y + my_product(x-1,y); 10 | } 11 | 12 | int my_product2(int x, int y){ 13 | if(y == 1){ 14 | return x; 15 | } 16 | return x + my_product(x, y-1); 17 | } 18 | 19 | int main(){ 20 | cout< 2 | using namespace std; 3 | 4 | string reverse_string(string str){ 5 | if(str.length() == 1){ 6 | return str; 7 | } 8 | return str.substr(str.length() - 1).append(reverse_string(str.substr(0,str.length() - 1))); 9 | } 10 | 11 | string reverse_string2(string str){ 12 | if(str.size() == 1){ 13 | return str; 14 | } 15 | return reverse_string2(str.substr(1,str.size())).append(str.substr(0,1)); 16 | } 17 | 18 | int main(){ 19 | cout< 2 | 3 | using namespace std; 4 | 5 | class Deque 6 | { 7 | private: 8 | int* dequee; 9 | int item_count; 10 | public: 11 | Deque(); 12 | void add_front(int item); 13 | void add_back(int item); 14 | void remove_front(); 15 | void remove_back(); 16 | int get_size(); 17 | int get_item(int index); 18 | ~Deque(); 19 | }; 20 | 21 | Deque::Deque() 22 | { 23 | this->dequee = nullptr; 24 | this->item_count = 0; 25 | } 26 | 27 | void Deque::add_front(int item){ 28 | if(this->item_count==0){ 29 | this->dequee = new int[1]; 30 | this->dequee[this->item_count++] = item; 31 | } 32 | else{ 33 | int* temp = new int[this->item_count]; 34 | for(int i=0;iitem_count;i++){ 35 | temp[i]=this->dequee[i]; 36 | } 37 | this->dequee = new int[++this->item_count]; 38 | this->dequee[0]=item; 39 | for(int i=1;iitem_count;i++){ 40 | this->dequee[i]=temp[i-1]; 41 | } 42 | delete[] temp; 43 | } 44 | } 45 | 46 | void Deque::add_back(int item){ 47 | if(this->item_count==0){ 48 | this->dequee = new int[1]; 49 | this->dequee[this->item_count++] = item; 50 | } 51 | else{ 52 | int* temp = new int[this->item_count]; 53 | for (int i = 0; i < this->item_count; i++) 54 | { 55 | temp[i] = this->dequee[i]; 56 | } 57 | this->dequee = new int[++this->item_count]; 58 | for (int i = 0; i < this->item_count - 1; i++) 59 | { 60 | this->dequee[i] = temp[i]; 61 | } 62 | delete[] temp; 63 | this->dequee[this->item_count - 1] = item; 64 | } 65 | } 66 | 67 | void Deque::remove_front(){ 68 | if(this->item_count!=0){ 69 | int* temp = new int[--this->item_count]; 70 | for(int i=0;iitem_count;i++){ 71 | temp[i]=this->dequee[i+1]; 72 | } 73 | this->dequee = new int[this->item_count]; 74 | for(int i=0;iitem_count;i++){ 75 | this->dequee[i]=temp[i]; 76 | } 77 | delete[] temp; 78 | } 79 | else{ 80 | cout<item_count!=0){ 86 | int* temp = new int[--this->item_count]; 87 | for(int i=0;iitem_count;i++){ 88 | temp[i]=this->dequee[i]; 89 | } 90 | this->dequee = new int[this->item_count]; 91 | for(int i=0;iitem_count;i++){ 92 | this->dequee[i]=temp[i]; 93 | } 94 | delete[] temp; 95 | } 96 | else{ 97 | cout<item_count!=0){ 103 | return this->dequee[index]; 104 | } 105 | } 106 | 107 | int Deque::get_size(){ 108 | return this->item_count; 109 | } 110 | 111 | Deque::~Deque() 112 | { 113 | delete[] this->dequee; 114 | } 115 | 116 | void print(Deque &deq){ 117 | cout< 2 | 3 | using namespace std; 4 | 5 | template 6 | class Deque 7 | { 8 | private: 9 | T* dequee; 10 | int item_count; 11 | public: 12 | Deque(); 13 | void add_front(T item); 14 | void add_back(T item); 15 | void remove_front(); 16 | void remove_back(); 17 | int get_size(); 18 | T get_item(int index); 19 | ~Deque(); 20 | }; 21 | 22 | template 23 | Deque::Deque() 24 | { 25 | this->dequee = nullptr; 26 | this->item_count = 0; 27 | } 28 | 29 | template 30 | void Deque::add_front(T item){ 31 | if(this->item_count==0){ 32 | this->dequee = new T[1]; 33 | this->dequee[this->item_count++] = item; 34 | } 35 | else{ 36 | T* temp = new T[this->item_count]; 37 | for(int i=0;iitem_count;i++){ 38 | temp[i]=this->dequee[i]; 39 | } 40 | this->dequee = new T[++this->item_count]; 41 | this->dequee[0]=item; 42 | for(int i=1;iitem_count;i++){ 43 | this->dequee[i]=temp[i-1]; 44 | } 45 | delete[] temp; 46 | } 47 | } 48 | 49 | template 50 | void Deque::add_back(T item){ 51 | if(this->item_count==0){ 52 | this->dequee = new T[1]; 53 | this->dequee[this->item_count++] = item; 54 | } 55 | else{ 56 | T* temp = new T[this->item_count]; 57 | for (int i = 0; i < this->item_count; i++) 58 | { 59 | temp[i] = this->dequee[i]; 60 | } 61 | this->dequee = new T[++this->item_count]; 62 | for (int i = 0; i < this->item_count - 1; i++) 63 | { 64 | this->dequee[i] = temp[i]; 65 | } 66 | delete[] temp; 67 | this->dequee[this->item_count - 1] = item; 68 | } 69 | } 70 | 71 | template 72 | void Deque::remove_front(){ 73 | if(this->item_count!=0){ 74 | T* temp = new T[--this->item_count]; 75 | for(int i=0;iitem_count;i++){ 76 | temp[i]=this->dequee[i+1]; 77 | } 78 | this->dequee = new T[this->item_count]; 79 | for(int i=0;iitem_count;i++){ 80 | this->dequee[i]=temp[i]; 81 | } 82 | delete[] temp; 83 | } 84 | else{ 85 | cout< 90 | void Deque::remove_back(){ 91 | if(this->item_count!=0){ 92 | T* temp = new T[--this->item_count]; 93 | for(int i=0;iitem_count;i++){ 94 | temp[i]=this->dequee[i]; 95 | } 96 | this->dequee = new T[this->item_count]; 97 | for(int i=0;iitem_count;i++){ 98 | this->dequee[i]=temp[i]; 99 | } 100 | delete[] temp; 101 | } 102 | else{ 103 | cout< 108 | T Deque::get_item(int index){ 109 | if(this->item_count!=0){ 110 | return this->dequee[index]; 111 | } 112 | } 113 | 114 | template 115 | int Deque::get_size(){ 116 | return this->item_count; 117 | } 118 | 119 | template 120 | Deque::~Deque() 121 | { 122 | delete[] this->dequee; 123 | } 124 | 125 | template 126 | void print(Deque &deq){ 127 | cout< new_deq; 135 | cout< new_deq2; 155 | cout< 2 | 3 | using namespace std; 4 | 5 | class Queue 6 | { 7 | private: 8 | int* queuee; 9 | int item_count; 10 | public: 11 | Queue(/* args */); 12 | void push(int item); 13 | void pop(); 14 | int get_size(); 15 | int get_item(int index); 16 | ~Queue(); 17 | }; 18 | 19 | Queue::Queue(/* args */) 20 | { 21 | this->queuee = nullptr; 22 | this->item_count = 0; 23 | } 24 | 25 | void Queue::push(int item){ 26 | if(this->item_count == 0){ 27 | this->queuee = new int[1]; 28 | queuee[this->item_count++] = item; 29 | } 30 | else{ 31 | int* temp = new int[this->item_count]; 32 | for(int i=0;iitem_count;i++){ 33 | temp[i]=this->queuee[i]; 34 | } 35 | this->queuee = new int[++this->item_count]; 36 | this->queuee[0]=item; 37 | for(int i=1;iitem_count;i++){ 38 | this->queuee[i]=temp[i-1]; 39 | } 40 | } 41 | } 42 | 43 | void Queue::pop(){ 44 | if (this->item_count != 0) 45 | { 46 | if(--this->item_count == 0){ 47 | delete[] this->queuee; 48 | this->queuee = nullptr; 49 | } 50 | else{ 51 | int* temp = new int[this->item_count]; 52 | for (int i = 0; i < item_count; i++) 53 | { 54 | temp[i]=this->queuee[i]; 55 | } 56 | this->queuee=new int[this->item_count]; 57 | for (int i = 0; i < item_count; i++) 58 | { 59 | this->queuee[i]=temp[i]; 60 | } 61 | delete[] temp; 62 | } 63 | } 64 | else{ 65 | cout<item_count!=0){ 71 | return this->queuee[index]; 72 | } 73 | } 74 | 75 | int Queue::get_size(){ 76 | return this->item_count; 77 | } 78 | 79 | Queue::~Queue() 80 | { 81 | delete[] this->queuee; 82 | } 83 | 84 | int main(){ 85 | Queue new_queue; 86 | cout< 2 | 3 | using namespace std; 4 | 5 | template 6 | class Queue 7 | { 8 | private: 9 | T* queuee; 10 | int item_count; 11 | public: 12 | Queue(/* args */); 13 | void push(T item); 14 | void pop(); 15 | int get_size(); 16 | T get_item(int index); 17 | ~Queue(); 18 | }; 19 | 20 | template 21 | Queue::Queue(/* args */) 22 | { 23 | this->queuee = nullptr; 24 | this->item_count = 0; 25 | } 26 | 27 | template 28 | void Queue::push(T item){ 29 | if(this->item_count == 0){ 30 | this->queuee = new T[1]; 31 | queuee[this->item_count++] = item; 32 | } 33 | else{ 34 | T* temp = new T[this->item_count]; 35 | for(int i=0;iitem_count;i++){ 36 | temp[i]=this->queuee[i]; 37 | } 38 | this->queuee = new T[++this->item_count]; 39 | this->queuee[0]=item; 40 | for(int i=1;iitem_count;i++){ 41 | this->queuee[i]=temp[i-1]; 42 | } 43 | } 44 | } 45 | 46 | template 47 | void Queue::pop(){ 48 | if (this->item_count != 0) 49 | { 50 | if(--this->item_count == 0){ 51 | delete[] this->queuee; 52 | this->queuee = nullptr; 53 | } 54 | else{ 55 | T* temp = new T[this->item_count]; 56 | for (int i = 0; i < item_count; i++) 57 | { 58 | temp[i]=this->queuee[i]; 59 | } 60 | this->queuee=new T[this->item_count]; 61 | for (int i = 0; i < item_count; i++) 62 | { 63 | this->queuee[i]=temp[i]; 64 | } 65 | delete[] temp; 66 | } 67 | } 68 | else{ 69 | cout< 74 | T Queue::get_item(int index){ 75 | if(this->item_count!=0){ 76 | return this->queuee[index]; 77 | } 78 | } 79 | 80 | template 81 | int Queue::get_size(){ 82 | return this->item_count; 83 | } 84 | 85 | template 86 | Queue::~Queue() 87 | { 88 | delete[] this->queuee; 89 | } 90 | 91 | int main(){ 92 | Queue new_queue; 93 | cout< 2 | #include 3 | using namespace std; 4 | 5 | class Stack{ 6 | private: 7 | int* stack_list; 8 | int item_count; 9 | public: 10 | Stack(); 11 | int top(); 12 | void push(int item); 13 | void pop(); 14 | int size(); 15 | int get_item(int index); 16 | ~Stack(); 17 | }; 18 | 19 | Stack::Stack(){ 20 | this->stack_list = nullptr; 21 | this->item_count = 0; 22 | } 23 | 24 | int Stack::top(){ 25 | if(this->item_count!=0){ 26 | return this->stack_list[this->item_count-1]; 27 | } 28 | // must use try catch 29 | } 30 | 31 | int Stack::get_item(int index){ 32 | if(this->item_count!=0){ 33 | return this->stack_list[index]; 34 | } 35 | } 36 | 37 | void Stack::push(int item){ 38 | if(this->item_count == 0){ 39 | this->stack_list = new int[++this->item_count]; 40 | this->stack_list[0] = item; 41 | } 42 | else{ 43 | int* temp = new int[this->item_count]; 44 | for (int i = 0; i < this->item_count; i++) 45 | { 46 | temp[i] = this->stack_list[i]; 47 | } 48 | this->stack_list = new int[++this->item_count]; 49 | for (int i = 0; i < this->item_count - 1; i++) 50 | { 51 | this->stack_list[i] = temp[i]; 52 | } 53 | delete[] temp; 54 | this->stack_list[this->item_count - 1] = item; 55 | } 56 | } 57 | 58 | void Stack::pop(){ 59 | if (this->item_count != 0) 60 | { 61 | if(--this->item_count == 0){ 62 | delete[] this->stack_list; 63 | this->stack_list = nullptr; 64 | } 65 | else{ 66 | int* temp = new int[this->item_count]; 67 | for (int i = 0; i < item_count; i++) 68 | { 69 | temp[i]=this->stack_list[i]; 70 | } 71 | this->stack_list=new int[this->item_count]; 72 | for (int i = 0; i < item_count; i++) 73 | { 74 | this->stack_list[i]=temp[i]; 75 | } 76 | delete[] temp; 77 | } 78 | } 79 | else{ 80 | cout<item_count; 87 | } 88 | 89 | Stack::~Stack(){ 90 | delete[] this->stack_list; 91 | } 92 | 93 | int main(){ 94 | Stack new_stack; 95 | cout< 2 | #include 3 | using namespace std; 4 | 5 | template 6 | class Stack{ 7 | private: 8 | T* stack_list; 9 | int item_count; 10 | public: 11 | Stack(); 12 | T top(); 13 | void push(T item); 14 | void pop(); 15 | int size(); 16 | T get_item(int index); 17 | ~Stack(); 18 | }; 19 | 20 | template 21 | Stack::Stack(){ 22 | this->stack_list = nullptr; 23 | this->item_count = 0; 24 | } 25 | 26 | template 27 | T Stack::top(){ 28 | if(this->item_count!=0){ 29 | return this->stack_list[this->item_count-1]; 30 | } 31 | // must use try catch 32 | } 33 | 34 | template 35 | T Stack::get_item(int index){ 36 | if(this->item_count!=0){ 37 | return this->stack_list[index]; 38 | } 39 | } 40 | 41 | template 42 | void Stack::push(T item){ 43 | if(this->item_count == 0){ 44 | this->stack_list = new T[++this->item_count]; 45 | this->stack_list[0] = item; 46 | } 47 | else{ 48 | T* temp = new T[this->item_count]; 49 | for (int i = 0; i < this->item_count; i++) 50 | { 51 | temp[i] = this->stack_list[i]; 52 | } 53 | this->stack_list = new T[++this->item_count]; 54 | for (int i = 0; i < this->item_count - 1; i++) 55 | { 56 | this->stack_list[i] = temp[i]; 57 | } 58 | delete[] temp; 59 | this->stack_list[this->item_count - 1] = item; 60 | } 61 | } 62 | 63 | template 64 | void Stack::pop(){ 65 | if (this->item_count != 0) 66 | { 67 | if(--this->item_count == 0){ 68 | delete[] this->stack_list; 69 | this->stack_list = nullptr; 70 | } 71 | else{ 72 | T* temp = new T[this->item_count]; 73 | for (int i = 0; i < item_count; i++) 74 | { 75 | temp[i]=this->stack_list[i]; 76 | } 77 | this->stack_list=new T[this->item_count]; 78 | for (int i = 0; i < item_count; i++) 79 | { 80 | this->stack_list[i]=temp[i]; 81 | } 82 | delete[] temp; 83 | } 84 | } 85 | else{ 86 | cout< 92 | int Stack::size(){ 93 | return this->item_count; 94 | } 95 | 96 | template 97 | Stack::~Stack(){ 98 | delete[] this->stack_list; 99 | } 100 | 101 | int main(){ 102 | Stack new_stack; 103 | cout< index >= 0: 16 | return self.arr[index] 17 | else: 18 | return IndexError("index is out of bounds!") 19 | 20 | def append(self,element): 21 | if self.n == self.capacity: 22 | self._resize(self.capacity + 1) 23 | #self._resize(2 * self.capacity) 24 | self.arr[self.n] = element 25 | self.n += 1 #increase element count 26 | 27 | def _resize(self,new_capacity): 28 | 29 | new_arr = self.make_array(new_capacity) #create new array 30 | 31 | #move old array to new array 32 | for i in range(self.n): 33 | new_arr[i] = self.arr[i] 34 | 35 | self.arr = new_arr 36 | self.capacity = new_capacity 37 | 38 | def make_array(self,new_capacity): 39 | return (new_capacity*ctypes.py_object)() 40 | 41 | arr = DynamicArray() 42 | arr.append(1) 43 | arr.append(3) 44 | arr.append(5) 45 | arr.append(9) 46 | arr.append(2) 47 | for i in range(arr.n): 48 | print(arr[i]) 49 | 50 | 51 | -------------------------------------------------------------------------------- /Python/Arrays/WordSplit.py: -------------------------------------------------------------------------------- 1 | def word_split(words): 2 | words_in_second_param = words[1].split(",") 3 | output = [] 4 | for i in range(len(words[0])-1): 5 | if words[0][:i+1] in words_in_second_param and words[0][i+1:] in words_in_second_param: 6 | output.append(words[0][:i+1]) 7 | output.append(words[0][i+1:]) 8 | if output == []: 9 | return "Bulunamadi" 10 | return output 11 | 12 | # Alternative Solution 13 | # word = list(words[0]) 14 | # words_in_second_param = words[1].split(",") 15 | # for i in range(1,len(word)): 16 | # temp = word[:] 17 | # temp.insert(i," ") 18 | # x , y = "".join(temp).split() 19 | # if x in words_in_second_param and y in words_in_second_param: 20 | # return x + " , " + y 21 | # return "Bulunamadi" 22 | 23 | print(word_split(["deeplearning","d,dll,a,deep,dee,base,lear,learning"])) -------------------------------------------------------------------------------- /Python/BinaryTrees/BinaryTree.py: -------------------------------------------------------------------------------- 1 | from Node import Node 2 | 3 | root = Node("A") 4 | root.left = Node("B") 5 | root.left.left = Node("D") 6 | root.right = Node("C") 7 | -------------------------------------------------------------------------------- /Python/BinaryTrees/Node.py: -------------------------------------------------------------------------------- 1 | class Node(): 2 | """ 3 | Binary Tree Nodes 4 | """ 5 | def __init__(self, data): 6 | """ 7 | constructor 8 | """ 9 | self.value = data 10 | self.left = None 11 | self.right = None 12 | -------------------------------------------------------------------------------- /Python/BinaryTrees/__pycache__/Node.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/Python/BinaryTrees/__pycache__/Node.cpython-38.pyc -------------------------------------------------------------------------------- /Python/LinkedLists/DoublyLinkedList/DoublyLinkedList.py: -------------------------------------------------------------------------------- 1 | from Node import Node 2 | 3 | class DoublyLinkedList(): 4 | 5 | def __init__(self): 6 | self.head = None 7 | 8 | def push(self, data): 9 | if self.head: 10 | new_node = Node(data) 11 | new_node.nextnode = self.head 12 | self.head.prevnode = new_node 13 | self.head = new_node 14 | else: 15 | new_node = Node(data) 16 | self.head = new_node 17 | 18 | def append(self, data): 19 | if self.head: 20 | temp = self.head 21 | while temp.nextnode: 22 | temp = temp.nextnode 23 | new_node = Node(data) 24 | temp.nextnode = new_node 25 | new_node.prevnode = temp 26 | else: 27 | new_node = Node(data) 28 | self.head = new_node 29 | 30 | def insert_after(self, prev_data, data): 31 | if self.head: 32 | temp = self.head 33 | while temp and temp.getNodeValue() != prev_data: 34 | temp = temp.nextnode 35 | if temp: 36 | new_node = Node(data) 37 | new_node.nextnode = temp.nextnode 38 | temp.nextnode = new_node 39 | new_node.prevnode = temp 40 | if new_node.nextnode: 41 | new_node.nextnode.prevnode = new_node 42 | else: 43 | print("Listede Boyle Bir Eleman Yok!") 44 | else: 45 | print("Listede Boyle Bir Eleman Yok!") 46 | 47 | def delete(self,data): 48 | if self.head: 49 | temp = self.head 50 | while temp and temp.getNodeValue() != data: 51 | temp = temp.nextnode 52 | if temp: 53 | if temp == self.head: 54 | if temp.nextnode: 55 | temp.nextnode.prevnode = None 56 | self.head = temp.nextnode 57 | temp = None 58 | else: 59 | self.head = None 60 | else: 61 | temp.prevnode.nextnode = temp.nextnode 62 | if temp.nextnode: 63 | temp.nextnode.prevnode = temp.prevnode 64 | temp = None 65 | else: 66 | print("Listede Boyle Bir Eleman Yok!") 67 | else: 68 | print("Listede Eleman Yok!") 69 | 70 | def print_list(self): 71 | if self.head: 72 | temp = self.head 73 | while temp: 74 | print(temp.data) 75 | temp = temp.nextnode 76 | else: 77 | print("Listede Eleman Yok!") 78 | 79 | linked_list = DoublyLinkedList() 80 | linked_list.push(14) 81 | linked_list.push(3) 82 | linked_list.push(5) 83 | linked_list.push(17) 84 | linked_list.print_list() 85 | linked_list.append(12) 86 | linked_list.append(77) 87 | linked_list.append(91) 88 | linked_list.print_list() 89 | linked_list.insert_after(77,15) 90 | linked_list.insert_after(3,13) 91 | linked_list.insert_after(91,68) 92 | linked_list.insert_after(68,69) 93 | linked_list.insert_after(17,1) 94 | linked_list.insert_after(19,12) 95 | linked_list.print_list() 96 | print("--------------------") 97 | linked_list.delete(999) 98 | linked_list.delete(77) 99 | linked_list.delete(68) 100 | linked_list.delete(5) 101 | linked_list.delete(69) 102 | linked_list.delete(91) 103 | linked_list.delete(17) 104 | linked_list.append(91) 105 | 106 | linked_list.print_list() -------------------------------------------------------------------------------- /Python/LinkedLists/DoublyLinkedList/Node.py: -------------------------------------------------------------------------------- 1 | class Node(): 2 | 3 | def __init__(self, data): 4 | self.data = data 5 | self.nextnode = None 6 | self.prevnode = None 7 | 8 | def setNextNode(self,node): 9 | self.nextnode = node 10 | 11 | def setPrevNode(self,node): 12 | self.prevnode = node 13 | 14 | def getNextNode(self): 15 | return self.nextnode 16 | 17 | def getPrevNode(self): 18 | return self.prevnode 19 | 20 | def getNodeValue(self): 21 | return self.data 22 | -------------------------------------------------------------------------------- /Python/LinkedLists/DoublyLinkedList/__pycache__/Node.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/Python/LinkedLists/DoublyLinkedList/__pycache__/Node.cpython-37.pyc -------------------------------------------------------------------------------- /Python/LinkedLists/SinglyLinkedList/Node.py: -------------------------------------------------------------------------------- 1 | class Node(): 2 | 3 | def __init__(self, data): 4 | self.data = data 5 | self.nextnode = None 6 | 7 | def setNextNode(self,node): 8 | self.nextnode = node 9 | 10 | def getNextNode(self): 11 | return self.nextnode 12 | 13 | def getNodeValue(self): 14 | return self.data 15 | -------------------------------------------------------------------------------- /Python/LinkedLists/SinglyLinkedList/SinglyLinkedList.py: -------------------------------------------------------------------------------- 1 | from Node import Node 2 | 3 | class SinglyLinkedList(): 4 | 5 | def __init__(self): 6 | self.head = None 7 | 8 | def push(self, data): 9 | 10 | new_node = Node(data) 11 | new_node.nextnode = self.head 12 | self.head = new_node 13 | 14 | def insert_after(self,prev_node,data): 15 | new_node = Node(data) 16 | temp = self.head 17 | while temp: 18 | if(temp.getNodeValue() == prev_node): 19 | prev_node = temp 20 | break 21 | temp = temp.nextnode 22 | if not temp: 23 | print("Boyle bir dugum yok") 24 | else: 25 | new_node.nextnode = prev_node.nextnode 26 | prev_node.nextnode = new_node 27 | 28 | def append(self,data): 29 | if self.head: 30 | new_node = Node(data) 31 | temp = self.head 32 | while temp.nextnode: 33 | temp = temp.nextnode 34 | temp.nextnode = new_node 35 | else: 36 | self.push(data) 37 | 38 | def delete_node(self,data): 39 | if self.head: 40 | temp = self.head 41 | if self.head.getNodeValue() == data: 42 | self.head = temp.nextnode 43 | temp = None 44 | else: 45 | temp = self.head 46 | while temp.nextnode: 47 | if temp.nextnode.getNodeValue() == data: 48 | break 49 | temp = temp.nextnode 50 | del_node = temp.nextnode 51 | temp.nextnode = del_node.nextnode 52 | del_node = None 53 | else: 54 | print("Liste Bos") 55 | 56 | def printLinkedList(self): 57 | temp = self.head 58 | while temp: 59 | print(temp.data) 60 | temp = temp.nextnode 61 | 62 | linked_list = SinglyLinkedList() 63 | linked_list.append(27) 64 | linked_list.push("tail") 65 | linked_list.push(25) 66 | linked_list.push(10) 67 | linked_list.push("head") 68 | linked_list.insert_after(10,13) 69 | linked_list.insert_after(13,"aga") 70 | linked_list.insert_after(18,"aga") 71 | linked_list.append(33) 72 | linked_list.delete_node(25) 73 | linked_list.delete_node("aga") 74 | linked_list.delete_node("head") 75 | linked_list.delete_node(10) 76 | linked_list.delete_node("tail") 77 | linked_list.push("head") 78 | linked_list.insert_after(33,"tail") 79 | 80 | linked_list.printLinkedList() 81 | -------------------------------------------------------------------------------- /Python/LinkedLists/SinglyLinkedList/__pycache__/Node.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/Python/LinkedLists/SinglyLinkedList/__pycache__/Node.cpython-37.pyc -------------------------------------------------------------------------------- /Python/Recursion/Pow.py: -------------------------------------------------------------------------------- 1 | def product(x,y): 2 | if x == 1: 3 | return y 4 | return y + product(x-1,y) 5 | 6 | def product2(x,y): 7 | if y == 1: 8 | return x 9 | return x + product(x,y-1) 10 | 11 | def my_pow(x,y): 12 | if y == 1: 13 | return x 14 | return product(x, pow(x,y-1)) 15 | 16 | print(my_pow(5,2)) -------------------------------------------------------------------------------- /Python/Recursion/Product.py: -------------------------------------------------------------------------------- 1 | def product(x,y): 2 | if x == 1: 3 | return y 4 | return y + product(x-1,y) 5 | 6 | def product2(x,y): 7 | if y == 1: 8 | return x 9 | return x + product(x,y-1) 10 | 11 | print(product(2,3)) 12 | print(product2(2,3)) 13 | -------------------------------------------------------------------------------- /Python/Recursion/ReverseString.py: -------------------------------------------------------------------------------- 1 | def reverse_string(string): 2 | if len(string) == 1: 3 | return string 4 | return string[len(string)-1] + reverse_string(string[:(len(string)-1)]) 5 | 6 | def reverse_string2(string): 7 | if len(string) == 1: 8 | return string 9 | return reverse_string2(string[1:]) + string[0] 10 | 11 | print(reverse_string("Zumrudu")) 12 | print(reverse_string2("Anka")) 13 | -------------------------------------------------------------------------------- /Python/StacksQueuesDeques/Deques.py: -------------------------------------------------------------------------------- 1 | class Deque(): 2 | def __init__(self): 3 | self.items = [] 4 | 5 | def add_rear(self,item): 6 | self.items.append(item) 7 | 8 | def add_front(self,item): 9 | self.items.insert(0,item) 10 | 11 | def remove_rear(self): 12 | self.items.pop() 13 | 14 | def remove_front(self): 15 | self.items.pop(0) 16 | 17 | def deque_is_empty(self): 18 | return self.items == [] 19 | 20 | def size(self): 21 | return len(self.items) 22 | 23 | def get_item(self,index): 24 | return self.items[index] 25 | 26 | deque = Deque() 27 | 28 | print(deque.deque_is_empty()) 29 | deque.add_front("deep") 30 | print(deque.get_item(0)) 31 | deque.add_front("learning") 32 | print(deque.get_item(0)) 33 | print("size: ",deque.size()) 34 | deque.remove_front() 35 | print("size: ",deque.size()) 36 | deque.remove_rear() 37 | print("size: ",deque.size()) 38 | print(deque.deque_is_empty()) 39 | -------------------------------------------------------------------------------- /Python/StacksQueuesDeques/DequesFromPython.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | queue = deque(["data","ml","ai"]) 4 | 5 | print(queue) 6 | queue.insert(0,"deep") 7 | print(queue) 8 | queue.insert(0,"learning") 9 | print(queue) 10 | queue.pop() 11 | print(queue) 12 | queue.popleft() 13 | print(queue) 14 | queue.append("ai") 15 | print(queue) 16 | -------------------------------------------------------------------------------- /Python/StacksQueuesDeques/Queue.py: -------------------------------------------------------------------------------- 1 | class Queue(): 2 | 3 | def __init__(self): 4 | self.items = [] 5 | 6 | def queue_is_empty(self): 7 | return self.items == [] 8 | 9 | def enqueue(self,item): 10 | self.items.insert(0,item) 11 | 12 | def dequeue(self): 13 | self.items.pop() 14 | 15 | def size(self): 16 | return len(self.items) 17 | 18 | def get_item(self,index): 19 | return self.items[index] 20 | 21 | queue = Queue() 22 | 23 | print(queue.queue_is_empty()) 24 | queue.enqueue("istanbul") 25 | queue.enqueue("ankara") 26 | print("size: " ,queue.size()) 27 | queue.dequeue() 28 | print("size: " ,queue.size()) 29 | -------------------------------------------------------------------------------- /Python/StacksQueuesDeques/QueueByTwoStack.py: -------------------------------------------------------------------------------- 1 | class QueueByTwoStack(): 2 | def __init__(self): 3 | self.stack1 = [] 4 | self.stack2 = [] 5 | 6 | def enqueue(self,item): 7 | self.stack1.append(item) 8 | 9 | def dequeue(self): 10 | while len(self.stack1) > 0: 11 | self.stack2.append(self.stack1.pop()) 12 | return self.stack2.pop() 13 | 14 | queue = QueueByTwoStack() 15 | 16 | queue.enqueue("1") 17 | queue.enqueue("2") 18 | queue.enqueue("3") 19 | queue.enqueue("5") 20 | queue.enqueue("4") 21 | print(queue.dequeue()) 22 | print(queue.dequeue()) 23 | queue.enqueue("1") 24 | print(queue.dequeue()) 25 | 26 | -------------------------------------------------------------------------------- /Python/StacksQueuesDeques/ReverseStringWithUseStack.py: -------------------------------------------------------------------------------- 1 | def createStack(): 2 | stack = [] 3 | return stack 4 | 5 | def size(stack): 6 | pass 7 | 8 | def top(stack): 9 | pass 10 | 11 | def push(stack,item): 12 | stack.append(item) 13 | 14 | def pop(stack): 15 | return stack.pop() 16 | 17 | def reverse(string): 18 | l = len(string) 19 | stack = createStack() 20 | for i in range(l): 21 | push(stack, string[i]) 22 | result = "" 23 | for i in range(l): 24 | result += pop(stack) 25 | return result 26 | 27 | print(reverse("Osman")) -------------------------------------------------------------------------------- /Python/StacksQueuesDeques/Stack.py: -------------------------------------------------------------------------------- 1 | class Stack: 2 | 3 | def __init__(self): 4 | self.items = [] 5 | 6 | def stack_is_empty(self): 7 | return self.items == [] #return boolean phrase 8 | 9 | def push(self, item): 10 | self.items.append(item) 11 | 12 | def pop(self): 13 | return self.items.pop() 14 | 15 | def top(self): 16 | return self.items[len(self.items)-1] 17 | 18 | def size(self): 19 | return len(self.items) 20 | 21 | stack = Stack() 22 | print(stack.stack_is_empty()) 23 | stack.push("ankara") 24 | print(stack.top()) 25 | stack.push("istanbul") 26 | print(stack.top()) 27 | stack.push("izmir") 28 | print(stack.top()) 29 | print(stack.size()) 30 | stack.pop() 31 | print(stack.top()) 32 | print(stack.stack_is_empty()) 33 | stack.pop() 34 | print(stack.top()) 35 | print(stack.stack_is_empty()) 36 | stack.pop() 37 | print(stack.stack_is_empty()) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## [Orkhan ALIYEV](https://github.com/aliyevorkhan) arkadaşıma katkılarından dolayı teşekkür ederim. 2 | 3 | ## İçindekiler 4 | 5 | 1. [Veri Yapılarına Genel Bakış](#veri-yapılarına-genel-bakış) 6 | 1. [Veri Yapısının Özellikleri](#veri-yapısının-özellikleri) 7 | 1. [Veri Yapısı İhtiyacı](#veri-yapısı-ihtiyacı) 8 | 1. [Yürütme Süresi Kutuları](#yürütme-süresi-kutuları) 9 | 1. [Temel Terminoloji](#temel-terminoloji) 10 | 1. [Veri Yapıları Temelleri](#veri-yapıları-temelleri) 11 | 1. [Veri Tanımı](#veri-tanımı) 12 | 1. [Veri Nesnesi](#veri-nesnesi) 13 | 1. [Veri Tipi](#veri-tipi) 14 | 1. [Dahili Veri Tipi](#dahili-veri-tipi) 15 | 1. [Türetilmiş Veri Tipi](#türetilmiş-veri-tipi) 16 | 1. [Diziler](#diziler) 17 | 1. [Dizilerde Temel İşlemler](#dizilerde-temel-işlemler) 18 | 1. [Ekleme İşlemi](#ekleme-işlemi) 19 | 1. [Silme İşlemi](#silme-işlemi) 20 | 1. [Arama İşlemi](#arama-işlemi) 21 | 1. [Güncelleme İşlemi](#güncelleme-işlemi) 22 | 1. [Listeler](#listeler) 23 | 1. [Bağlı Liste(Linked List)](#bağlı-liste) 24 | 1. [Bağlı Liste Türleri](#bağlı-liste-türleri) 25 | * [Tek Yönlü Bağlı Liste(Singly Linked List)](#tek-yönlü-bağlı-liste) 26 | * [Çift Yönlü Bağlı Liste(Doubly Linked List)](#çift-yönlü-bağlı-liste) 27 | * [Dairesel Bağlı Liste(Circular Linked List)](#dairesel-bağlı-liste) 28 | 1. [Trees(Ağaçlar)](#trees) 29 | 1. [Binary Trees(İkili Ağaçlar)](#binary-trees) 30 | 1. [Properties of Binary Trees(İkili Ağaçların Özellikleri)](#properties-of-binary-trees) 31 | 1. [Types of Binary Trees(İkili Ağaçların Türleri)](#types-of-binary-trees) 32 | * [Full Binary Tree](#full-binary-tree) 33 | * [Complete Binary Tree](#complete-binary-tree) 34 | * [Perfect Binary Tree](#perfect-binary-tree) 35 | * [Balanced Binary Tree](#balanced-binary-tree) 36 | 1. [Kaynakça](#kaynakça) 37 | 38 | ## Veri Yapılarına Genel Bakış 39 | 40 | Veri Yapısı, verileri verimli kullanmak için verileri organize etmenin sistematik bir yoludur. Aşağıdaki terimler bir 41 | veri yapısının temel terimleridir. 42 |
    43 |
  • 44 | Arayüz - Her veri yapısının bir arayüzü vardır. Arayüz bir veri yapısının desteklediği işlem kümesini 45 | temsil 46 | eder. Bir arabirim yalnızca desteklenen işlemlerin listesini, kabul edebilecekleri parametre türlerini ve bu 47 | işlemlerin 48 | türünü döndürür. 49 |
  • 50 |
  • Uygulama - Uygulama, bir veri yapısının iç temsilini sağlar. Uygulama ayrıca, veri yapısının 51 | işlemlerinde 52 | kullanılan algoritmaların tanımını sağlar. 53 |
  • 54 |
55 | 56 | ## Veri Yapısının Özellikleri 57 | 58 |
    59 |
  • 60 | Doğruluk - Veri Yapısı uygulaması, arayüzünü doğru şekilde uygulamalıdır. 61 |
  • 62 |
  • 63 | Zaman Karmaşıklığı - Veri yapısı işlemlerinin çalışma süresi veya yürütme süresi mümkün olduğu kadar 64 | küçük 65 | olmalıdır. 66 |
  • 67 |
  • 68 | Karmaşıklığı - Bir veri yapısı işleminde bellek kullanımı mümkün olduğunca az olmalıdır. 69 |
  • 70 |
71 | 72 | ## Veri Yapısı İhtiyacı 73 | 74 | Uygulamalar karmaşıklaştıkça ve veri bakımından zenginleştikçe, uygulamaların bugünlerde karşılaştığı üç genel 75 | sorun var. 76 |
    77 |
  • 78 | Veri Arama - Bir mağazanın 1 milyon (10^6) kaleminden oluşan bir envanteri düşünün. Eğer uygulamanın 79 | amacı 80 | bir öğeyi 81 | aramaksa. 82 | Aramayı yavaşlatan sebep her seferinde 1 milyon (10^6) maddede arama yapması gerekmesidir. Veriler büyüdükçe 83 | arama 84 | yavaşlar. 85 |
  • 86 |
  • 87 | İşlemci hızı - İşlemci hızı çok yüksek olabilir fakat, veriler milyarca olduğu takdirde bu işlemci hızı 88 | bir 89 | işe 90 | yaramaz. 91 |
  • 92 |
  • 93 | Birden çok istek - Binlerce kullanıcı bir web sunucusunda aynı anda veri arayabildiğinden, veri ararken 94 | çok 95 | hızlı 96 | sunucu bile başarısız olur. 97 |
  • 98 | Veri yapıları yukarıdaki problemleri çözmek için bize yardımcı olur. Veriler, veri yapısında tüm öğelerin aranması 99 | gerekmeyebilecek ve gerekli veriler neredeyse anında aranabilecek şekilde düzenlenebilir. 100 | 101 |
102 | 103 | ## Yürütme Süresi Kutuları 104 | 105 | Çeşitli veri yapısının yürütme süresini göreceli bir şekilde karşılaştırmak için kullanılan üç durum vardır. 106 |
    107 |
  • 108 | En Kötü Durum - Bu, belirli bir veri yapısı işleminin alabileceği maksimum süreyi aldığı senaryodur. Bir 109 | işlemin 110 | en 111 | kötü durum süresi ƒ (n) ise, bu işlem ƒ (n) 'in n işlevini temsil ettiği ƒ (n) zamandan daha uzun sürmez. 112 |
  • 113 |
  • 114 | Ortalama Durum - Bu, bir veri yapısının işleminin ortalama yürütme zamanını gösteren senaryodur. Bir 115 | işlem 116 | yürütme 117 | sırasında ƒ (n) zaman alırsa, m işlemleri mƒ (n) zaman alır. 118 |
  • 119 |
  • 120 | En İyi Durum - Bu, bir veri yapısının çalışmasının mümkün olan en az yürütme süresini gösteren 121 | senaryodur. 122 | Bir 123 | işlem 124 | yürütmede ƒ (n) zaman alırsa, gerçek işlem ƒ (n) kadar maksimum olan rasgele sayı olarak zaman alabilir. 125 |
  • 126 |
127 | 128 | ## Temel Terminoloji 129 | 130 |
    131 |
  • 132 | Veri - Veri değer veya değer kümesidir. 133 |
  • 134 |
  • 135 | Veri Öğesi - Veri öğesi, tek bir değer birimini ifade eder. 136 |
  • 137 |
  • 138 | Grup Öğeleri - Alt öğelere ayrılan veri öğesine Grup Öğeleri denir. 139 |
  • 140 |
  • 141 | Temel Öğeler - Bölünemeyen veri öğesi, Temel Öğeler olarak adlandırılır. 142 |
  • 143 |
  • 144 | Nitelik ve Varlık - Varlık, değer atanabilecek belirli nitelikleri veya özellikleri içeren varlıktır. 145 |
  • 146 |
  • 147 | Varlık Kümesi - Benzer özellikteki varlıklar, bir varlık kümesini oluşturur. 148 |
  • 149 |
  • 150 | Alan - Alan, bir işletmenin bir niteliğini temsil eden tek bir temel bilgi birimidir. 151 |
  • 152 |
  • 153 | Kayıt - Kayıt, belirli bir varlığın alan değerlerinin toplamıdır. 154 |
  • 155 |
  • 156 | Dosya - Dosya, belirli bir varlık kümesindeki varlıkların kayıtlarının toplamıdır. 157 |
  • 158 |
159 | 160 | ## Veri Yapıları Temelleri 161 | 162 | Veri Yapısı, verileri verimli kullanılabilecek şekilde organize etmenin bir yoludur. Bu döküman veri yapısı ile ilgili 163 | temel terimleri açıklamaktadır. 164 | 165 | ### Veri Tanımı 166 | 167 | Veri Tanımı, aşağıdaki özelliklere sahip belirli bir veriyi tanımlar. 168 |
    169 |
  • 170 | Atomik - Tanım tek bir kavram tanımlamalıdır 171 |
  • 172 |
  • 173 | İzlenebilir - Tanım, bazı veri öğelerine eşlenebilmelidir. 174 |
  • 175 |
  • 176 | Düzgün - Tanım net olmalıdır. 177 |
  • 178 |
  • 179 | Açık ve Özlü - Tanım anlaşılabilir olmalıdır. 180 |
  • 181 |
182 | 183 | ### Veri Nesnesi 184 | 185 | Veri Nesnesi, verileri olan bir nesneyi temsil eder. 186 | 187 | ### Veri tipi 188 | 189 | Veri türü, karşılık gelen veri türüyle kullanılabilecek değerleri, karşılık gelen veri türünde gerçekleştirilebilecek 190 | işlem türlerini belirleyen tam sayı, dizge vb. gibi çeşitli veri türlerini sınıflandırma yoludur. İki tip veri türü - 191 |
    192 |
  • 193 | Dahili Veri Tipi 194 |
  • 195 |
  • 196 | Türetilmiş Veri Türü 197 |
  • 198 |
199 | 200 | ### Dahili Veri Tipi 201 | 202 | Bir dilin yerleşik desteğine sahip olduğu veri türleri, Dahili Veri türleri olarak bilinir. Örneğin, dillerin çoğu 203 | yerleşik veri türlerini takip etmeyi sağlar. 204 |
    205 |
  • 206 | Tamsayılar 207 |
  • 208 |
  • 209 | Boole (doğru, yanlış) 210 |
  • 211 |
  • 212 | Yüzer (Ondalık sayılar) 213 |
  • 214 |
  • 215 | Karakter ve Dizeler 216 |
  • 217 |
218 | 219 | ### Türetilmiş Veri Tipi 220 | 221 | Birinden veya başka bir şekilde uygulanabileceğinden uygulamadan bağımsız olan veri tipleri, türetilmiş veri türleri 222 | olarak bilinir. Bu veri tipleri normalde birincil veya dahili veri tiplerinin ve bunlarla ilişkili işlemlerin 223 | birleşimiyle oluşturulur. Örneğin - 224 |
    225 |
  • 226 | Liste 227 |
  • 228 |
  • 229 | Dizi 230 |
  • 231 |
  • 232 | Yığın 233 |
  • 234 |
  • 235 | Kuyruk 236 |
  • 237 |
238 |

239 | Temel işlemler 240 |

241 | Veri yapılarındaki veriler belirli işlemlerle işlenir. Seçilen belirli veri yapısı büyük ölçüde veri yapısı üzerinde 242 | yapılması gereken işlemin sıklığına bağlıdır. 243 |
    244 |
  • 245 | Traversing(Çaprazlama ilerleme) 246 |
  • 247 |
  • 248 | Searching(Arama) 249 |
  • 250 |
  • 251 | Insertion(Ekleme) 252 |
  • 253 |
  • 254 | Deletion(Silme) 255 |
  • 256 |
  • 257 | Sorting(Sıralama) 258 |
  • 259 |
  • 260 | Merging(Birleştirme) 261 |
  • 262 |
263 | 264 | ## Diziler 265 | 266 | Dizi, sabit sayıda öğeyi tutabilen bir kaptır ve bu öğeler aynı türden olmalıdır. Veri yapısının çoğu, algoritmalarını 267 | uygulamak için dizi kullanır. Array kavramlarını anlamak için önemli terimler aşağıdadır. 268 |
    269 |
  • 270 | Öğe - Dizide depolanan her öğeye öğe adı verilir. 271 |
  • 272 |
  • 273 | Dizin - Bir dizideki bir öğenin her konumu, öğeyi tanımlamak için kullanılan sayısal bir dizine 274 | sahiptir. 275 |
  • 276 |
277 | 278 | ## Dizi Temsili 279 | 280 | Diziler, farklı dillerde çeşitli şekillerde açıklanabilir. Örnek olarak, C dizi tanımını ele alalım. 281 | 282 | dizi temsili 283 | dizi temsili 1 284 | 285 | 286 | Yukarıdaki resmlere göre, dikkate alınması gereken önemli noktalar aşağıdadır. 287 |
    288 |
  • 289 | Diziler 0 ile başlar. 290 |
  • 291 |
  • 292 | Dizi uzunluğu 10'dur, yani 10 öğe saklayabilir. 293 |
  • 294 |
  • 295 | Her elemana indeksi üzerinden erişilebilir. 296 |
  • 297 |
298 | 299 | ## Dizilerde Temel işlemler 300 | 301 | Bir dizi tarafından desteklenen temel işlemler aşağıdadır. 302 |
    303 |
  • 304 | Traverseing(Çaprazlama ilerleme) - tüm dizi öğelerini tek tek yazdırın. 305 |
  • 306 |
  • 307 | Insertion(Ekleme) - Verilen dizine bir öğe ekler. 308 |
  • 309 |
  • 310 | Deletion(Silme) - Belirtilen dizindeki bir öğeyi siler. 311 |
  • 312 |
  • 313 | Searching(Arama) - Verilen dizini kullanarak veya değeri kullanarak bir öğeyi arar. 314 |
  • 315 |
  • 316 | Update(Güncelle) - Verilen dizindeki bir öğeyi günceller. 317 |
  • 318 |
319 | C'de, bir dizinin boyutu ile başlatıldığında, öğelerine varsayılan değerleri aşağıdaki sırayla atar. 320 | veri tipleri 321 | 322 | 323 | ### Ekleme işlemi 324 | Ekleme işlemi, bir diziye bir veya daha fazla veri öğesi eklemektir. Gereksinime bağlı olarak, başında, sonunda veya 325 | herhangi bir dizi içerisinde yeni bir öğe eklenebilir. 326 | 327 | 328 | ### Silme İşlemi 329 | Silme, var olan bir öğeyi diziden kaldırmayı ve dizinin tüm öğelerini yeniden düzenlemeyi ifade eder. 330 | 331 | ### Arama İşlemi 332 | Bir dizi öğesini, değerini veya indisini temel alarak arama yapabilirsiniz. 333 | 334 | ### Güncelleme İşlemi 335 | Güncelleme işlemi, belirli bir indiste varolan bir öğenin güncellenmesi anlamına gelir. 336 | 337 | ## Listeler 338 | 339 | ## Bağlı Liste 340 | 341 | Bağlı bir liste, bağlantılar yoluyla birbirine bağlanmış bir dizi veri yapısıdır. 342 | 343 | Bağlı Liste, öğeleri içeren bir bağlantılar dizisidir. Her bağlantı başka bir bağlantıya bağlantı içerir. Bağlı 344 | liste, diziden sonraki en çok kullanılan veri yapısıdır. Bağlı Liste kavramını anlamak için önemli terimler 345 | aşağıdadır. 346 |
    347 |
  • 348 | Bağlantı - Bağlı listedeki her bağlantı, öğe olarak adlandırılan verileri saklayabilir. 349 |
  • 350 |
  • 351 | Sonraki - Bağlı listedeki her bağlantıda İleri adlı bir sonraki bağlantıya bir bağlantı bulunur. 352 |
  • 353 |
  • 354 | LinkedList - Linked List, First adındaki ilk linke bağlantıyı içerir. 355 |
  • 356 |
357 | 358 |

Bağlı Liste Temsili

359 | 360 | Bağlı liste, her düğümün bir sonraki düğüme işaret ettiği bir düğüm zinciri olarak örneklendirilebilir. 361 | veri tipleri 362 | Yukarıdaki resme göre, dikkate alınması gereken önemli noktalar aşağıdadır. 363 |
    364 |
  • 365 | Bağlı Liste, önce adı verilen bir bağlantı elemanı içerir. 366 |
  • 367 |
  • 368 | Her bağlantı bir veri alanı ve bir sonraki adı verilen bir bağlantı alanı taşır. 369 |
  • 370 |
  • 371 | Her link bir sonraki linkini kullanarak bir sonraki linke bağlanır. 372 |
  • 373 |
  • 374 | Son bağlantı, listenin sonunu işaretlemek için boş bir bağlantı taşır. 375 |
  • 376 |
377 | 378 | ### Bağlı Liste Türleri 379 | 380 | Çeşitli Bağlı liste türleri aşağıdadır. 381 |
    382 |
  • 383 | Tek Yönlü Bağlı Liste - Öğe gezinme sadece ileri. 384 |
  • 385 |
  • 386 | Çift Yönlü Bağlı Liste - Öğeler ileri ve geri götürebilir. 387 |
  • 388 |
  • 389 | Dairesel Bağlı Liste - Son öğe, bir sonraki gibi ilk öğenin bağlantısını içerir ve ilk öğe, önceki 390 | gibi 391 | bir son 392 | öğenin bağlantısını içerir. 393 |
  • 394 |
395 | 396 | ## Tek Yönlü Bağlı Liste 397 | 398 |

Temel işlemler

399 | 400 | Bir liste tarafından desteklenen temel işlemler aşağıdadır. 401 |
    402 |
  • 403 | Ekleme - Listenin başına bir öğe ekler. 404 |
  • 405 |
  • 406 | Silme - Listenin başındaki bir öğeyi siler. 407 |
  • 408 |
  • 409 | Görüntüleme - Listenin tamamını görüntüler. 410 |
  • 411 | Arama - Verilen anahtarı kullanarak bir öğeyi arar. 412 |
  • 413 |
  • 414 | Silme - Verilen anahtarı kullanarak bir öğeyi siler. 415 |
  • 416 |
417 | 418 | ## Çift Yönlü Bağlı Liste 419 | 420 | Çift Yönlü Liste, Tek Yönlü Listeye göre kolayca ileri veya geri gezinmenin her iki yönde de mümkün olduğu 421 | Yönlü listenin bir çeşididir. İkili Yönlü liste kavramını anlamak için önemli terimler aşağıdadır. 422 |
    423 |
  • 424 | Bağlantı - Yönlü listedeki her bağlantı, öğe olarak adlandırılan verileri saklayabilir. 425 |
  • 426 |
  • 427 | Sonraki - Yönlü listedeki her bağlantıda İleri adlı bir sonraki bağlantıya bir bağlantı bulunur. 428 |
  • 429 |
  • 430 | Önceki - Bağlanan listedeki her bağlantı, Önceki adlı önceki bağlantıya ait bir bağlantı içerir. 431 |
  • 432 |
  • 433 | LinkedList - Bağlı bir Liste, İlk adı verilen ilk bağlantıya ve Son adı verilen son bağlantıya bağlantı 434 | bağlantısını 435 | içerir. 436 |
  • 437 |
438 | 439 |

Çift Yönlü Liste

440 | 441 | cift yonlu 442 | Yukarıdaki resme göre, dikkate alınması gereken önemli noktalar aşağıdadır. 443 |
    444 |
  • 445 | Çift Bağlantılı Liste, ilk ve son olarak adlandırılan bir bağlantı öğesi içerir. 446 |
  • 447 |
  • 448 | Her bağlantı bir veri alanı ve sonraki ve prev olarak adlandırılan iki bağlantı alanı taşır. 449 |
  • 450 |
  • 451 | Her link bir sonraki linkini kullanarak bir sonraki linke bağlanır. 452 |
  • 453 |
  • 454 | Her bağlantı önceki bağlantıyı kullanarak önceki bağlantıyı kullanarak bağlanır. 455 |
  • 456 |
  • 457 | Son bağlantı, listenin sonunu işaretlemek için boş bir bağlantı taşır. 458 |
  • 459 |
460 | 461 |

Temel işlemler

462 | Bir liste tarafından desteklenen temel işlemler aşağıdadır. 463 |
    464 |
  • 465 | Ekleme - Listenin başına bir öğe ekler. 466 |
  • 467 |
  • 468 | Silme - Listenin başındaki bir öğeyi siler. 469 |
  • 470 |
  • 471 | Sonuncuyu Ekle - Listenin sonuna bir öğe ekler. 472 |
  • 473 |
  • 474 | Sonuncuyu Sil - Bir öğeyi listenin sonundan siler. 475 |
  • 476 |
  • 477 | Sonra Ekle - Listedeki bir öğenin arkasına bir öğe ekler. 478 |
  • 479 |
  • 480 | Sil - tuşunu kullanarak listeden bir öğe siler. 481 |
  • 482 |
  • 483 | İleri göster - Listenin tamamını ileri şekilde görüntüler. 484 |
  • 485 |
  • 486 | Geriye doğru göster - Listenin tamamını geriye doğru görüntüler. 487 |
  • 488 |
489 | 490 | ## Dairesel Bağlı Liste 491 | 492 | Dairesel Bağlı Liste, ilk öğenin son öğeye, son öğenin ilk öğeye işaret ettiği Bağlı listenin bir çeşididir. 493 | Hem Tekli Bağlı Liste hem de İkili Bağlı Liste, dairesel bir Bağlı listeye eklenebilir. 494 | 495 |

Dairesel Olarak Tek Bağlı Liste

496 | Tek başına bağlı listede, son düğümün bir sonraki göstericisi ilk düğüme işaret eder. 497 | 498 | dairesel bagli liste 499 |

Dairesel Olarak İkili Bağlı Liste

500 | İkili Bağlı listede, son düğümün bir sonraki göstericisi, ilk düğüme işaret eder ve ilk düğümün bir önceki 501 | göstericisi, her iki yönde de dairesel yapan son düğüme işaret eder. 502 | dairesel bagli liste1 503 | Yukarıdaki resme göre, dikkate alınması gereken önemli noktalar aşağıdadır. 504 |
    505 |
  • 506 | Son bağlantının sonraki listesi, hem tek tek hem de iki kat bağlantılı listedeki ilk listeye işaret eder. 507 |
  • 508 |
  • 509 | İkili bağlantı durumunda, ilk bağlantı önceki listenin sonunu gösterir. 510 |
  • 511 |
512 | 513 |

Temel işlemler

514 | Dairesel bir liste tarafından desteklenen önemli operasyonlar aşağıdadır. 515 |
    516 |
  • 517 | insert - Listenin başına bir öğe ekler. 518 |
  • 519 |
  • 520 | delete - Bir öğeyi listenin başından siler. 521 |
  • 522 |
  • 523 | display - Listeyi görüntüler. 524 |
  • 525 |
526 | 527 | ## Trees 528 | 529 | Ağaçlar; dizilerden, bağlı listelerden, doğrusal veri yapıları olan yığın ve kuyruklardan farklı olarak hiyerarşik veri yapılarıdır. En üstteki düğüme ağacın kökü denir. Bir düğümün altındaki düğümlere o düğümün çocukları denir. Bir düğümün üzerindeki düğüme o düğümün ebeveyni adı verilir. Aşağıdaki örnek için, "A", "F" nin çocuğu ve "F", "A" nın ebeveynidir. Çocuğu olmayan düğümlere ise yaprak adı verilir. 530 | 531 | Binary Tree 532 | 533 | #### Neden Ağaçlar? 534 | 535 | * Ağaçları doğal olarak hiyerarşi oluşturan bilgileri depolamak istediğimiz zaman kullanabiliriz. Örneğin, bir bilgisayarlardaki dosya sistemleri. 536 | * Ağaçlar orta düzeyde erişim veya arama sağlar(Bağlı listelerden daha hızlı, dizilerden daha yavaş). 537 | * Ağaçlar orta düzeyde ekleme veya silme sağlar(Dizilerden daha hızlı, sıralı olmayan bağlı listelerden daha yavaş). 538 | * Bağlı listelerdeki gibi ama dizilerden farklı olarak, ağaçların düğümleri işaretçiler kullanılarak bağlandığı için, düğüm sayısında üst sınır yoktur. 539 | 540 | ### Binary Trees 541 | 542 | Elemanlarının her birinin en fazla 2 çocuğa sahip olduğu ağaçlara ikili ağaç denir. İkili bir ağaçtaki her düğümün sadece 2 çocuğu olabileceğinden, genellikle bunları sol ve sağ çocuk olarak adlandırırız. 543 | 544 | #### C Dilinde İkili Ağaç Gösterimi 545 | 546 | Bir ağaç, ağaçtaki en üst düğüme işaretçi ile temsil edilir. Ağaç boşsa, kök değeri NULL olur. 547 | Bir Ağaç düğümü aşağıdaki bölümleri içerir. 548 | * Veri 549 | * Sol çocuk için işaretçi 550 | * Sağ çocuk için işaretçi 551 | 552 | #### Properties of Binary Trees 553 | 554 |
    555 |
  • 556 | Bir ikili ağacın 'k' seviyesindeki maksimum düğüm sayısı 2k-1'dir. Burada seviye, kökten düğüme giden yoldaki düğüm sayısıdır (kök ve düğüm dahil). Kök seviyesi 1'dir. Örneğin;
    557 | Kök için(k = 1); Düğüm Sayısı = 2k - 1 = 1 olur. 558 |
  • 559 |
  • 560 | H yüksekliğindeki bir ikili ağaçtaki maksimum toplam düğüm sayısı 2H - 1'dir. Burada yükseklik, kökten yaprak yoluna kadar olan yüksekliktir. Tek düğümlü bir ağacın yüksekliği 1 olarak kabul edilir. Tüm seviyelerde maksimum düğüm varsa, o ağaçtaki maksimum düğüm sayısına ulaşılmıştır. Bu nedenle, H yüksekliğinde bir ikili ağaçtaki toplam maksimum düğüm sayısı 1 + 2 + 4 + .. + 2H-1'dir.
    Bu ise H terimli basit bir geometrik seridir ve bu serinin toplamı 2H - 1'dir. 561 |
  • 562 |
  • 563 | N düğümlü bir ikili ağaç için mümkün olan minimum yükseklik veya minimum seviye sayısı Log2 (N + 1)dir. 564 |
  • 565 |
  • 566 | L sayıda yaprağı olan ikili ağaç var olabilir mi? Bunun için Log2L + 1 denkleminden faydalanırız. 567 | Bir ikili ağaç, tüm seviyeleri tamamen dolu iken maksimum yaprak sayısına (ve minimum seviye sayısına) sahiptir. Tüm yaprakların L seviyesinde olduğunu düşünerek aşağıdaki eşitliği inceleyelim:
    568 |    L <= 2L-1
    569 |    L = Log2L + 1 => eşitliği sağlanıyorsa L minimum seviye sayısıdır. 570 |
  • 571 |
  • 572 | Her düğümün 0 veya 2 çocuğunun olduğu bir ikili ağaçta, yaprak düğüm sayısı her zaman iki çocuklu düğümlerin sayısından bir fazladır.
    573 | L = Yaprak Düğüm Sayısı
    T = İki Çocuklu Düğüm Sayısı
    L = T + 1 574 |
  • 575 |
576 | 577 | #### Types of Binary Trees 578 | 579 |
    580 |
  • 581 | Full Binary Tree - Her düğümünün 0 veya 2 çocuğunun olduğu ağaçlar Full Binary Tree(Tam İkili Ağaç) olarak adlandırılır. Aynı zamanda; yaprakları dışındaki tüm düğümlerinin iki çocuğu olan ağaçlar olarak da tanımlayabiliriz. Full Binary Tree örnekleri;
    582 | Full Binary Tree
    583 | Tam ikili ağaçlarda yaprak düğüm sayısı iç düğüm sayısından 1 fazladır.
    584 | L = Yaprak düğüm sayısı, I = İç düğüm sayısı
    L = I + 1 585 |
  • 586 |
  • 587 | Complete Binary Tree - Son seviye hariç tüm seviyelerin tamamen dolu olduğu ve son seviyenin mümkün olduğu kadar düğüme sahip olduğu ağaçlar Complete Binary Tree(tamamlanmış ikili ağaçlar) olarak adlandırılırlar. Örnekler;
    588 | Complete Binary Tree
    589 |
  • 590 |
  • 591 | Perfect Binary Tree - Tüm iç düğümlerin iki çocuğa sahip olduğu ve tüm yaprakların aynı seviyede olduğu ağaçlar Perfect Binary Tree(mükemmel ikili ağaç) olarak adlandırılırlar. H yüksekliğindeki mükemmel ikili ağaç 2H - 1 düğüme sahiptir. Örnekler;
    592 | Perfect Binary Tree
    593 |
  • 594 |
  • 595 | Balanced Binary Tree - Her iç düğümün en fazla bir çocuğunun olduğu ağaçlar Balanced Binary Tree(dengeli ikili ağaç) olarak adlandırılırlar. Bu tür ağaçlar performans bakımından bağlı listelerle aynıdır. Bu ağaçlarda kök ile her yaprağın yolu aynıdır.
    596 | Balanced Binary Tree
    597 |
  • 598 |
599 | 600 | ## Kaynakça 601 |
    602 |
  • http://www.tutorialspoint.com/
  • 603 |
  • https://www.geeksforgeeks.org/
  • 604 |
  • https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-spring-2008/lecture-notes/
  • 605 | 606 |
607 | -------------------------------------------------------------------------------- /bagli_liste.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/bagli_liste.jpg -------------------------------------------------------------------------------- /binary_tree_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/binary_tree_0.png -------------------------------------------------------------------------------- /binary_tree_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/binary_tree_1.png -------------------------------------------------------------------------------- /binary_tree_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/binary_tree_2.png -------------------------------------------------------------------------------- /binary_tree_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/binary_tree_3.png -------------------------------------------------------------------------------- /binary_tree_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/binary_tree_4.png -------------------------------------------------------------------------------- /cift_yonlu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/cift_yonlu.jpg -------------------------------------------------------------------------------- /dairesel_bagli_liste.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/dairesel_bagli_liste.jpg -------------------------------------------------------------------------------- /dairesel_bagli_liste1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/dairesel_bagli_liste1.jpg -------------------------------------------------------------------------------- /dizi_temsili.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/dizi_temsili.png -------------------------------------------------------------------------------- /dizi_temsili1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/dizi_temsili1.png -------------------------------------------------------------------------------- /veri_tipleri.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zumrudu-anka/DataStructures/11b5f9e4bb42b97c1977f21436afe58bed667b1d/veri_tipleri.jpg --------------------------------------------------------------------------------