Laporan Praktikum Struktur Data Modul 5 – Single Linked List First In First Out (FIFO)

  1. Deskripsi kasus:

Pada percobaan ini, menggunakan konsep First In First Out (FIFO), dimana pada percobaan ini dapat melihat konsep bagaimana jalannya konsep FIFO.

 

Percobaan 1: Struct of Pointer to Linked List FIFO

#include 

struct monitoring
{
 int sensor1;
 int sensor2;
 int sensor3;
 struct monitoring *next;
};
main()
{
 int i;
 struct monitoring *alert;


 alert=(struct monitoring*)malloc(sizeof(struct monitoring));
 alert->sensor1=101;
 alert->sensor2=102;
 alert->sensor3=103;
 alert->next=NULL;


 printf("sensor 1\tsensor 2\tsensor 3\n\n");
 printf("%d\t\t%d\t\t%d\n", alert->sensor1, alert->sensor2, alert->sensor3);
 alert=alert->next;
}

Dari percobaan yang telah dilakukan, jawab pertanyaan berikut ini:

Tampilkan hasil program setelah dijalankan

Tambahkan coding berikut setelah baris ke 19 dan tampilkan hasil program setelah dijalankan.

#include 

struct monitoring
{
 int sensor1;
 int sensor2;
 int sensor3;
 struct monitoring *next;
};
main()
{
 int i;
 struct monitoring *alert;


 alert=(struct monitoring*)malloc(sizeof(struct monitoring));
 alert->sensor1=101;
 alert->sensor2=102;
 alert->sensor3=103;
 alert->next=NULL;

alert=(struct monitoring*)malloc(sizeof(struct monitoring));
 alert->sensor1=201;
 alert->sensor2=202;
 alert->sensor3=203;
 alert->next=NULL;

printf("sensor 1\tsensor 2\tsensor 3\n\n");
 printf("%d\t\t%d\t\t%d\n", alert->sensor1, alert->sensor2, alert->sensor3);
 alert=alert->next;
}

Gambarkan ilustrasi linked list dari langkah b?

Alert
Sensor1=201
Sensor2=202
Sensor3=201
Alert->next=NULL

Berapa jumlah node pada linked list tersebut? 
Satu.

Tuliskan data element pada head.
sensor1=201
sensor2=202
sensor3=203

Tuliskan data element pada tail.
sensor1=201
sensor2=202
sensor3=203

Apa yang dapat disimpulkan dari langkah b dan c?
Langkah b dan c hanya akan memunculkan data yang terakhir karena hanya ada satu variabel struct, dan variabel lama tertimpa.

Modifikasi subrutin main menjadi coding berikut tampilkan hasil program setelah dijalankan

#include 

struct monitoring
{
 int sensor1;
 int sensor2;
 int sensor3;
 struct monitoring *next;
};
main()
{
 int i;
 struct monitoring *alert;
 struct monitoring *first;

first=(struct monitoring*)malloc(sizeof(struct monitoring));
 first->sensor1=101;
 first->sensor2=102;
 first->sensor3=103;
 alert=first;
 first->next=NULL;

alert=(struct monitoring*)malloc(sizeof(struct monitoring));
 first->next=alert;
 alert->sensor1=201;
 alert->sensor2=202;
 alert->sensor3=203;
 alert->next=NULL;

printf("sensor 1\tsensor 2\tsensor 3\n\n");
 printf("%d\t\t%d\t\t%d\n", first->sensor1, first->sensor2, first->sensor3);
 alert=first->next;
 printf("%d\t\t%d\t\t%d\n", alert->sensor1, alert->sensor2, alert->sensor3);
 alert=alert->next;

}

Apa fungsi baris ke 13?
Program menambah struct monitoring dengan nama first, untuk menyimpan data pertama yang telah diinisialisasi.

Apa fungsi baris ke 22?
Baris 22 mengarahkan alamat first->next ke alert.

Apa fungsi baris 29 sampai 32?
Baris 29-32 berfungsi untuk menampilkan data yang diinisialisasi pada variabel first lalu diberi perintah untuk next ke alamat alert, lalu menampilkan lagi.

Mengapa modifikasi ini dapat menampilkan data dari setiap node?
Karena tidak ada node yang tertimpa, dan setiap alamat node telah menuju ke node lainnya (kecuali yang terakhir tetap menuju ke NULL).

Modifikasi baris 28-32 sebagai berikut

#include 

struct monitoring
{
 int sensor1;
 int sensor2;
 int sensor3;
 struct monitoring *next;
};
main()
{
 int i;
 struct monitoring *alert;
 struct monitoring *first;

first=(struct monitoring*)malloc(sizeof(struct monitoring));
 first->sensor1=101;
 first->sensor2=102;
 first->sensor3=103;
 alert=first;
 first->next=NULL;

alert=(struct monitoring*)malloc(sizeof(struct monitoring));
 first->next=alert;
 alert->sensor1=201;
 alert->sensor2=202;
 alert->sensor3=203;
 alert->next=NULL;

printf("sensor 1\tsensor 2\tsensor 3\n\n");
 while(first!=NULL)
 {
 printf("%d\t\t%d\t\t%d\n", first->sensor1, first->sensor2, first->sensor3);
 first=first->next;
 }

}

 

Apa fungsi coding dari langkah sebelumnya?
Coding diatas berguna untuk menampilkan semua node secara otomatis, tanpa memanggil satu persatu.

Tambahkan satu node baru lagi.

#include 

struct monitoring
{
 int sensor1;
 int sensor2;
 int sensor3;
 struct monitoring *next;
};
main()
{
 int i;
 struct monitoring *alert;
 struct monitoring *first;
 struct monitoring *test;

first=(struct monitoring*)malloc(sizeof(struct monitoring));
 first->sensor1=101;
 first->sensor2=102;
 first->sensor3=103;
 alert=first;
 first->next=NULL;

alert=(struct monitoring*)malloc(sizeof(struct monitoring));
 first->next=alert;
 alert->sensor1=201;
 alert->sensor2=202;
 alert->sensor3=203;
 alert->next=NULL;

test=(struct monitoring*)malloc(sizeof(struct monitoring));
 alert->next=test;
 test->sensor1=991;
 test->sensor2=992;
 test->sensor3=993;
 test->next=NULL;


 printf("sensor 1\tsensor 2\tsensor 3\n\n");
 while(first!=NULL)
 {
 printf("%d\t\t%d\t\t%d\n", first->sensor1, first->sensor2, first->sensor3);
 first=first->next;
 }

}

Modifikasi subrutin main menjadi coding berikut tampilkan hasil program setelah dijalankan

#include 

struct monitoring
{
 int sensor1;
 int sensor2;
 int sensor3;
 struct monitoring *next;
};
main()
{
 int i;
 struct monitoring *alert;
 struct monitoring *first;
 struct monitoring *buffer;

first=(struct monitoring*)malloc(sizeof(struct monitoring));
 first->sensor1=101;
 first->sensor2=102;
 first->sensor3=103;
 first->next=NULL;
 buffer=first;

alert=(struct monitoring*)malloc(sizeof(struct monitoring));
 buffer->next=alert;
 alert->sensor1=201;
 alert->sensor2=202;
 alert->sensor3=203;
 alert->next=NULL;
 buffer=alert;

alert=(struct monitoring*)malloc(sizeof(struct monitoring));
 buffer->next=alert;
 alert->sensor1=301;
 alert->sensor2=302;
 alert->sensor3=303;
 alert->next=NULL;
 buffer=alert;


 printf("sensor 1\tsensor 2\tsensor 3\n\n");
 while(first!=NULL)
 {
 printf("%d\t\t%d\t\t%d\n", first->sensor1, first->sensor2, first->sensor3);
 first=first->next;
 }
}

Gambarkan ilustrasi linked list dari langkah p!

Alert First Buffer
Sensor 1 : 101 Sensor 1 : 201 Sensor 1 : 301
Sensor 2 : 102 Sensor 2 : 202 Sensor 2 : 302
Sensor 3 : 103 Sensor 3 : 203 Sensor 3 : 303
Alert->next=First First->next=Buffer Buffer->next=NULL

 

Apa saja hal baru yang ditambahkan pada langkah sebelumnya?
Penambahan satu node, yaitu node buffer

Apa fungsi struct buffer?
Struct buffer menyimpan node ketiga.

Modifikasi kode sebagai berikut.

#include 

struct monitoring
{
 int sensor1;
 int sensor2;
 int sensor3;
 struct monitoring *next;
};
main()
{
 int i;
 struct monitoring *alert;
 struct monitoring *first;
 struct monitoring *buffer;

first=(struct monitoring*)malloc(sizeof(struct monitoring));
 first->sensor1=101;
 first->sensor2=102;
 first->sensor3=103;
 alert=first;
 first->next=NULL;

for(i=2;i<=5;i++)
 {
 buffer=(struct monitoring*)malloc(sizeof(struct monitoring));
 alert->next=buffer;
 buffer->sensor1=(i*100)+1;
 buffer->sensor2=(i*100)+2;
 buffer->sensor3=(i*100)+3;
 alert=buffer;
 alert->next=NULL;
 }


 printf("sensor 1\tsensor 2\tsensor 3\n\n");
 while(first!=NULL)
 {
 printf("%d\t\t%d\t\t%d\n", first->sensor1, first->sensor2, first->sensor3);
 first=first->next;
 }
}

Apa saja yang baru ditambahkan?
Coding ini menambahkan bagian for dimana for akan menambah secara otomatis node ke 2 sampai ke 5.

Pada urutan keberapakah muncul data yang pertama diinputkan?
Urutan pertama.

Pada urutan keberapakah muncul data yang terakhir diinputkan?
Urutan terakhir.

Berdasarkan jawaban pertanyaan terakhir, ceritakan konsep first in first out!
First in first out berarti data yang diinputkan pertama akan dikeluarkan pertama, dan data yang diinputkan terakhir akan dikeluarkan terakhir.

Apa fungsi struct alert, first, dan buffer?
Alert tempat menyimpan struct first setelah diinputkan.
First tempat menyimpan struct yang pertama dibuat. mengarah ke null.
Buffer tempat menyimpan struct yang baru, yang nanti dipindahkan ke alert, lalu struct baru dibuat di dalam buffer, yang mengarah ke alert yang isinya adalah buffer lama.

Selamat anda telah berhasil membuat coding Linked LIst tipe FIFO.
Selamat juga pak. :hammers

 

Share

Tinggalkan Balasan