LIST
PENDAHULUAN Linked List adalah sejumlah objek yang dihubungkan (linked) satu dengan yang lainnya membentuk suatu list. Objek adalah gabungan dari beberapa data (variable) yang dijadikan satu kelompok (tipe data bentukan) Untuk menghubungkan beberapa objek diperlukan setidaknya satu buah pointer
CONTIGUOUS LIST (ARRAY) Array adalah sejumlah objek yang saling bersambung antara satu dengan lainnya. Pengalokasian array bersifat statis karena jumlah elemennya tetap tidak dapat ditambah maupun dihapus sewaktu proses sedang berlangsung (running). ARRAY A 20 45 25 55
LINKED LIST 30 1 KET : 20 45 2 3 DATA 30 POINTER 55 5 25 4 30 20 45 25 55 1 2 3 4 5
LINIER SINGLY-LINKED LIST FIRST LAST 20 45 25 55 Simpul pertama dalam list akan ditunjuk oleh pointer FIRST Simpul terakhir dalam list akan ditunjuk oleh pointer LAST. Pointer NEXT dari simpul terakhir ini akan berisikan NULL yang menandakan bahwa tidak ada lagi simpul selain simpul tersebut.
Deklarasi Simpul Simpul merupakan tipe data bentukan yang terdiri dari info untuk menyimpan data/nilai dan pointer next yang dipakai untuk menunjukkan alamat dari simpul selanjutnya P Struct simpul int info; struct simpul *next; ; simpul *P, *first, *last; X P->info P->next
Inisialisasi List Inisialisasi list bertujuan untuk memberikan nilai awal pada suatu list yang masih kosong. Inisialisasi dilakukan menggunakan prosedur void awal() first = null; FIRST
Membuat Sebuah Simpul Gunakan pointer *P yang sudah dideklarasikan untuk menunjuk sebuah simpul baru. Setiap simpul dibuat satu per satu yang nanti akan dihubungkan menjadi sebuah list. jumlah simpul tidak ada batasnya, selama ruang memori masih tersedia maka simpul baru masih bisa dibuat. Jika ruang memori sudah penuh, maka pembuatan simpul dinyatakan gagal. Setiap pembuatan simpul akan dilakukan pengecekan terhadap pointer *P, jika berisi NULL maka pembuatan simpul dinyatakan gagal
Membuat Sebuah Simpul (Lanjutan) void buat_simpul(int x) P = (simpul*) malloc (sizeof(simpul)); if (P!= null) P->info = x; else cout<< Pembuatan simpul gagal ;
Pembuatan Simpul Awal Pembuatan simpul awal dilakukan setelah berhasil membuat sebuah simpul baru. Untuk membuat simpul awal, digunakan pointer *first yang sudah dideklarasikan sebelumnya. Lakukan pemeriksaan terhadap pointer *first, jika tidak berisi null berarti list sudah ada.
Pembuatan Simpul Awal (lanjutan) void simpul_awal() if(first == null) first = p; last = p; p->next = null; else last first P cout<< linked list sudah ada ; X
Insert Insert adalah proses menambah atau menghubungkan list yang sudah ada dengan sebuah simpul baru Insert kanan adalah menambahan simpul baru diakhir list sehingga simpul baru tersebut akan menjadi simpul akhir list (penggunaan pointer last) Insert kiri adalah menambahkan simpul baru diawal list sehingga simpul tersebut menjadi simpul awal list (penggunaan pointer first) Insert tengah adalah menambahkan simpul baru ditengahtengah list (penggunaan pointer tambahan)
Insert Kanan first last P 25 12 30 first last 25 12 30
Insert Kanan (Lanjutan) Syarat : list harus sudah ada, minimal 1 simpul (first tidak null) void insert_kanan() if(first!=null) else last->next = P; last = P; P->next = null; cout<< list belum ada ;
Insert Kiri first last P 25 12 30 first last 30 25 12
Insert Kiri (Lanjutan) Syarat : list harus sudah ada, minimal 1 simpul (first tidak null) void insert_kiri() if(first!=null) else P->next = first; first = P; cout<< list belum ada ;
Insert Tengah first Q last P 25 30 12 8 first last 25 30 8 12
Insert Tengah (Lanjutan) Syarat : list harus sudah ada, minimal 1 simpul (first tidak null) Deklarasikan pointer tambahan bernama pointer *Q dengan tipe simpul (karena akan menunjuk simpul) Lakukan penempatan pointer *Q pada simpul sebelum simpul baru akan diinsertkan
Insert Tengah (Lanjutan) void insert_tengah(int n) int i; Q = first; for(i=1;i<n;i++) Q = Q->next; P->next = Q->next; Q->next = P;
Delete Delete adalah proses menghapus sebuah simpul yang ada didalam list Delete kanan adalah menghapus simpul paling kiri didalam list sehingga pointer last akan menunjuk ke simpul sebelumnya. Delete kiri adalah menghapus simpul paling kiri didalam list sehingga pointer first akan menunjuk ke simpul setelahnya. Delete tengah adalah menghapus simpul yang bukan merupakan simpul awal maupun akhir
Delete Kanan Deklarasikan pointer tambahan bernama pointer *Q dengan tipe simpul (karena akan menunjuk simpul) Lakukan penempatan pointer *Q pada simpul sebelum simpul akhir.
Delete Kanan (Lanjutan) first Q last free 25 30 8 12 first last 25 30 8
Delete Kanan (Lanjutan) void delete_kanan() Q = first; while(q->next!= last) Q = Q->next; free(last); last = Q; last->next = null;
Delete Kiri Deklarasikan pointer tambahan bernama pointer *Q dengan tipe simpul (karena akan menunjuk simpul) Lakukan penempatan pointer *Q pada simpul first yang akan dihapus, sehingga pointer *first dapat dipindahkan pada simpul setelahnya.
Delete Kiri (Lanjutan) Q first free last 25 30 8 12 first last 30 8 12
Delete Kiri (Lanjutan) void delete_kiri() Q = first; first = Q->next; free(q);
Delete Tengah List minimal memiliki lebih dari 2 simpul. Deklarasikan pointer tambahan bernama pointer *Q dan pointer *R dengan tipe simpul (karena akan menunjuk simpul) Lakukan penempatan pointer *Q pada simpul sebelum simpul yang akan dihapus. Pointer *R digunakan untuk menunjuk simpul yang akan dihapus.
Delete Tengah (Lanjutan) first Q R last free 25 30 8 12 first last 25 30 12
Delete Tengah (Lanjutan) void delete_tengah(int n) int i; Q = first; for(i=1;i<n;i++) Q = Q->next; R = Q->next; Q->next = R->next; free(r);
Selesai Terus berlatih!!