bsc

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

root / semester_2 / assignments / assignment_02.cpp

assignment_02.cpp (9863B)


      1 /* Linked List all operation */
      2 
      3 #include<iostream>
      4 #include<iomanip>
      5 using namespace std;
      6 
      7 typedef struct nodeType {
      8     int data;
      9     nodeType *next = nullptr;
     10 } node;
     11 
     12 typedef struct MenuItem {
     13     int id; 
     14     const char* name;
     15 } menu;
     16 
     17 typedef class singlyLinkedList {
     18 private: 
     19     node *head = nullptr;
     20 public: 
     21     // insertion
     22     void insAtBegin();
     23     void insAtEnd();
     24     void insAtPos();
     25     void insBeforePos();
     26     void insAfterPos();
     27 
     28     // deletion
     29     void delAtBegin();
     30     void delAtEnd();
     31     void delAtPos();
     32     void delBeforePos();
     33     void delAfterPos();
     34 
     35     void printMenu();
     36     void display();
     37     ~singlyLinkedList();
     38 } sl;
     39 
     40 void sl :: printMenu() {
     41     menu items[] = {
     42         {1, "insertAtBegin()"}, {2, "insertAtEnd()"}, {3, "insertAtPos()"}, 
     43         {4, "insertBeforePos()"}, {5, "insertAfterPos()"}, {6, "deleteAtBegin()"},
     44         {7, "deleteAtEnd()"}, {8, "deleteAtPos()"}, {9, "deleteBeforePos()"}, 
     45         {10, "deleteAfterPos()"}, {0, "Display"}, {-1, "Exit"}
     46     };
     47 
     48     cout << "\n## Choose from below --\n--------------------------------------------\n";
     49     for (int i = 0; i < 12; i++) {
     50         cout << items[i].id << ". " << left << setw(20) << items[i].name;
     51         if (i % 2 == 1) cout << "\n";
     52     }
     53 }
     54 
     55 void sl :: display() {
     56     node *tmpNode = head;
     57     cout << "\nCurrent Linked-List: ";
     58     while(tmpNode != nullptr) {
     59         cout << tmpNode -> data << "  ";
     60         tmpNode = tmpNode -> next;
     61     }
     62     cout << "nullptr\n";
     63 }
     64 
     65 sl :: ~singlyLinkedList() {
     66     node *tmpNode;
     67     while(head != nullptr) {
     68         tmpNode = head;
     69         head = head -> next;
     70         delete tmpNode;
     71     }
     72     cout << "\nMemory cleared!\nExit 0\n";
     73 }
     74 
     75 void sl :: insAtBegin() {
     76         node *newNode = new node;
     77         cout << "\nEnter the value: ";
     78         cin >> newNode -> data;
     79         newNode -> next = head;
     80         head = newNode;
     81         cout << "\nNode added successfully!\n";
     82 }
     83 
     84 void sl :: insAtEnd() {
     85     node *newNode = new node;
     86     cout << "\nEnter the value: ";
     87     cin >> newNode -> data;
     88     
     89     if(head == nullptr) {
     90         head = newNode;
     91     } else {
     92         node *tmpNode = head;
     93         while(tmpNode -> next != nullptr) {
     94             tmpNode = tmpNode -> next;
     95         }
     96         tmpNode -> next = newNode;
     97     }
     98     cout << "\nNode added successfully!\n";
     99 }
    100 
    101 void sl :: insAtPos() {
    102     int pos;
    103     cout << "\nEnter the position: ";
    104     cin >>  pos;
    105 
    106     if(pos < 1) {
    107         cout << "\nInvalid Position! Try again...\n";
    108         return;
    109     }
    110 
    111     if(pos == 1) {
    112         insAtBegin();
    113     } else {
    114         node *tmpNode = head;
    115         for(int i = 1; i < pos - 1 && tmpNode != nullptr; i++) {
    116             tmpNode = tmpNode -> next;
    117         }
    118 
    119         if(tmpNode == nullptr) {
    120             cout << "\nOut of range! Try again...\n";
    121             return;
    122         }
    123 
    124         node *newNode = new node;
    125         cout << "\nEnter the value: ";
    126         cin >> newNode -> data;
    127         newNode -> next = tmpNode -> next;
    128         tmpNode -> next = newNode;
    129         cout << "\nNode added successfully!\n";
    130     }
    131 }
    132 
    133 void sl :: insBeforePos() {
    134     int pos;
    135     cout << "\nEnter the position: ";
    136     cin >>  pos;
    137 
    138     if(pos < 1) {
    139         cout << "\nInvalid Position! Try again...\n";
    140         return;
    141     }
    142     
    143     if(pos == 1) {
    144         insAtBegin();
    145     } else {
    146         node *tmpNode = head;
    147         node *tail = nullptr;
    148         for(int i = 1; i < pos && tmpNode != nullptr; i++) {
    149             tail = tmpNode;
    150             tmpNode = tmpNode -> next;
    151         }
    152 
    153         if(tmpNode == nullptr) {
    154             cout << "\nOut of range! Try again...\n";
    155             return;
    156         }
    157 
    158         node *newNode = new node;
    159         cout << "\nEnter the value: ";
    160         cin >> newNode -> data;
    161         newNode -> next = tmpNode;
    162         tail -> next = newNode;
    163         cout << "\nNode added successfully!\n";
    164     }
    165 }
    166 
    167 void sl :: insAfterPos() {
    168     int pos;
    169     cout << "\nEnter the position: ";
    170     cin >> pos;
    171 
    172     if(pos < 0) {
    173         cout << "\nInvalid position! Try again...\n";
    174         return;
    175     }
    176 
    177     node *tmpNode = head;
    178     if(pos == 0) {
    179         insAtBegin();
    180     } else {
    181         for(int i = 1; i < pos && tmpNode != nullptr; i++) {
    182             tmpNode = tmpNode -> next;
    183         }
    184 
    185         if(tmpNode == nullptr) {
    186             cout << "\nOut of range! Try again...\n";
    187             return;
    188         }
    189 
    190         node *newNode = new node;
    191         cout << "\nEnter the value: ";
    192         cin >> newNode -> data;
    193         newNode -> next = tmpNode -> next;
    194         tmpNode -> next = newNode;
    195         cout << "\nNode added successfully!\n";
    196     }
    197 }
    198 
    199 void sl :: delAtBegin() {
    200     if(head == nullptr) {
    201         cout << "\nUnable to process this request!\nLinked List is empty!\n";
    202         return;
    203     }
    204     node *tmpNode = head;
    205     head = head -> next;
    206     int tmpNodeData = tmpNode -> data;
    207     delete tmpNode;
    208     cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl;
    209 }
    210 
    211 void sl :: delAtEnd() {
    212     if(head == nullptr) {
    213         cout << "\nUnable to process this request!\nLinked List is empty!\n";
    214         return;
    215     }
    216     
    217     if(head -> next == nullptr) {
    218         int tmpNodeData = head -> data;
    219         delete head;
    220         head = nullptr;
    221 
    222         cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl;
    223         return;
    224     }
    225 
    226     node *tmpNode = head;
    227     while(tmpNode -> next -> next != nullptr) {
    228         tmpNode = tmpNode -> next;
    229     }
    230 
    231     int tmpNodeData = tmpNode -> next -> data;
    232     delete tmpNode -> next;
    233     tmpNode -> next = nullptr;
    234     cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl;
    235 }
    236 
    237 void sl :: delAtPos() {
    238     if(head == nullptr) {
    239         cout << "\nUnable to process this request!\nLinked List is empty!\n";
    240         return;
    241     }
    242 
    243     int pos;
    244     cout << "\nEnter the position: ";
    245     cin >> pos;
    246 
    247     if(pos < 1) {
    248         cout << "\nInvalid Position! Try again...\n";
    249         return;
    250     }
    251 
    252     if(pos == 1) {
    253         delAtBegin();
    254     } else {
    255         node *tmpNode = head;
    256         for(int i = 1; i < pos - 1 && tmpNode != nullptr; i++) {
    257             tmpNode = tmpNode -> next;
    258         }
    259 
    260         if(tmpNode == nullptr || tmpNode -> next == nullptr) {
    261             cout << "\nOut of range! Try again...\n";
    262             return;
    263         }
    264 
    265         node *tmpNode2 = tmpNode -> next;
    266         int tmpNodeData = tmpNode -> next -> data;
    267         tmpNode -> next = tmpNode -> next -> next;
    268         delete tmpNode2;
    269         cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl;
    270     }
    271 }
    272 
    273 void sl :: delBeforePos() {
    274     if(head == nullptr) {
    275         cout << "\nUnable to process this request!\nLinked List is empty!\n";
    276         return;
    277     }
    278 
    279     int pos;
    280     cout << "\nEnter the position: ";
    281     cin >> pos;
    282 
    283     if(pos <= 1) {
    284         cout << "\nInvalid position! Try again...\n";
    285         return;
    286     }
    287 
    288     if(pos == 2) {
    289         delAtBegin();
    290     } else {
    291         node *tmpNode = head;
    292         node *tailNode = nullptr;
    293         for(int i = 1; i < pos - 1 && tmpNode != nullptr; i++) {
    294             tailNode = tmpNode;
    295             tmpNode = tmpNode -> next;
    296         }
    297 
    298         if(tmpNode == nullptr) {
    299             cout << "\nOut of range! Try again...\n";
    300             return;
    301         }
    302 
    303         tailNode -> next = tmpNode -> next;
    304         int tmpNodeData = tmpNode -> data;
    305         delete tmpNode;
    306         cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl;
    307     }
    308 }
    309 
    310 void sl :: delAfterPos() {
    311     if(head == nullptr) {
    312         cout << "\nUnable to process this request!\nLinked List is empty!\n";
    313         return;
    314     }
    315 
    316     int pos;
    317     cout << "\nEnter the position: ";
    318     cin >> pos;
    319 
    320     if(pos < 0) {
    321         cout << "\nInvalid position! Try again...\n";
    322         return;
    323     }
    324 
    325     if(pos == 0) {
    326         delAtBegin();
    327     } else {
    328         node *tmpNode = head;
    329         for(int i = 1; i < pos && tmpNode != nullptr; i++) {
    330             tmpNode = tmpNode -> next;
    331         }
    332 
    333         if(tmpNode == nullptr || tmpNode -> next == nullptr) {
    334             cout << "\nOut of range! Try again...\n";
    335             return;
    336         }
    337 
    338         node *tmpNode2 = tmpNode -> next;
    339         int tmpNodeData = tmpNode2 -> data;
    340         tmpNode -> next = tmpNode2 -> next;
    341         delete tmpNode2;
    342         cout << "\nNode deleted successfully!\nDeleted node data: " << tmpNodeData << endl;
    343     }
    344 }
    345 
    346 int main() {
    347     sl obj;
    348     int choice;
    349     while(1) {
    350         obj.printMenu();
    351         cout << "Enter your choice: ";
    352         cin >> choice;
    353         switch(choice) {
    354             case 1:
    355                 obj.insAtBegin();
    356                 break;
    357             case 2: 
    358                 obj.insAtEnd();
    359                 break;
    360             case 3: 
    361                 obj.insAtPos();
    362                 break;
    363             case 4: 
    364                 obj.insBeforePos();
    365                 break;
    366             case 5: 
    367                 obj.insAfterPos();
    368                 break;
    369             case 6: 
    370                 obj.delAtBegin();
    371                 break;
    372             case 7: 
    373                 obj.delAtEnd();
    374                 break;
    375             case 8: 
    376                 obj.delAtPos();
    377                 break;
    378             case 9: 
    379                 obj.delBeforePos();
    380                 break;
    381             case 10:
    382                 obj.delAfterPos();
    383                 break;
    384             case 0:
    385                 obj.display();
    386                 break;
    387             case -1: 
    388                 cout << "\n\n\nExiting program.....\nTrying to clear memory.....";
    389                 return 0;
    390             default: 
    391                 cout << "\nEntered wrong choice.\n";
    392         }
    393     }
    394 }
    395 
    396 /*
    397 ===== Inputs to check every fns and edge cases =====
    398 
    399 0
    400 6
    401 7
    402 8
    403 9
    404 10
    405 3 -1
    406 3 2
    407 4 0
    408 5 -1
    409 5 1
    410 1 100
    411 0
    412 8 2
    413 9 1
    414 10 1
    415 7
    416 0
    417 2 10
    418 2 20
    419 2 30
    420 2 40
    421 1 5
    422 3 3 15
    423 4 6 25
    424 5 2 8
    425 5 0 2
    426 0
    427 8 4
    428 9 4
    429 10 0
    430 10 5
    431 0
    432 -1
    433 
    434 */
© 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