Anda di halaman 1dari 32

MATA KULIAH :

ALGORITMA DAN PEMROGRAMAN 1


PERTEMUAN 13

LINKED LIST
(Senarai Berantai)

Wiranti Sri Utami, S.Kom., M.T.I


1. Konsep Dasar
• Linked List merupakan deretan elemen yang berdampingan di
memori namun masih terpencar-pencar. Untuk mengakses semua
elemen digunakan pointer tunggal.
• Masing-masing elemen terdiri dari dua bagian, yaitu
sebuah data dan sebuah pointer yang disebut dengan pointer
next.
• Dengan menggunakan struktur two-member seperti ini, linked
list dibentuk dengan cara menunjuk pointer next suatu elemen ke
elemen yang mengikutinya. Pointer next pada elemen terakhir
merupakan NULL, yang menunjukkan akhir dari suatu list.
• Elemen pada awal suatu list disebut head, dan elemen
terakhir dari suatu list disebut tail.
1. Konsep Dasar
• Ketika sebuah variabel dideklarasikan, terlebih dahulu
• harus diinisialisasi termasuk juga ’pengalokasian
secara dinamis’.
• Fungsi untuk mengalokasikan sebuah node baru
disebut dengan fungsi allocate_node() menggunakan
malloc() untuk mendapatkan memori aktual, yang akan
menginisialisasi suatu field data.
• next selalu diinisialisasi sebagai NULL.
• Untuk melihat kemungkinan alokasi memori gagal,
maka fungsi allocate_node menghasilkan 0, sebaliknya
1 jika berhasil.
Untuk membebaskan node digunakan fungsi free_node. Fungsi dari
alokasi node adalah sebagai berikut :
 Inisialisasi LIST setelah alokasi untuk node pertama sebagai
berikut:

 Fungsi free_node() akan menghancurkan node yang


menunjuk ke pointer yang dilewati karena itu pointer
didefinsikan dengan NULL:
2. Operasi Pada Linked List
 Operasi penting pada Linked List :
 Insert
 Delete

 Fungsi INSERT meliputi :


 insert sebagai node awal (head) dari linked list
 insert setelah node tertentu
 insert sebelum node tertentu
 insert sebagai node akhir (tail) dari linked list.

 Fungsi DELETE meliputi :


 delete sebagai simpul pertama(head) dari linked list
 delete setelah simpul tertentu
 delete simpul terakhir
(a) Insert sebagai node awal (head) dari linked list
(b) Insert setelah node tertentu
(c) Insert sebelum node tertentu
Statement untuk insert sebelum node tertentu dari linked list
adalah
(d) Insert di akhir (tail) dari linked list
do
(2) Fungsi DELETE

(a)

Langkah
penghapusan
1. Pointer first
diarahkan data
ke-2
2. Pointer p
diarahkan pada
data ke-1
3. Bebaskan
pointer p
(secara otomatis
data ke-1
terhapus)
(b)
(c)

Langkah-langkah untuk proses di atas adalah sebagai berikut:


1. Telusuri simpul s/d first->next = NULL
2. Arahkan pointer p ke first
3. Bebaskan pointer p->next (Simpul Terakhir)
4. Arahkan p->next ke NULL
3. MERUBAH ISI DARI SUATU SIMPUL PADA
LINKED LIST
1. Menulusuri linked list sampai didapatkan simpul yang akan dirubah.
Pengertian Polinomial
• Dalam dunia matematika, polinomial atau suku banyak adalah
pernyataan matematis yang berhubungan dengan jumlahan
perkalian pangkat dalam satu atau lebih variabel dengan
koefisien.

• Bentuk umum dari suatu polinomial adalah sebagai berikut :


anxn+…+a2x2+a1x1+a0

• Dimana a merupakan koefisien konstan, dan pangkat tertinggi


pada polinomial tersebut menandakan orde atau derajatnya,
sehingga polinomial diatas memiliki derajat atau orde n.
Contoh KASUS Polinomial
 Pertimbangkan dua polinomial f(x) dan g(x), yang dapat diwakili
menggunakan linked list.
 h (x) dapat direpresentasikan dengan h(x)= f(x)+ g(x)=
f(x) = ax3 + bx + c dan g(x) = mx4 + nx3 + ox2 + px + q
Yaitu menambahkan konstanta dari polynomial yang sesuai dari
eksponensial sama.
 Kedua polinomial dapat ditambahkan dengan:
h(x)= f(x)+ g(x)= mx4 + (a + n) x3 + ox 2 + (b + p)x + (c + q)
yaitu menambahkan konstanta dari polinomial yang sesuai dari
eksponensial sama.
 Hasil dari H(x) dapat dijabarkan seperti gambar berikut:
Contoh Program 1:
#include <stdio.h> while(input != 0) {
#include <stdlib.h> printf("\n===== Pilih Menu =====\n");
printf("0: Keluar\n");
struct NODE {
int number;
printf("1: Insert\n");
struct NODE *next; printf("2: Search\n");
}; printf("3: Tampilkan\n");
void append_node(struct NODE *llist, int num); printf("\nPilihan: ");scanf("%d", &input);
int search_value(struct NODE *llist, int num);
void display_list(struct NODE *llist); if(input==0){
int main(void) { printf("...Terimakasih...\n");
int num = 0;
}
int input = 5;
int retval = 0; else if(input==1){
struct NODE *llist; printf("Anda Memilih: 'Insert'\n");
llist = (struct NODE *)malloc(sizeof(struct NODE));
printf("Masukkan Nilai Yang Akan di Insert: ");
llist->number = 0; scanf("%d", &num);
llist->next = NULL; append_node(llist, num);
}
Lanjutan Contoh Program 1:
else if(input==2){
printf("Anda Memilih: 'Search'\n");
printf("Masukkan Nilai Yang Akan di Cari (Search): ");
scanf("%d", &num);
if((retval = search_value(llist, num)) == -1)
printf("Value `%d' not found\n", num);
else
printf("Value `%d' located at position `%d'\n", num, retval);
}
else if(input==3){
printf("Anda Memilih: 'Tampilkan'\n");
display_list(llist);
}}

free(llist);
return(0);
}
Lanjutan Contoh Program 1:
void append_node(struct NODE *llist, llist = llist->next;
int num) { }
while(llist->next != NULL)
llist = llist->next; return retval;
}
llist->next = (struct NODE
*)malloc(sizeof(struct NODE)); void display_list(struct NODE *llist) {
llist->next->number = num; while(llist->next != NULL) {
llist->next->next = NULL; printf("%d ", llist->number);
} llist = llist->next;
}
int search_value(struct NODE *llist, int
num) { printf("%d", llist->number);
int retval = -1; }
int i = 1;
while(llist->next != NULL) {
if(llist->next->number == num)
return i;
else
i++;
Hasil Program 1
Contoh Program 2 :
#include <stdio.h> void main()
#include <stdlib.h> {
//Deklarasi pointer dari simpulku spasi nama variabel
typedef struct simpul { /*Deklarasi
simpulku *simpul1, *simpul2, *simpul3, *simpul4,
struktur dengan nama simpul yang *temp;
mempunyai anggota dengan
berbagai tipe data //alokasikan memorinya terlebih dahulu
berikut */ simpul1 = (simpulku *)malloc(sizeof(simpulku));
/*pengalokasian alamat memori ke dalam variabel
char nama[20]; /*Deklarasi variabel simpul1*/
simpul2 = (simpulku
nama bertipe char
*)malloc(sizeof(simpulku));/*pengalokasian alamat
dengan batas karakter 20 */ memori ke dalam variabel simpul2*/
float nilai; /*Deklarasi variabel nilai simpul3 = (simpulku
bertipe float */ *)malloc(sizeof(simpulku));/*pengalokasian alamat
struct simpul *next_simpul; /*Deklarasi memori ke dalam variabel simpul3*/
struktur simpul dengan
pointer simpul berikutnya sebagai node
*/
} simpulku; //Nama variabel simpulku
Lanjutan Contoh Program 2 :
//isi data masing2 simpul //sambungkan link masing2 simpul
strcpy(simpul1->nama, "Amin");
simpul1->next_simpul = simpul2; /* membuat node
/*mengcopy variabel nama string
(penghubung) dari simpul */
"Amin" ke variabel simpul 1*/ simpul2->next_simpul = simpul3;
simpul3->next_simpul = NULL; /*Null artinya setelah simpul3
strcpy(simpul2->nama, tidak ada lagi simpul penghubung (node) */
"Budi");/*mengcopy variabel nama
string"Budi" ke variabel simpul 2*/ //tampilkan hasilnya, mulai dr simpul 1
temp = simpul1; //cara satu per satu
strcpy(simpul3->nama,
printf("%s, %f\n", temp->nama, temp->nilai);
"Citra");/*mengcopy variabel nama string /*temp->nama adalah "Amin" , temp->nilai adalah 90 */
"Citra" ke variabel simpul 3*/ temp = temp->next_simpul; //node (penghubung)

simpul1->nilai=90; /*string dari variabel printf("%s, %f\n", temp->nama, temp->nilai);


simpul1 /*temp->nama adalah "Budi" , temp->nilai adalah 20 */
temp = temp->next_simpul;
("Amin") bernilai 90*/
simpul2->nilai=20;/*string dari variabel printf("%s, %f\n", temp->nama, temp->nilai);
simpul2 /*temp->nama adalah "Citra" , temp->nilai adalah 100 */
("Budi") bernilai 20 */ printf("\n"); //menambahkan baris baru
simpul3->nilai=100; /*string dari variabel
simpul3
("Citra") bernilai 100 */
simpul1->next_simpul = NULL;
Lanjutan Contoh Program 2 :
//skenario menambahkan simpul baru for(;temp!=NULL; temp=temp-
>next_simpul) //cara looping
simpul4 = (simpulku printf("%s, %f\n", temp->nama, temp-
*)malloc(sizeof(simpulku)); /*siapkan
>nilai);
alokasi memori ke variabel simpul4*/
strcpy(simpul4->nama, //menghapus simpul budi
"Dewi");simpul4->nilai=80; /*Menyalin isi
variabel nama Dewi simpul1->next_simpul = simpul4;
ke variabel simpul4 kemudian diberi //update link
nilai 80 */ free(simpul2); //hapus simpul
simpul2->next_simpul = simpul4; printf("\n");
//update link temp = simpul1;
simpul4->next_simpul = simpul3;
printf("\n");
temp = simpul1; for(;temp!=NULL; temp=temp-
>next_simpul) //cara looping
printf("%s, %f\n", temp->nama, temp-
>nilai);

system("pause");
return 0;
}
Hasil Program 2
Sumber
• Wayan Suparta, PhD. Universitas Pembangunan Jaya.
“INF202: Struktur Data”
• Admin. “Linked List Dalam Bahasa C”. 2015.
“https://www.markijar.com/2015/05/linked-list-dalam-
bahasa-c.html”
Terima Kasih

Anda mungkin juga menyukai