From d118e98306ab2e306b347b8a203959fa8e1c1828 Mon Sep 17 00:00:00 2001 From: Martin Marinov Date: Mon, 12 Oct 2020 14:18:16 +0300 Subject: [PATCH 1/3] Implemented linked list --- Data-Structures/LinkedList.cpp | 95 ++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 Data-Structures/LinkedList.cpp diff --git a/Data-Structures/LinkedList.cpp b/Data-Structures/LinkedList.cpp new file mode 100644 index 0000000..b54a3f1 --- /dev/null +++ b/Data-Structures/LinkedList.cpp @@ -0,0 +1,95 @@ +/* Linked List +This is basic data structure which helps you to understand +the way of writing data structures. It may be basic but presents +many concepts of dynamic structures + +Insert: O(n) +Find: O(n) +Delete: O(n) +Change Element: O(n) +Print: O(n) +*/ + +#include + +using namespace std; + +struct LinkedList +{ + int value; + LinkedList *next; + LinkedList(int val) + { + this->value=val; + this->next=NULL; + } +}; + +void Insert(LinkedList *&root, int value) +{ + if(root==NULL) + { + root=new LinkedList(value); + } + else + { + LinkedList *tmp = root; + while(tmp->next!=NULL) + { + tmp = tmp->next; + } + tmp->next=new LinkedList(value); + } +} +LinkedList* Find(LinkedList *root, int value) +{ + while(root!=NULL && root->value!=value) + { + root=root->next; + } + return root; +} +void Delete(LinkedList *&root, int value) +{ + if(root==NULL)return; + if(root->value==value) + { + LinkedList *tmp = root; + root=root->next; + delete tmp; + } + LinkedList *tmp = root; + while(tmp!=NULL && tmp->next!=NULL && tmp->next->value!=value) + { + tmp=tmp->next; + } + if(tmp!=NULL) + { + LinkedList *tmp2 = tmp->next; + tmp->next = tmp->next->next; + delete tmp2; + } +} +void Print(LinkedList *root) +{ + while(root!=NULL) + { + cout<value<<" "; + root=root->next; + } + cout< Date: Mon, 12 Oct 2020 17:52:02 +0300 Subject: [PATCH 2/3] Implemented Trie --- Data-Structures/Trie.cpp | 98 +++++++++++++++++++++++++++++++++++++++ Data-Structures/Trie.o | Bin 0 -> 21088 bytes 2 files changed, 98 insertions(+) create mode 100644 Data-Structures/Trie.cpp create mode 100755 Data-Structures/Trie.o diff --git a/Data-Structures/Trie.cpp b/Data-Structures/Trie.cpp new file mode 100644 index 0000000..d763542 --- /dev/null +++ b/Data-Structures/Trie.cpp @@ -0,0 +1,98 @@ +/* Trie or Prefix Tree is a data structure with +which you can make fast dictionary of words and +search which word is in it or isn't +Time complexity: +Insert: O(n) +Check: O(n) +Remove: O(n) +Where n is the length of given string +*/ + +#include + +using namespace std; + +struct Trie +{ + int childrenC; + Trie* children[30]; + bool endOfWord; + Trie() + { + this->childrenC=0; + this->endOfWord=false; + for(int i=0;i<30;i++) + { + this->children[i]=NULL; + } + } +}; +void Insert(Trie *&root, string word) +{ + Trie* tmp = root; + for(int i=0;ichildren[word[i]-'a']==NULL) + { + tmp->childrenC++; + tmp->children[word[i]-'a']=new Trie(); + } + tmp=tmp->children[word[i]-'a']; + if(i==word.size()-1) + { + tmp->endOfWord=true; + } + } +} +bool Check(Trie *root, string word) +{ + bool result=true; + for(int i=0;ichildren[word[i]-'a']==NULL) + { + result=false; + break; + } + root = root->children[word[i]-'a']; + if(i==word.size()-1) + { + result = root->endOfWord; + } + } + return result; +} +bool RemoveAPI(Trie* &cur,string word,int idx) +{ + if(cur==NULL)return false; + if(idx==word.size()) + { + cur->endOfWord=false; + } + else + { + bool result = RemoveAPI(cur->children[word[idx]-'a'],word,idx+1); + if(result) + { + cur->childrenC--; + delete cur->children[word[idx]-'a']; + } + } + return cur->childrenC==0; +} +void Remove(Trie* &root,string word) +{ + RemoveAPI(root,word,0); +} +int main() +{ + //Driver code. + Trie* root = new Trie(); + Insert(root,"test"); + Insert(root,"testa"); + cout<E^s#MdQ`Qz)Bu1K#gH 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 Date: Mon, 12 Oct 2020 17:52:39 +0300 Subject: [PATCH 3/3] Added Trie --- Data-Structures/Trie.o | Bin 21088 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 Data-Structures/Trie.o diff --git a/Data-Structures/Trie.o b/Data-Structures/Trie.o deleted file mode 100755 index 02797f766b87a6f0bc9796acc9cba65429c7ea23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21088 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