# 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.
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() {
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) {
43.     } else {
44.         tail -> next = entry;
45.         tail = entry;
46.     }
47. }
48.
49. void cetak() {
52.         cout << "\nData kosong" << endl;
53.     else {
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;
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.
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) {
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) {
113.             for (float i = 0; i < posisi_tengah - 1; i++) {
114.                 curr3 = curr3 -> next;
115.                 simpan_pos2 = curr3;
116.             }
117.
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;
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. }
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);