Advertisement
zeerx7

Untitled

May 22nd, 2022
843
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. #include <conio.h>
  4.  
  5. #include <iomanip>   //digunakan untuk mengatur lebar tampilan --> setw()
  6.  
  7. #include <math.h>     //operasi matematik dasar
  8.  
  9. #include <stdlib.h>   //pemanggilan fungsi malloc --> memberikan batsan memori dalam byte
  10.  
  11. using namespace std;
  12.  
  13. struct node {
  14.     int data;
  15.     node * next;
  16. };
  17.  
  18. node * head;
  19. node * tail;
  20. node * curr;
  21. node * curr2;
  22. node * curr3;
  23. node * curr4;
  24. node * entry;
  25. node * del;
  26. node * simpan_pos1;
  27. node * simpan_pos2;
  28. node * simpan_pos3;
  29. node * mm1;
  30.  
  31. void inisialisasi() {
  32.     head = NULL;
  33.     tail = NULL;
  34. }
  35.  
  36. void input(int dt) {
  37.     entry = (node * ) malloc(sizeof(node));
  38.     entry -> data = dt;
  39.     entry -> next = NULL;
  40.     if (head == NULL) {
  41.         head = entry;
  42.         tail = head;
  43.     } else {
  44.         tail -> next = entry;
  45.         tail = entry;
  46.     }
  47. }
  48.  
  49. void cetak() {
  50.     curr = head;
  51.     if (head == NULL)
  52.         cout << "\nData kosong" << endl;
  53.     else {
  54.         cout << "\nData dalam linked list adalah" << endl;
  55.         cout << setw(6);
  56.         while (curr != NULL) {
  57.             cout << curr -> data << "->";
  58.             curr = curr -> next;
  59.         }
  60.         cout << "NULL";
  61.         cout << endl;
  62.     }
  63. }
  64.  
  65. int hitung_node() {
  66.     int jumlah = 0;
  67.     curr = head;
  68.     while (curr != NULL) {
  69.         jumlah++;
  70.         curr = curr -> next;
  71.     }
  72.  
  73.     return (jumlah);
  74. }
  75.  
  76. void hapus() {
  77.     int simpan;
  78.     if (head == NULL) {
  79.         cout << "\nData kosong" << endl;
  80.     } else {
  81.         simpan = head -> data;
  82.         cout << "\nData yang dihapus adalah " << simpan << endl;
  83.  
  84.         del = head;
  85.         head = head -> next;
  86.         delete del;
  87.     }
  88. }
  89.  
  90. void hapus_data_tengah() {
  91.     float posisi_tengah;
  92.  
  93.     posisi_tengah = floor(hitung_node() / 2); //floor data dibulatkan kebawah
  94.  
  95.     int simpan, simpan2;
  96.     if (head == NULL) {
  97.         cout << "\nTidak ada data yang bisa dihapus" << endl;
  98.     } else {
  99.         if (hitung_node() <= 2) {
  100.             hapus();
  101.         } else if (hitung_node() == 3) {
  102.             curr2 = head;
  103.             simpan_pos1 = curr2 -> next;
  104.             curr2 -> next = curr2 -> next -> next;
  105.  
  106.             simpan2 = simpan_pos1 -> data;
  107.             cout << "\nData yang dihapus adalah " << simpan2 << endl;
  108.  
  109.             simpan_pos1 -> next = NULL;
  110.             delete simpan_pos1;
  111.         } else if (hitung_node() > 3) {
  112.             curr3 = head;
  113.             for (float i = 0; i < posisi_tengah - 1; i++) {
  114.                 curr3 = curr3 -> next;
  115.                 simpan_pos2 = curr3;
  116.             }
  117.  
  118.             curr4 = head;
  119.             for (float i = 0; i < posisi_tengah; i++) {
  120.                 curr4 = curr4 -> next;
  121.                 simpan_pos3 = curr4;
  122.             }
  123.  
  124.             simpan = simpan_pos3 -> data;
  125.             cout << "\ndata yang dihapus adalah " << simpan << endl;
  126.  
  127.             simpan_pos2 -> next = simpan_pos3 -> next;
  128.  
  129.             //hapus node
  130.             simpan_pos3 -> next = NULL; //memutus hubungan node sebelum dihapus
  131.             del = simpan_pos3;
  132.             delete del;
  133.         }
  134.     }
  135. }
  136. void tambah_data_tengah(int num){
  137.     float posisi_tengah;
  138.     posisi_tengah = floor(hitung_node() / 2); //floor data dibulatkan kebawah
  139.     int i = 0;
  140.  
  141.     // reset
  142.     mm1 = tail;
  143.     curr = head;
  144.     head = NULL;
  145.  
  146.     while (curr != NULL) {
  147.         input(curr -> data);
  148.         i++;
  149.         if(i == posisi_tengah){
  150.             input(num);
  151.         }
  152.         curr = curr -> next;
  153.     }
  154. }
  155. void menu() {
  156.     char pilih, ulang;
  157.     int data;
  158.  
  159.     do {
  160.         system("cls");
  161.         cout << "SINGLE LINKED LIST by Sulis" << endl;
  162.         cout << "-------------------------------" << endl;
  163.         cout << "Menu : " << endl;
  164.         cout << "1. Input data depan" << endl;
  165.         cout << "2. Cetak data" << endl;
  166.         cout << "3. Hapus data tengah" << endl;
  167.         cout << "4. Tambah data tengah" << endl;
  168.         cout << "5. Exit" << endl;
  169.         cout << "Masukkan pilihan Anda : ";
  170.         cin >> pilih;
  171.  
  172.         switch (pilih) {
  173.         case '1':
  174.             cout << "\nMasukkan data : ";
  175.             cin >> data;
  176.             input(data);
  177.             break;
  178.         case '2':
  179.             cetak();
  180.             break;
  181.         case '3':
  182.             hapus_data_tengah();
  183.             break;
  184.         case '4':
  185.             cout << "\nMasukkan data yg akan ditambahkan ke data tengah : ";
  186.             cin >> data;
  187.             tambah_data_tengah(data);
  188.             break;
  189.         case '5':
  190.             exit(0);
  191.             break;
  192.         default:
  193.             cout << "\nPilih ulang" << endl;
  194.         }
  195.         cout << "\nKembali ke menu?(y/n)";
  196.         cin >> ulang;
  197.     } while (ulang == 'y' || ulang == 'Y');
  198. }
  199.  
  200. int main() {
  201.     inisialisasi();
  202. //    input(81);
  203. //    input(82);
  204. //    input(83);
  205. //    input(84);
  206. //    input(85);
  207. //    input(86);
  208. //    input(87);
  209. //    input(88);
  210.     menu();
  211.  
  212.     return EXIT_SUCCESS;
  213. }
Advertisement
RAW Paste Data Copied
Advertisement