Untitled
unknown
c_cpp
a year ago
11 kB
13
Indexable
#include <iostream> using namespace std; class Node { public: string nama; string Nim; Node *prev; Node *next; }; class DoublyLinkedList { public: Node *head; Node *tail; DoublyLinkedList() { head = nullptr; tail = nullptr; } int countList() { Node *hitung; hitung = head; int jumlah = 0; while (hitung != NULL) { jumlah++; hitung = hitung->next; } return jumlah; } void push(string nama, string Nim) { Node *newNode = new Node; newNode->nama = nama; newNode->Nim = Nim; newNode->prev = nullptr; newNode->next = head; if (head != nullptr) { head->prev = newNode; } else { tail = newNode; } head = newNode; } bool isEmpty() { return (head == NULL); } void insertAt(string nama, string Nim, int posisi) { if (posisi < 1 || posisi > countList()) { cout << "Posisi diluar jangkauan" << endl; return; } if (posisi == 1) { cout << "Posisi bukan posisi tengah" << endl; return; } Node *baru, *bantu; baru = new Node(); baru->nama = nama; baru->Nim = Nim; if (posisi > countList()) posisi = countList(); int nomor = 1; bantu = head; while (nomor < posisi - 1) { bantu = bantu->next; nomor++; } baru->next = bantu->next; bantu->next = baru; } void insertBelakang(string nama, string Nim) { Node *baru = new Node; baru->nama = nama; baru->Nim = Nim; baru->next = NULL; if (isEmpty()) { head = tail = baru; } else { tail->next = baru; tail = baru; } } void hapusTengah(int posisi) { if (posisi < 1 || posisi > hitungList()) { cout << "Posisi diluar jangkauan" << endl; } else if (posisi == 1) { cout << "Posisi bukan posisi tengah" << endl; } else { Node *bantu = head; for (int i = 1; i < posisi - 1; i++) { bantu = bantu->next; } Node *hapus = bantu->next; bantu->next = hapus->next; delete hapus; } } void pop() { if (head == nullptr) { return; } Node *temp = head; head = head->next; if (head != nullptr) { head->prev = nullptr; } else { tail = nullptr; } delete temp; } void ubahBelakang(string nama, string Nim) { if (!isEmpty()) { tail->nama = nama; tail->Nim = Nim; } else { cout << "List masih kosong!" << endl; } } void ubahDepan(string nama, string Nim) { if (!isEmpty()) { head->nama = nama; head->Nim = Nim; } else { cout << "List masih kosong!" << endl; } } int hitungList() { Node *hitung = head; int jumlah = 0; while (hitung != NULL) { jumlah++; hitung = hitung->next; } return jumlah; } void ubahTengah(string nama, string Nim, int posisi) { if (!isEmpty()) { if (posisi < 1 || posisi > hitungList()) { cout << "Posisi di luar jangkauan" << endl; } else if (posisi == 1) { cout << "Posisi bukan posisi tengah" << endl; } else { Node *bantu = head; for (int i = 1; i < posisi; i++) { bantu = bantu->next; } bantu->nama = nama; bantu->Nim = Nim; } } else { cout << "List masih kosong!" << endl; } } void hapusDepan() { if (!isEmpty()) { Node *hapus = head; if (head->next != NULL) { head = head->next; } else { head = tail = NULL; } delete hapus; } else { cout << "List kosong!" << endl; } } void hapusBelakang() { if (!isEmpty()) { Node *hapus = tail; if (head != tail) { Node *bantu = head; while (bantu->next != tail) { bantu = bantu->next; } tail = bantu; tail->next = NULL; } else { head = tail = NULL; } delete hapus; } else { cout << "List kosong!" << endl; } } void deleteAll() { Node *current = head; while (current != nullptr) { Node *temp = current; current = current->next; delete temp; } head = nullptr; tail = nullptr; } void display() { Node *current = head; while (current != nullptr) { cout << current->nama << "\t"; cout << current->Nim << endl; current = current->next; } cout << endl; } }; int main() { DoublyLinkedList list; int arr_size = 10; string namas[10] = {"Jawad", "Amir", "Farel", "Denis", "Anis", "Bowo", "Gahar", "Udin", "Ucok", "Budi"}; string Nims[10] = {"23300001", "2311102233", "23300003", "23300005", "23300008", "23300015", "23300040", "23300048", "23300050", "23300099"}; for (int i = 0; i < arr_size; i++) list.insertBelakang(namas[i], Nims[i]); while (true) { string nama, Nim; cout << endl; cout << "PROGRAM SINGLE LINKED LIST NON-CIRCULAR" << endl; cout << "1. Tambah Depan" << endl; cout << "2. Tambah Belakang" << endl; cout << "3. Tambah Tengah" << endl; cout << "4. Ubah Depan" << endl; cout << "5. Ubah Belakang" << endl; cout << "6. Ubah Tengah" << endl; cout << "7. Hapus Depan" << endl; cout << "8. Hapus Belakang" << endl; cout << "9. Hapus Tengah" << endl; cout << "10. Hapus List" << endl; cout << "11. TAMPILKAN" << endl; cout << "12. KELUAR" << endl; int choice; cout << "Masukkan Pilihan : "; cin >> choice; cout << endl; switch (choice) { case 1: { cout << "Masukkan NAMA : "; cin >> nama; cout << "Masukkan NIM : "; cin >> Nim; cout << "Data telah di tambahkan" << endl; list.push(nama, Nim); break; } case 2: { cout << "Masukan NAMA :"; cin >> nama; cout << "Masukan NIM : "; cin >> Nim; cout << "Data telah di tambahkan" << endl; list.insertBelakang(nama, Nim); break; } case 3: { int position; cout << "Masukkan Nama : "; cin >> nama; cout << "Masukkan Nim : "; cin >> Nim; cout << "Posisi : "; cin >> position; list.insertAt(nama, Nim, position); break; } case 4: { cout << "Masukan NAMA :"; cin >> nama; cout << "Masukan NIM : "; cin >> Nim; cout << "Data berhasil depan di ubah" << endl ; list.ubahDepan(nama, Nim); break; } case 5: { cout << "Masukkan nama : "; cin >> nama; cout << "Masukkan Nim : "; cin >> Nim; cout << "Data belakang berhasil di ubah" << endl; list.ubahBelakang(nama, Nim); break; } case 6: { int position; cout << "Masukkan nama : "; cin >> nama; cout << "Masukkan Nim : "; cin >> Nim; cout << "Masukkan posisi : "; cin >> position; if (position < 1 || position > list.countList()) { cout << "Posisi diluar jangkauan" << endl; } else { string namaLama = ""; Node *current = list.head; for (int i = 1; i < position; ++i) { current = current->next; } if (current != nullptr) { namaLama = current->nama; } list.ubahTengah(nama, Nim, position); cout << "Data " << namaLama << " telah diganti dengan " << nama << endl; } break; } case 7: { cout << "DATA BERHASIL DI HAPUS" << endl; list.hapusDepan(); break; } case 8: { if (!list.isEmpty()) { cout << "Data " << list.tail->nama << " berhasil dihapus" << endl; list.hapusBelakang(); // Menghapus elemen terakhir dari linked list } else { cout << "List kosong, tidak ada data untuk dihapus" << endl; } break; } case 9: { int posisi; cout << "Masukkan posisi data yang ingin dihapus: "; cin >> posisi; if (posisi < 1 || posisi > list.countList()) { cout << "Posisi diluar jangkauan" << endl; } else { Node *current = list.head; for (int i = 1; i < posisi; ++i) { current = current->next; } cout << "Data " << current->nama << " berhasil dihapus" << endl; list.hapusTengah(posisi); } break; } case 10: { cout << "DATA BERHASIL DI HAPUS" << endl; list.deleteAll(); break; } case 11: { cout << "DATA MAHASISWA" << endl; list.display(); break; } case 12: { return 0; } } } return 0; }
Editor is loading...
Leave a Comment