Soal-soal Linked List
SOAL
Jelaskan beberapa hal terkait dengan struktur data jenis Senarai Berantai (Linked List), antara lain meliputi:
1. Pengertian
2. Jenis-jenis linked list
3. Beberapa jenis operasi yang terdapat di dalamnya
4. Algoritma dan contoh program untuk operasi-operasi di dalamnya
Jelaskan beberapa hal terkait dengan struktur data jenis Senarai Berantai (Linked List), antara lain meliputi:
1. Pengertian
2. Jenis-jenis linked list
3. Beberapa jenis operasi yang terdapat di dalamnya
4. Algoritma dan contoh program untuk operasi-operasi di dalamnya
JAWABAN
1.Linked list adalah sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian Linked list juga merupakan suatu cara untuk menyimpan data dengan struktur sehingga dapat secara otomatis menciptakan suatu tempat baru untuk menyimpan data yangdiperlukan. Struktur ini lebih dinamis karena banyaknya elemen dengan mudah ditambah atau dikurangi, berbeda dengan array yang ukurannya tetap. berikut gambaran kecil mengenai linked list.
2.Jenis jenis Linked List:
–Singly Linked List :
Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki field yang berisi data. Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan sebagai kondisi berhenti saat pembacaan linked list.
–Double Linked List :
Linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu: 1 field pointer yang menunjuk ke pointer berikutnya, 1 field pointer yang menunjuk ke pointer sebelumnya dan field yang berisi data dari node tersebut. Pointer next dan prev-nya menunjuk ke null.
–Single Circular Linked List :
Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya akan menunjuk ke pointer terdepannya.
– Double Circular Linked List :
Double Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.
3.Operasi Pada Single Linked List
-Insert = Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list.
-Konstruktor = Fungsi ini membuat sebuah linked list yang baru dan masih kosong.
-IsEmpty = Fungsi ini menentukan apakah linked list kosong atau tidak.
-Find First = Fungsi ini mencari elemen pert ama dari linked list
-Find Next = Fungsi ini mencari elemen sesudah elemen yang ditunjuk now.
-Retrieve = Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu dikembalikan oleh fungsi.
-Update = Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu.
-Delete Now = Fungsi ini menghapus elemen yang ditunj uk oleh now. J ika yang dihapus adalah elemen pertama dari linked list (head), head akan berpindah ke elemen berikut.
Operasi –operasi pada DoubleLinkedList
-Insert Tail = Fungsi insert tail berguna untuk menambah simpul di belakang (sebelah kanan) pada sebuah linked list.
-nsert Head = Sesuai dengannamanya, fungsi Insert Head berguna untuk menambah simpul di depan (sebelah kiri). Fungsi ini tidak berada jauh dengan fungsi Insert Tail yang t elah dijelaskan sebelumnya.
-Delete Tail = Fungsi Delete Tail berguna untuk menghapus simpul dari belakang. Fungsi ini merupakan kebalikan dari fungsi I nsert Tail yang menambah simpul dibelakang. Fungsi Delete Tail akan mengarahkan Now kepada Tail dan kemudian memanggil fungsi Delete Now.
-Delete Head = Fungsi Delete Head merupakan kebalikan dari fungsi Delete Tail yang menghapus simpul dari belakang, sedangkan Delete Head akan menghapus simpul dari depan (sebelah kiri). Fungsi Delete Head akan mengarahkan Now kepada Head dan kemudianm memanggil fungsi Delete Now.
4.//SINGLE LINKED LIST NON CIRCULAR
//IDE VS12 Express
//by [RS]
#include <iostream>
#include <conio.h>
#include <iomanip> //setw()
using namespace std;
struct node
{
int data;
node* next; // untuk menghubungkan dengan node lain, tipe data dibuat sama seperi aturan penggunaan pointer.
};
node* head;
node* tail;
node* curr;
node* entry;
node* del;
void inisialisasi()
{
head = NULL;
tail = NULL;
}
void input(int dt)
{
entry = (node* )malloc(sizeof(node)); //alokasi memori
entry->data = dt;
entry->next = NULL;
if(head==NULL)
{
head = entry;
tail = head;
}
else
{
tail->next = entry;
tail = entry;
}
}
void hapus()
{
int simpan;
if(head==NULL)
{
cout<<"\nlinked list kosong, penghapusan tidak bisa dilakukan"<<endl;
}
else
{
simpan = head ->data;
//hapus depan
del = head;
head = head->next;
delete del;
cout<<"\ndata yang dihapus adalah "<<simpan<<endl;
}
}
void cetak()
{
curr = head;
if(head == NULL)
cout<<"\ntidak ada data dalam linked list"<<endl;
else
{
cout<<"\nData yang ada dalam linked list adalah"<<endl;
cout<<setw(6);
while(curr!=NULL)
{
cout<<curr->data<<"->";
curr = curr->next;
}
cout<<"NULL";
cout<<endl;
}
}
void menu()
{
char pilih, ulang;
int data;
do
{
system("cls");
cout<<"SINGLE LINKED LIST NON CIRCULAR"<<endl;
cout<<"-------------------------------"<<endl;
cout<<"Menu : "<<endl;
cout<<"1. Input data"<<endl;
cout<<"2. Hapus data"<<endl;
cout<<"3. Cetak Data"<<endl;
cout<<"4. Exit"<<endl;
cout<<"Masukkan pilihan Anda : ";
cin>>pilih;
switch(pilih)
{
case '1' :
cout<<"\nMasukkan data : ";
cin>>data;
input(data);
break;
case '2' :
hapus();
break;
case '3' :
cetak();
break;
case '4' :
exit(0);
break;
default :
cout<<"\nPilih ulang"<<endl;
}
cout<<"\nKembali ke menu?(y/n)";
cin>>ulang;
}while(ulang=='y' || ulang=='Y');
}
int main()
{
inisialisasi();
menu();
return EXIT_SUCCESS;
}