diff --git a/Structures/Singlelinkedlist/Linkedlist.h b/Structures/Singlelinkedlist/Linkedlist.h new file mode 100644 index 0000000..560184f --- /dev/null +++ b/Structures/Singlelinkedlist/Linkedlist.h @@ -0,0 +1,158 @@ +#pragma once +#include"Node.h" + +template +class Linkedlist +{ +private: + Node* pHead; + int size; + +public: + Linkedlist() { + pHead = NULL; + size = 0; + } + ~Linkedlist() { + pHead = NULL; + size = 0; + } + + void insertdata(T data) { + Node* pNode = new Node(data); + if (pHead == NULL) + { + pHead = pNode; + size++; + return; + } + else { + Node* walker = pHead; + + while (walker->pNext != NULL) + { + if (walker->data == data) return; + walker = walker->pNext; + } + + if (walker->data == data) return; + walker->pNext = pNode; + size++; + return; + } + } + + void deletedata(T data) + { + Node* pNode = new Node(data); + + if (pHead == NULL) + { + cout << "There is no node to delete" << endl; + return; + } + else { + Node* walker = pHead; + Node* pwalker = NULL; + + + while (walker != NULL) + { + pwalker = walker; + + if (data == walker->data) + { + if (walker == pHead) { + pHead = walker->pNext; + delete walker; + size--; + return; + } + else { + pwalker->pNext = walker->pNext; + delete walker; + size--; + return; + } + } + } + + if (walker == NULL) + { + cout << "There is no node with the same data to delete " << endl; + } + } + return; + } + + void searchdata(T data) + { + Node* walker = pHead; + int seq = 1; + + cout << "*********SEARCH DATA************" << endl; + + while (walker != NULL) + { + if (data == walker->data) + { + cout << "The Node " << seq << "'s value is " << walker->data << endl; + return; + } + walker = walker->pNext; + } + + if (walker == NULL) + { + cout << "There is no node with the same data to search" << endl; + } + return; + } + + void sortdata() + { + if (pHead == NULL) + { + cout << "There is no node to sort" << endl; + return; + } + + Node* pwalker; + Node* walker; + //Bubble Sort using data of node + for (pwalker = pHead; pwalker; pwalker = pwalker->pNext) + { + for (walker = pHead; walker->pNext; walker = walker->pNext) + { + if (pwalker->data < walker->data) + {//if need to change, change data + int temp = pwalker->data; + pwalker->data = walker->data; + walker->data = temp; + } + } + } + return; + } + + void showdata() + { + int seq = 1; + + if (pHead == NULL) + { + cout << "There is no node to show" << endl; + return; + } + Node* walker = pHead; + cout << "*********SHOW DATA************" << endl; + while (walker != NULL) + { + cout << "The Node " << seq << "'s value is " << walker->data << endl; + seq++; + walker = walker->pNext; + } + return; + } +}; + diff --git a/Structures/Singlelinkedlist/Node.h b/Structures/Singlelinkedlist/Node.h new file mode 100644 index 0000000..614f796 --- /dev/null +++ b/Structures/Singlelinkedlist/Node.h @@ -0,0 +1,22 @@ +#pragma once +#include + + +template +class Node +{ +public: + T data; + Node* pNext; + + Node(T data) { //constructor + pNext = NULL; + this->data = data; + } + ~Node() {//destructor + data = NULL; + pNext = NULL; + } + +}; + diff --git a/Structures/Stack/Stack/Node.h b/Structures/Stack/Stack/Node.h new file mode 100644 index 0000000..08b846c --- /dev/null +++ b/Structures/Stack/Stack/Node.h @@ -0,0 +1,20 @@ +#pragma once +#include + +template +class Node +{ +public: + T data; + Node* pNext; + + Node(T data) { + this->data = data; + pNext = NULL; + } + ~Node() { + this->data = NULL; + pNext = NULL; + } +}; + diff --git a/Structures/Stack/Stack/Stack.cpp b/Structures/Stack/Stack/Stack.cpp new file mode 100644 index 0000000..e646698 --- /dev/null +++ b/Structures/Stack/Stack/Stack.cpp @@ -0,0 +1,13 @@ +#pragma once +#include"Stackusinglinkedlist.h" + +void main() { + Stack stack; + stack.push(1); + stack.push(3); + stack.push(7); + stack.push(4); + stack.pop(); + stack.show(); + +} \ No newline at end of file diff --git a/Structures/Stack/Stack/Stackusinglinkedlist.h b/Structures/Stack/Stack/Stackusinglinkedlist.h new file mode 100644 index 0000000..35f9c7c --- /dev/null +++ b/Structures/Stack/Stack/Stackusinglinkedlist.h @@ -0,0 +1,67 @@ +#pragma once +#include"Node.h" +using namespace std; + +template +class Stack +{ +public: + Node* pHead; + + Stack() { + pHead = NULL; + } + ~Stack() { + pHead = NULL; + } + + void push(T data) { + Node* newnode = new Node(data); + + if (pHead == NULL) //if pHead ==NULL set the newnode as the pHead; + { + pHead = newnode; + return; + } + else { //if not set newnode's next + Node* walker = pHead; + newnode->pNext = walker; + pHead = newnode; + return; + } + return; + } + + void pop() { + if (pHead == NULL) + { + cout << "There is no data in stack" << endl; + return; + } + else { + Node* walker = pHead; + pHead = walker->pNext; + cout << walker->data << " is popped !" << endl; + delete walker; + } + return; + } + + void show() { + if (pHead == NULL) { + cout << "There is no data in stack" << endl; + return; + } + else { + Node* walker = pHead; + cout << "*****SHOW ALL NODE*****" << endl; + + while (walker != NULL) { + cout << walker->data << " "; + walker = walker->pNext; + } + cout << endl; + } + } +}; +