From 39405cda89475a10d186da114db527317e410203 Mon Sep 17 00:00:00 2001 From: Inzamam Asghar Date: Mon, 26 Oct 2020 23:54:48 +0500 Subject: [PATCH] Doubly Linked List programs --- Double Linkedlist/Header.h | 245 ++++++++++++++++++++++++ Double Linkedlist/New Text Document.txt | 9 + Double Linkedlist/Stack.h | 91 +++++++++ Double Linkedlist/main.cpp | 226 ++++++++++++++++++++++ 4 files changed, 571 insertions(+) create mode 100644 Double Linkedlist/Header.h create mode 100644 Double Linkedlist/New Text Document.txt create mode 100644 Double Linkedlist/Stack.h create mode 100644 Double Linkedlist/main.cpp diff --git a/Double Linkedlist/Header.h b/Double Linkedlist/Header.h new file mode 100644 index 0000000..02fc5dd --- /dev/null +++ b/Double Linkedlist/Header.h @@ -0,0 +1,245 @@ +#ifndef LINKEDLIST_H +#define LINKEDLIST_H + +#include ; +#include "Stack.h"; +using namespace std; +class linkedlist +{ + + +public: + struct Node + { + Node *next = NULL; + Node *prev = NULL; + double val ; + + }; + Node *head=NULL; + Node * trav = NULL; + Node * temp = NULL; + + + + + void insert(double key) { + + Node *newNode = new Node(); + newNode->val = key; + newNode->next = NULL; + + Node *forw = NULL; + Node *back = NULL; + + if (head == NULL) + { + head = newNode; + + } + else + { + forw = head; + while (forw) + { + back = forw; + forw = forw->next; + } + back->next = newNode; + } + } + + void removeDuplicate() { + + Node *prev = head; + Node *temp = NULL; + + + while (prev->next!=NULL) + { + + if (prev->val==prev->next->val) + { + temp = prev->next; + prev->next = temp->next; + delete temp; + } + else + { + prev = prev->next; + + } + + + } + + + } + + /*void insert(double key) { + + Node *newNode = new Node(); + newNode->val = key; + newNode->next = NULL; + + Node *forw = NULL; + Node *back = NULL; + + if (head==NULL) + { + head = newNode; + + } + else + { + forw = head; + + while (forw!=NULL&&forw->val < key) + { + back = forw; + forw = forw->next; + } + + if (back==NULL) + { + head = newNode; + newNode->next = forw; + forw->prev = newNode; + } + else if (forw!= NULL) + { + back->next = newNode; + newNode->next = forw; + forw->prev = newNode; + } + else + { + back->next = newNode; + + } + + + } + + + }*/ + + + void display() { + + Node *trav = head; + while (trav != NULL) + { + std::cout << trav->val << ">>"; + trav = trav->next; + } + + + } + void deletenode(double key) { + + Node * frwd=head; + Node * prev = NULL; + Node * store = NULL; + + + while (frwd->val!=key &&frwd!= NULL) + { + prev = frwd; + frwd = frwd->next; + } + + if (frwd->val==head->val) + { + store = head; + head = frwd->next; + delete store; + } + else if (frwd->next!= NULL) + { + store = frwd; + frwd = frwd->next; + prev->next = frwd; + frwd->prev = prev; + delete store; + } + else + { + prev->next = NULL; + } + + + } + Node* detectloop(Node *head) { + + Node *p = head; + Node *q = head; + + while (p&&q&&q->next) + { + p = p->next; + q = q->next->next; + if (p==q) + { + cout << "loop Detected"; + return p; + } + } + cout << "No loop Detected"; + + return NULL; + } + + + void middleNode(Node *head) { + + Node *slow = head; + Node *fast = head; + + while (fast!=NULL&& fast->next!=NULL) + { + + fast = fast->next->next; + slow = slow->next; + + + } + + cout << "Middle Node is :" << slow->val; + } + + void removeLoop(Node *p, Node *head) { + + Node *q = head; + + while (p->next!=q->next) + { + p = p->next; + q = q->next; + } + + p->next = NULL; + + } + + + void reverseLL(Node *head) { + + + Node *tmp = NULL; + Node *ptr = head; + while (ptr->val != 10) { + tmp = ptr->next; + ptr->next = ptr->prev; + ptr->prev = tmp; + if (tmp==NULL) { + head = ptr; + break; + } + + ptr = tmp; + } + display(); + } +}; +#endif \ No newline at end of file diff --git a/Double Linkedlist/New Text Document.txt b/Double Linkedlist/New Text Document.txt new file mode 100644 index 0000000..d312554 --- /dev/null +++ b/Double Linkedlist/New Text Document.txt @@ -0,0 +1,9 @@ +This program contain all double linked ist problems listed below... + +.) Delete node from start, End or middle +.) Check loop in a linked list, looped index nad removal of loop +.) Add a node +.) inorder, preorder,postorder +.) Finding middle node +.) finding given node +.) No of occurance of a value \ No newline at end of file diff --git a/Double Linkedlist/Stack.h b/Double Linkedlist/Stack.h new file mode 100644 index 0000000..3775840 --- /dev/null +++ b/Double Linkedlist/Stack.h @@ -0,0 +1,91 @@ + +#ifndef INTSTACK_H + #define INTSTACK_H +#include ; +using namespace std; + + class IntStack + { + private: + int *stackArray; // Pointer to the stack array + int stackSize; // The stack size + // Indicates the top of the stack + + public: + int top; + // Constructor + IntStack(int size =10) + { + stackArray = new int[7]; + stackSize = size; + top = -1; + + } + + + + + // Destructor + ~IntStack() + { + delete[] stackArray; + + } + + // Stack operations + void push(int num) + { + if (isFull()) + { + cout << "The stack is full.\n"; + } + else + { + top++; + stackArray[top] = num; + } + + } + int pop() + + { + int num; + if (isEmpty()) + { + cout << "The stack is empty.\n"; + } + else + { + num = stackArray[top]; + top--; + } + return num; + + } + + bool isFull() const + { + bool status; + + if (top == stackSize -1) + status = true; + else + status = false; + + return status; + + } + bool isEmpty() const + { + bool status; + + if (top == -1) + status = true; + else + status = false; + + return status; + } + }; + #endif + diff --git a/Double Linkedlist/main.cpp b/Double Linkedlist/main.cpp new file mode 100644 index 0000000..7aafac5 --- /dev/null +++ b/Double Linkedlist/main.cpp @@ -0,0 +1,226 @@ +#include ; +using namespace std; +#include "Stack.h" +#include "Header.h" + + + +void function(linkedlist &l, IntStack &s) { + + IntStack store; + + int sum = 0; + int index=0; + bool flag = false; + l.trav = l.head; + int value; + while (l.trav!=NULL) + { + if (l.trav->val<0) + { + l.trav->val = -l.trav->val; + + } + flag = false; + if (s.isEmpty()) + {s.push(l.trav->val);} + else + { + while (!s.isEmpty()) + { + index = s.pop(); + sum +=index ; + + if (sum==l.trav->val) + { + sum = 0; + store.top = -1; + flag = true; + break; + } + store.push(index); + } + if (flag==false) + { + while (!store.isEmpty()) + { + s.push(store.pop()); + sum = 0; + } + s.push(l.trav->val); + } + } + l.trav = l.trav->next; + } + + while (!s.isEmpty()) + { + cout << s.pop() << endl; + } + + +} + + +bool isPalindrome(linkedlist &l, IntStack &s) +{ + l.trav = l.head; + int temp; + while (l.trav != NULL) + { + s.push(l.trav->val); + l.trav = l.trav->next; + } + + l.trav = l.head; + while (l.trav!=NULL) + { + temp = s.pop(); + if (temp!=l.trav->val) + { + return false; + } + + l.trav = l.trav->next; + + } + + return true; +} + + +void mergeLL(linkedlist l, linkedlist ll) { + + + ll.temp = NULL; + l.temp = NULL; + + l.trav =l.head; + ll.trav = ll.head; + + while (l.trav!=NULL|| ll.trav!=NULL ) + { + + ll.temp = ll.trav->next; + ll.trav->next = l.trav->next; + ll.trav->prev = l.trav; + l.trav->next = ll.trav; + if (ll.trav->next) + { + l.trav = ll.trav->next; + l.trav->prev = ll.trav; + ll.trav = ll.temp; + } + else + { + l.trav = ll.trav; + break; + } + + + + l.display(); + cout << endl; + + } + + +} +struct Node +{ + Node *next = NULL; + Node *prev = NULL; + double val; + +}; + + +void hashing(Node* arr[] ,int val) { + int index = 0; + Node *newNode = new Node(); + newNode->val = val; + index = val % 10; + Node *trav = arr[index]; + if (trav) + { + while (trav->next != NULL) + { + trav = trav->next; + } + trav->next = newNode; + } + else + { + trav = newNode; + } + + + + + trav= arr[index]; + while (trav!= NULL) + { + cout << trav->val<<"-->"; + trav = trav->next; + } + +} + + + + +int main() { + + + + Node* arr[10] = {}; + + + hashing(arr,1); + hashing(arr, 1); + hashing(arr, 1); + hashing(arr, 1); + hashing(arr, 1); + hashing(arr, 1); + + for (int i = 0; i < 10; i++) + { + cout << arr[i]->val; + + } + + + + + /*IntStack s; + linkedlist l; + linkedlist ll; + + l.insert(1); + l.insert(2); + l.insert(3); + l.insert(4); + l.insert(3); + l.insert(4); l.insert(3); + l.insert(4); + + ll.insert(11); + ll.insert(22); + ll.insert(33); + ll.insert(44); + + mergeLL(l, ll); + + */ + //cout<