MODUL PRAKTIKUM STRUKTUR DATA
OPERASI PENAMBAHAN ELEMEN PADA SENARAI/LIST
Mata Kuliah Bahasa Pemrograman Software Dosen
: Struktur Data : C++ : C-Free : Taofik Muhammad
AMIK HASS BANDUNG
LIST (Senarai) List atau senarai adalah sebuah pemikiran/konsep struktur data yang sangat dasar pada pemrograman agar lebih fleksibel, di mana setiap elemen akan ditambahkan saat dibutuhkan, tidak dialokasikan dengan tempat tertentu dari awal. List merupakan kumpulan elemen dengan struktur tertentu. Pada pratikum kali ini kita akan mempelajari bagaimana mengimplementasikan proses penambahan list di awal, di tengah, dan di akhir dengan menggunakan bahasa pemrograman C++. Baca petunjuk, dan ikuti langkah-langkah dibawah ini agar anda mudah untuk memahaminya. 1. Buka IDE C-Free anda. 2. Buat file baru dengan memilih File->New 3. Simpan file tersebut (file->save) dan beri nama “list”. Jangan lupa ubah save as typenya ubah menjadi c++ files. 4. Pada jendela kerja masukan kode-kode dibawah ini secara berurutan dan tetap pada file yang sama. Mendeklarasikan stuktur data nilai mata kuliah yang menjadi data elemen #include <stdio.h> #include <string.h>
//deklarasi struktur nilai mata kuliah typedef struct{ char nim[10]; char nama[50]; char nilai[2]; }nilaiMatKul; Mendeklarasikan struktur data elemen //deklarasi stuktur data elemen typedef struct{ nilaiMatKul elmt; int next; }elemen; Mendeklarasikan list tunggal menggunakan array typedef struct { int first; elemen data[10]; }list; Mendeklarasikan prosedur createList yang menginisialisasi nilai first pada list dimana diasumsikan sebuah list kosong nilai first adalah elemen dengan indeks -
1 dan menginisialisasi isi array dimana isi next dari elemen diisi dengan -2 sebagai asumsi bahwa elemen adalah elemen kosong void createList(list *L) { (*L).first = -1; int i; for (i=0;i<=10;i++) { //proses menginisialisasi isi array (*L).data[i].next=-2; } }
Mendeklarasikan fungsi countElement yang menghitung jumlah elemen list int countElement(list L) { int hasil=0; if (L.first != -1) { //list tidak kosong int elmt; //inisialisasi elmt=L.first; while (elmt != -1) { //proses hasil=hasil+1; //iterasi elmt=L.data[elmt].next; } } return hasil;
} Mendeklarasikan fungsi emptyElement yang mengembalikan indeks elemen array yang masih kosong, dan jika tidak ditemukan maka mengembalikan nilai -1 (array telah penuh) int emptyElement (list L) { int hasil=-1; if (countElement(L)<10) { int ketemu=0; int i=0; while ((ketemu==0) && (i<=10)) { if (L.data[i].next==-2) { hasil =i; ketemu =1; }else { i=i+1; } } } return hasil; }
Mendeklarasikan prosedur addFirst yang menambhakna elemen pada awal list Kasus yang harus ditangani: - Jika list belum penuh cari tempat kosong dan isis dengan data elemen baru - Jika list kosong tambahkan elemen sebagai awal list elemen kosong - Jika list tidak kosong tambahkan elemen sebagai awal list dengan elemen next merupakan elemen awal list sebelum ditambah - Jika list penuh tampilkan pesan list penuh
void addFirst(char nim[],char nama[],char nilai[], list *L) { if (countElement(*L)<10) { int indeks=emptyElement(*L); strcpy((*L).data[indeks].elmt.nim,nim); strcpy((*L).data[indeks].elmt.nama,nama); strcpy((*L).data[indeks].elmt.nilai,nilai); if ((*L).first==-1) { //jika list kosong (*L).data[indeks].next=-1; }else { (*L).data[indeks].next; (*L).data[(*L).first].next; } (*L).first = indeks; }else { cout<<"sudah tidak dapat ditambahkan"; } }
Mendeklarasikan prosedur addAfter yang menambahkan elemen pada tengah list Kasus yang harus ditangani: - Jika list belum penuh cari tempat kosong dan isi dengan data elemen baru dan elemen baru ditambahkan sebagai elemen setelah prec - Jika list penuh tampilkan pesan list penuh int addAfter(int prec, char nim[], char nama[],char nilai[], list *L) { if (countElement(*L)<10) {
int indeks=emptyElement(*L);
strcpy((*L).data[indeks].elmt.nim, nim); strcpy((*L).data[indeks].elmt.nama, nama); strcpy((*L).data[indeks].elmt.nilai,nilai);
(*L).data[indeks].next=(*L).data[prec].next; (*L).data[prec].next=indeks; }else { //proses jika array penuh cout<<"sudah tidak dapat ditambah"; } }
Mendeklarasikan prosedur addLast yang menambahkan elemen pada akhir list Kasus yang harus ditangani : - Jika list kosong, buat elemen pada indeks awal sebagai elemen pertama list - Jika list telah berisi elemen - Jika list belum penuh cari tempat kosong dan isi dengan data elemen, cari indeks elemen terakhir, tambahkan elemn baru pada akhir list - Jika list penuh tampilkan pesan list penuh void addLast(char nim[], char nama[], char nilai[], list *L) { if ((*L).first == -1) { //proses jika list masih kosong int indeks=0;
strcpy ((*L).data[indeks].elmt.nim,nim); strcpy ((*L).data[indeks].elmt.nama,nama); strcpy ((*L).data[indeks].elmt.nilai,nilai);
(*L).data[indeks].next=-1; (*L).first=indeks; }else { //proses jika list telah berisi elemen if (countElement(*L)<10) { //proses jika list belum penuh int indeks = emptyElement(*L);
strcpy((*L).data[indeks].elmt.nim,nim); strcpy((*L).data[indeks].elmt.nama,nama); strcpy((*L).data[indeks].elmt.nilai,nilai);
(*L).data[indeks].next=-1;
//proses mencari elemen terakhir
//inisialisasi int last=(*L).first;
while ((*L).data[last].next != -1)
{ //iterasi last=(*L).data[last].next;
}
(*L).data[last].next=indeks; }else { //proses jika array penuh cout<<"sudah tidak dapat ditambah"; } } }
Mendeklarasikan prosedur printElemen yang menampilkan isi elemen list void printElement(list L) { if (L.first != -1) { //inisialisasi int elmt = L.first; int i=1; while (elmt != -1) { cout<<"elemen ke:"<
i=i+1; } }else { //proses jika list kosong cout<<"list kosong"; }
} Mendeklarasikan algoritma utama yang menggunakan operasi list int main() { list L; createList(&L); addFirst("0608551","taofik muhammad","A",&L); addAfter(L.first,"0604156","dini rafuani pratiwi","A",&L); addLast("0689038","udin sedunia","D",&L); printElement(L); }
5. Lakukan kompilasi dengan menekan tombol “run” atau “F5” pada keyboard. 6. Jika tidak ada error maka outputnya akan seperti ini.
==Selamat Belajar==
Referensi : Rosa A.S dan M.Shalahuddin. (2010). Modul Pembelajaran Struktur Data. Penerbit Modula: Bandung