bsc

Comprehensive codebase and cou...
Log | Files | Refs | Activity | README | LICENSE

commit 3e3a06dd99d4050370aceea2f0e784cdbc9b46c2
parent 457f135123cba39aba1f1e25785cf0272c5185dd
Author: Amit Dutta <mail@amit.is-a.dev>
Date:   Thu, 13 Aug 2026 20:16:07 +0530

Merge pull request #37 from notamitgamer/edit-20260813-201532

added 2nd assignment
Diffstat:
Asemester_2/assignments/assignment_02.cpp | 441+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 441 insertions(+), 0 deletions(-)

diff --git a/semester_2/assignments/assignment_02.cpp b/semester_2/assignments/assignment_02.cpp @@ -0,0 +1,440 @@ +/* + * Author: Amit Dutta <amitdutta4255@gmail.com> | Date: 12 Aug 2026 + * Repo: https://github.com/notamitgamer/bsc + * License: MIT + */ + +/* Linked List all operation */ + +#include<iostream> +#include<iomanip> +using namespace std; + +typedef struct nodeType { + int data; + nodeType *next = nullptr; +} node; + +typedef struct MenuItem { + int id; + const char* name; +} menu; + +typedef class singlyLinkedList { +private: + node *head = nullptr; +public: + // insertion + void insAtBegin(); + void insAtEnd(); + void insAtPos(); + void insBeforePos(); + void insAfterPos(); + + // deletion + void delAtBegin(); + void delAtEnd(); + void delAtPos(); + void delBeforePos(); + void delAfterPos(); + + void printMenu(); + void display(); + ~singlyLinkedList(); +} sl; + +void sl :: printMenu() { + menu items[] = { + {1, "insertAtBegin()"}, {2, "insertAtEnd()"}, {3, "insertAtPos()"}, + {4, "insertBeforePos()"}, {5, "insertAfterPos()"}, {6, "deleteAtBegin()"}, + {7, "deleteAtEnd()"}, {8, "deleteAtPos()"}, {9, "deleteBeforePos()"}, + {10, "deleteAfterPos()"}, {0, "Display"}, {-1, "Exit"} + }; + + cout << "\n## Choose from below --\n--------------------------------------------\n"; + for (int i = 0; i < 12; i++) { + cout << items[i].id << ". " << left << setw(20) << items[i].name; + if (i % 2 == 1) cout << "\n"; + } +} + +void sl :: display() { + node *tmpNode = head; + cout << "\nCurrent Linked-List: "; + while(tmpNode != nullptr) { + cout << tmpNode -> data << " "; + tmpNode = tmpNode -> next; + } + cout << "nullptr\n"; +} + +sl :: ~singlyLinkedList() { + node *tmpNode; + while(head != nullptr) { + tmpNode = head; + head = head -> next; + delete tmpNode; + } + cout << "\nMemory cleared!\nExit 0\n"; +} + +void sl :: insAtBegin() { + node *newNode = new node; + cout << "\nEnter the value: "; + cin >> newNode -> data; + newNode -> next = head; + head = newNode; + cout << "\nNode added successfully!\n"; +} + +void sl :: insAtEnd() { + node *newNode = new node; + cout << "\nEnter the value: "; + cin >> newNode -> data; + + if(head == nullptr) { + head = newNode; + } else { + node *tmpNode = head; + while(tmpNode -> next != nullptr) { + tmpNode = tmpNode -> next; + } + tmpNode -> next = newNode; + } + cout << "\nNode added successfully!\n"; +} + +void sl :: insAtPos() { + int pos; + cout << "\nEnter the position: "; + cin >> pos; + + if(pos < 1) { + cout << "\nInvalid Position! Try again...\n"; + return; + } + + if(pos == 1) { + insAtBegin(); + } else { + node *tmpNode = head; + for(int i = 1; i < pos - 1 && tmpNode != nullptr; i++) { + tmpNode = tmpNode -> next; + } + + if(tmpNode == nullptr) { + cout << "\nOut of range! Try again...\n"; + return; + } + + node *newNode = new node; + cout << "\nEnter the value: "; + cin >> newNode -> data; + newNode -> next = tmpNode -> next; + tmpNode -> next = newNode; + cout << "\nNode added successfully!\n"; + } +} + +void sl :: insBeforePos() { + int pos; + cout << "\nEnter the position: "; + cin >> pos; + + if(pos < 1) { + cout << "\nInvalid Position! Try again...\n"; + return; + } + + if(pos == 1) { + insAtBegin(); + } else { + node *tmpNode = head; + node *tail = nullptr; + for(int i = 1; i < pos && tmpNode != nullptr; i++) { + tail = tmpNode; + tmpNode = tmpNode -> next; + } + + if(tmpNode == nullptr) { + cout << "\nOut of range! Try again...\n"; + return; + } + + node *newNode = new node; + cout << "\nEnter the value: "; + cin >> newNode -> data; + newNode -> next = tmpNode; + tail -> next = newNode; + cout << "\nNode added successfully!\n"; + } +} + +void sl :: insAfterPos() { + int pos; + cout << "\nEnter the position: "; + cin >> pos; + + if(pos < 0) { + cout << "\nInvalid position! Try again...\n"; + return; + } + + node *tmpNode = head; + if(pos == 0) { + insAtBegin(); + } else { + for(int i = 1; i < pos && tmpNode != nullptr; i++) { + tmpNode = tmpNode -> next; + } + + if(tmpNode == nullptr) { + cout << "\nOut of range! Try again...\n"; + return; + } + + node *newNode = new node; + cout << "\nEnter the value: "; + cin >> newNode -> data; + newNode -> next = tmpNode -> next; + tmpNode -> next = newNode; + cout << "\nNode added successfully!\n"; + } +} + +void sl :: delAtBegin() { + if(head == nullptr) { + cout << "\nUnable to process this request!\nLinked List is empty!\n"; + return; + } + node *tmpNode = head; + head = head -> next; + int tmpNodeData = tmpNode -> data; + delete tmpNode; + cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl; +} + +void sl :: delAtEnd() { + if(head == nullptr) { + cout << "\nUnable to process this request!\nLinked List is empty!\n"; + return; + } + + if(head -> next == nullptr) { + int tmpNodeData = head -> data; + delete head; + head = nullptr; + + cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl; + return; + } + + node *tmpNode = head; + while(tmpNode -> next -> next != nullptr) { + tmpNode = tmpNode -> next; + } + + int tmpNodeData = tmpNode -> next -> data; + delete tmpNode -> next; + tmpNode -> next = nullptr; + cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl; +} + +void sl :: delAtPos() { + if(head == nullptr) { + cout << "\nUnable to process this request!\nLinked List is empty!\n"; + return; + } + + int pos; + cout << "\nEnter the position: "; + cin >> pos; + + if(pos < 1) { + cout << "\nInvalid Position! Try again...\n"; + return; + } + + if(pos == 1) { + delAtBegin(); + } else { + node *tmpNode = head; + for(int i = 1; i < pos - 1 && tmpNode != nullptr; i++) { + tmpNode = tmpNode -> next; + } + + if(tmpNode == nullptr || tmpNode -> next == nullptr) { + cout << "\nOut of range! Try again...\n"; + return; + } + + node *tmpNode2 = tmpNode -> next; + int tmpNodeData = tmpNode -> next -> data; + tmpNode -> next = tmpNode -> next -> next; + delete tmpNode2; + cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl; + } +} + +void sl :: delBeforePos() { + if(head == nullptr) { + cout << "\nUnable to process this request!\nLinked List is empty!\n"; + return; + } + + int pos; + cout << "\nEnter the position: "; + cin >> pos; + + if(pos <= 1) { + cout << "\nInvalid position! Try again...\n"; + return; + } + + if(pos == 2) { + delAtBegin(); + } else { + node *tmpNode = head; + node *tailNode = nullptr; + for(int i = 1; i < pos - 1 && tmpNode != nullptr; i++) { + tailNode = tmpNode; + tmpNode = tmpNode -> next; + } + + if(tmpNode == nullptr) { + cout << "\nOut of range! Try again...\n"; + return; + } + + tailNode -> next = tmpNode -> next; + int tmpNodeData = tmpNode -> data; + delete tmpNode; + cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl; + } +} + +void sl :: delAfterPos() { + if(head == nullptr) { + cout << "\nUnable to process this request!\nLinked List is empty!\n"; + return; + } + + int pos; + cout << "\nEnter the position: "; + cin >> pos; + + if(pos < 0) { + cout << "\nInvalid position! Try again...\n"; + return; + } + + if(pos == 0) { + delAtBegin(); + } else { + node *tmpNode = head; + for(int i = 1; i < pos && tmpNode != nullptr; i++) { + tmpNode = tmpNode -> next; + } + + if(tmpNode == nullptr || tmpNode -> next == nullptr) { + cout << "\nOut of range! Try again...\n"; + return; + } + + node *tmpNode2 = tmpNode -> next; + int tmpNodeData = tmpNode2 -> data; + tmpNode -> next = tmpNode2 -> next; + delete tmpNode2; + cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl; + } +} + +int main() { + sl obj; + int choice; + while(1) { + obj.printMenu(); + cout << "Enter your choice: "; + cin >> choice; + switch(choice) { + case 1: + obj.insAtBegin(); + break; + case 2: + obj.insAtEnd(); + break; + case 3: + obj.insAtPos(); + break; + case 4: + obj.insBeforePos(); + break; + case 5: + obj.insAfterPos(); + break; + case 6: + obj.delAtBegin(); + break; + case 7: + obj.delAtEnd(); + break; + case 8: + obj.delAtPos(); + break; + case 9: + obj.delBeforePos(); + break; + case 10: + obj.delAfterPos(); + break; + case 0: + obj.display(); + break; + case -1: + cout << "\n\n\nExiting program.....\nTrying to clear memory....."; + return 0; + default: + cout << "\nEntered wrong choice.\n"; + } + } +} + +/* +===== Inputs to check every fns and edge cases ===== + +0 +6 +7 +8 +9 +10 +3 -1 +3 2 +4 0 +5 -1 +5 1 +1 100 +0 +8 2 +9 1 +10 1 +7 +0 +2 10 +2 20 +2 30 +2 40 +1 5 +3 3 15 +4 6 25 +5 2 8 +5 0 2 +0 +8 4 +9 4 +10 0 +10 5 +0 +-1 + +*/+ \ No newline at end of file
© notamitgamer • Site Built: 2026-09-05 01:53:16 UTC • git-mirror commit: c170d72 [view raw info]
Originally created with stagit • modified by notamitgamer
Forked from github.com/notamitgamer/git-mirror