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

TUJUAN

Mahasiswa mampu mensimulasikan Insertion pada node tertentu dan Deletion dari Linked List

Percobaan 1: Specific Insertion

 

Salin dan jalankan coding berikut ini kemudian beri komentar pada setiap baris coding.

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>




struct lego //ya begitulah

{

    char warna[20];

    int jumlah_pin;

    struct data *next;

};




struct lego *buffer, *atas, *berikutnya, *sisip, *cari; //ya begitulah




void tampil();

void sisipan();




void main()

{

    char respon_tambahdata[2], respon_sisip[2];




    atas=(struct lego*)malloc(sizeof(struct lego));

    printf("Masukkan warna Lego :");gets(atas->warna);

    printf("Masukkan jumlah pin lego :");scanf("%d",&atas->jumlah_pin);fflush(stdin);

    berikutnya=atas;

    berikutnya->next=NULL;




    printf("Ada data lagi (y/t) :");gets(respon_tambahdata);

    if((strcmp(respon_tambahdata,"t")==0)||(strcmp(respon_tambahdata,"T")==0))

    {

        tampil();

    }

    //jika tidak ada tambahan data, langsung ke tampil()

    do

    {

        buffer=(struct lego*)malloc(sizeof(struct lego));

        berikutnya->next=buffer;

        printf("Masukkan warna lego:");gets(buffer->warna);

        printf("Masukkan jumlah pin lego:");scanf("%d",&buffer->jumlah_pin);fflush(stdin);

        berikutnya=buffer;

        berikutnya->next=NULL;




        printf("Ada data lagi (y/t):");gets(respon_tambahdata);

    }while((strcmp(respon_tambahdata,"t")!=0));

    //selama respon tambah data bukan t, program akan terus berjalan

    printf("Mau menyisipkan data (y/t):");gets(respon_sisip);fflush(stdin);

    if((strcmp(respon_sisip,"t")==0))

        tampil();

    else

    {

        sisipan();

        tampil();

    }//jika respon_sisip bukan t, maka program akan menjalankan sisipan()

}




void tampil()

{

    printf("Susunan lego anda\n");

    printf("Warna\t\tJumlah Pin\n");

    printf("=============================\n");




    while(atas!=NULL)

    {

        printf("%s\t\t%d\n",atas->warna,atas->jumlah_pin);

        atas=atas->next;

    }

    exit(0); //paksa program untuk exit

}




void sisipan()

{

    char warna_sisip[20];

    printf("Lego baru akan disisipkan setelah lego warna : ");gets(warna_sisip);

    cari=atas; //menyalin posisi atas ke cari

    while (cari!=NULL) //selama cari belum NULL

    {

        if(strcmp(warna_sisip,cari->warna)==0) //kalau warna_sisip sama dengan cari->warna

        {

            sisip=(struct lego *)malloc(sizeof (struct lego)); //buat struct baru

            printf("Masukkan warna lego yang akan disisipkan: ");gets(sisip->warna); //minta data

            printf("Masukkan jumlah pin lego yang akan disisipkan:");scanf("%d",&sisip->jumlah_pin);fflush(stdin);




            sisip->next=cari->next;

            cari->next=sisip;

        }

        cari=cari->next;

    }

}

Dari percobaan yang telah dilakukan, jawab pertanyaan berikut ini:

  1. Inputkan 4 buah warna Lego (merah, biru, kuning, ungu) tanpa menyisipkan Lego baru dan tampilkan hasil program ketika dijalankan
    1
  2. Gambarkan ilustrasi linked list saat ini?
    2
  3. Jalankan kembali program dan inputkan 4 buah warna Lego (merah, biru, kuning, ungu) dengan menyisipkan Lego baru setelah Lego warna biru. Tampilkan hasil program ketika dijalankan3
  4. Gambarkan ilustrasi linked list saat ini?
    4
  5. Apakah ketika akan menyisipkan Lego baru diperlukan proses pencarian posisi Lego yang akan disisip?Jelaskan
    Perlu, untuk mengetahui di node mana node baru akan disisipkan. Kecuali jika sudah jelas node baru akan disisipkan di awal atau terakhir
  6. Baris coding berapa yang membandingkan warna lego yang akan disisipkan dengan warna lego yang ada pada Linked List?Jelaskan bagaimana coding tersebut bekerja
    Baris 74
  7. Baris coding berapa yang melakukan update dari pointer next untuk node yang baru disisipkan?Jelaskan bagaimana coding tersebut bekerja
    Baris 82, membuat next dari struct hasil pencarian mengarah ke next dari struct baru.
    Baris 83, membuat next dari struct baru mengarah struct hasil pencarian

 

 

 

 

Percobaan 2: Deletion

  1. Replace semua istilah “sisip” menjadi “hapus” (CTRL+R) pada coding Percobaan 1
  2. Modifikasi perintah printf pada baris 45 menjadi “Mau menghapus data (y/t):”
  3. Gantikan semua isi fungsi hapusan menjadi sebagai berikut:
    void hapusan()
    
    {
    
        char warna_hapus[20];
    
        printf("Masukkan warna lego yang akan dihapus : ");gets(warna_hapus);
    
        cari=atas->next;
    
        if (strcmp(warna_hapus,atas->warna)==0)
    
        {
    
            if(cari->next==NULL)
    
            {
    
                hapus=atas->next;
    
                free(atas);
    
                atas=hapus;
    
                atas->next=NULL;
    
            }
    
            else
    
            {
    
                hapus=atas->next;
    
                free(atas);
    
                atas=hapus;
    
            }
    
        }
    
        else
    
        {
    
            cari=atas;
    
            while(cari!=NULL)
    
            {
    
                hapus=cari->next;
    
                if(strcmp(warna_hapus,hapus->warna)==0)
    
                {
    
                    if(hapus->next!=NULL)
    
                        cari->next=hapus->next;
    
                    else
    
                        cari->next=NULL;
    
                    free(hapus);
    
                }
    
                cari=cari->next;
    
            }
    
        }
    
    }
  4. Inputkan 4 buah warna Lego (merah, biru, kuning, ungu) tanpa menghapus Lego dan tampilkan hasil program ketika dijalankan
    1
  5. Gambarkan ilustrasi linked list saat ini?

    1

  6. Jalankan kembali program dan inputkan 4 buah warna Lego (merah, biru, kuning, ungu) dengan menghapus Lego warna ungu. Tampilkan hasil program ketika dijalankan
    1
  7. Gambarkan ilustrasi linked list saat ini?1
  8. Jelaskan proses penghapusan Lego berdasarkan coding baris 73 sampai 103 dengan lengkap
    Pertama program akan menanyakan warna mana yang akan dihapus. Program akan menyamakan atas->warna dengan warna_hapus. Jika sama, maka hapus. Jika tidak, maka next terus sampai habis.
Share Button

By Rinaldo Jonathan

Admin of this site. Artis papan PCB. #zoneRinaldo #Controllerism Studio Demon, Stage Angel, Sleepy Developer, Smoke free. Kalkud SHS 2012, PCR G15.

Leave a Reply

Verified by ExactMetrics