Linked List Entin Martiana
Malloc Memory Allocation (malloc) adalah sebuah fungsi fasilitas untuk memesan tempat secara berurutan untuk tipe data dinamis(pointer) Nilai balik dari memory allocation adalah void *
Problem Bagaimana jika kita pesan 50000 alamat berurutan? Akan selalu gagal. Untuk itu kita lakukan memory allocation untuk setiap satu data. Bagaimana agar data pertama tetap berhubungan dengan data kedua? Kita gunakan pointer untuk menghubungkan
The Linked List data structure [0] [1] [2] array A B C Array node linked A B C Linked list Linked lists are unbounded (maximum number of items limited only by memory)
Array vs Linked List Linked lists are unbounded Array : int A[3] Linked List : struct list *A; A[2] A[1] A[0] A(data 3) A(data 2) A(data 1) Linked lists are unbounded (maximum number of items limited only by memory)
Deklarasi struct simpul { char nama[25]; int nrp; struct simpul *next; }; struct simpul *ujung; simpul nama nrp data pointer yg menunjuk simpul lain next
Membangun Linked List Apa yang harus dilakukan? Deklarasi Memory allocation Mengisi data Menyiapkan untuk dihubungkan dengan data baru berikutnya
Bagaimana? nama1 nrp1 next struct simpul *ujung; ujung=(struct simpul*)malloc(sizeof(struct simpul)); printf("Nama :");scanf("%s",&ujung->nama); printf("NRP :");scanf("%d",&ujung->nrp); if(j==0) { ujung->next=NULL; tampung=ujung; } ujung tampung nama1 nrp1 next NULL
Selanjutnya nama2 nrp2 next nama2 nrp2 nama1 nrp1 next next ujung ujung=(struct simpul*)malloc(sizeof(struct simpul)); printf("Nama :");scanf("%s",&ujung->nama); printf("NRP :");scanf("%d",&ujung->nrp); if(j<>0) { ujung->next=tampung; tampung=ujung; } nama2 nrp2 next tampung tampung ujung nama2 nrp2 nama1 nrp1 next next NULL
Selanjutnya nama3 nrp3 next nama3 nrp3 nama2 nrp2 nama1 nrp1 next next ujung ujung=(struct dtnilai*)malloc(sizeof(struct dtnilai)); printf("Nama :");scanf("%s",&ujung->nama); printf("NRP :");scanf("%d",&ujung->nrp); if(j<>0) { ujung->next=tampung; tampung=ujung; } nama3 nrp3 next ujung tampung tampung nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next NULL
Sampai iterasi keempat ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL tampung
Membaca (Menampilkan) ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL tampil tampil tampil tampil tampil tampil = ujung; while (tampil<>NULL) // fungsi menampilkan tampil = tampil -> next;
Mencari simpul ttt. nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL cari cari cari cari = ujung; while (cari->nama!=nama2) { cari = cari->next; }
Menyisipkan sebagai simpul terakhir ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL cari cari cari cari cari = ujung while (cari->next !=NULL) cari = cari->next; cari->next=baru; baru namax nrpx next NULL
Menghapus simpul ttt. nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL hapus hapus = ujung;
Menghapus simpul ttt. nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL hapus while (hapus->nama != nama2) { sbl = hapus; hapus=hapus->next; }
Menghapus simpul ttt. nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL sbl hapus while (hapus->nama != nama2) { sbl=hapus; hapus=hapus->next; }
Menghapus simpul ttt. nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL sbl hapus while (hapus->nama != nama2) { sbl=hapus; hapus=hapus->next; }
Menghapus simpul ttt. nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL sbl hapus sbl->next=hapus->next;
Menghapus simpul ttt. nama4 nrp4 nama3 nrp3 nama1 nrp1 next next next ujung nama4 nrp4 nama3 nrp3 nama1 nrp1 next next next NULL sbl free(hapus);
Menyisipkan setelah simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL cari baru cari = ujung namax nrpx next
Menyisipkan setelah simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL cari baru while (cari->nama!=nama3) cari = cari->next; baru->next = cari->next; namax nrpx next
Menyisipkan setelah simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL cari baru cari->next = baru; namax nrpx next
Menyisipkan sebelum simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL cari baru cari = ujung namax nrpx next
Menyisipkan sebelum simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL stl cari baru cari = ujung; while (cari->nama!=nama1) stl=cari; cari=cari->next; namax nrpx next
Menyisipkan sebelum simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL stl cari baru cari = ujung; while (cari->nama!=nama1) stl=cari; cari=cari->next; namax nrpx next
Menyisipkan sebelum simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL stl cari baru cari = ujung; while (cari->nama!=nama1) stl=cari; cari=cari->next; namax nrpx next
Menyisipkan sebelum simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL stl cari baru baru->next = cari; namax nrpx next
Menyisipkan sebelum simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL stl cari baru stl->next = baru; namax nrpx next