290 likes | 434 Views
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?
E N D
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
[0] [1] [2] array Array A B C node Linked list linked A B C The Linked List data structure Linked lists are unbounded (maximum number of items limited only by memory)
Array vs Linked List Array : int A[3] Linked List : struct list *A; A(data 3) A(data 2) A(data 1) A[2] A[1] A[0] 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? • 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 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 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. 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 NULL next next next next cari cari cari cari cari = ujung while (cari->next !=NULL) cari = cari->next; cari->next=baru; baru namax nrpx next NULL
Menghapus simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL hapus hapus = ujung;
Menghapus simpul ttt. 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. 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. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL hapus sbl while (hapus->nama != nama2) { sbl=hapus; hapus=hapus->next; }
Menghapus simpul ttt. ujung nama4 nrp4 nama3 nrp3 nama2 nrp2 nama1 nrp1 next next next next NULL hapus sbl sbl->next=hapus->next;
Menghapus simpul ttt. 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