Laporan Struktur Data Modul 12 – Stack dengan Linked List

TUJUAN

Mahasiswa mampu menerapkan konsep stack dengan single linked list

Percobaan 1: Stacked Linked List

 

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

#include 

struct stack

{

    char data;

    int atas;

    struct stack *next;

};




struct stack *ujung, *temp;

int j=0,x=0;




void push(char input) //fungsi push

{

    if (j==0) //jika j=0

    {

        x++;

        ujung=(struct stack*)malloc(sizeof(struct stack)); //alokasi memori struct

        ujung->data=input; //copy isi char input ke ujung->data

        ujung->atas=x; //copy isi x ke ujung->atas

        ujung->next=NULL; //arahkan next ke NULL

    }

    else

    {

        x++;

        temp=(struct stack*)malloc(sizeof(struct stack)); //alokasi memori struct

        temp->data=input; //copy isi char input ke temp->data

        temp->atas=x; //copy isi x ke ujung->atas

        temp->next=ujung; //arahkan next ke ujung

        ujung=temp; //copy alamat ujung ke temp

    }

    j++;

}




void pop()

{

    printf("\nData stack[%d] : %c",ujung->atas,ujung->data); //cetak data

    //temp=ujung;

    ujung=ujung->next; //lanjut ke struct selanjutnya

    free(temp); //free memory

}




void tampil()

{

    while (ujung!=NULL) //selama ujung belum NULL, terus pop

    {

        pop();

    }

}




main()

{

    char angka,respon[2];

    int indeks=1;

    printf("Masukkan 1 digit angka yang akan di push [%d] :", indeks);

    scanf("%c",&angka);

    push(angka);fflush(stdin);




    printf("Ada data lagi (y/t)? ");gets(respon);

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

    {

        tampil(); //ketika respon sudah t, tampilkan,kalau tidak, lanjut

    }




    do

    {

        indeks++;

        printf("Masukkan 1 digit angka yang akan di push [%d] :", indeks);

        scanf("%c",&angka);

        push(angka);fflush(stdin);

        printf("Ada data lagi (y/t)? ");gets(respon);

    }while (strcmp(respon,"t")!=0); //selama respon belum t, terus minta data

    tampil(); //ya gitu

}


 

Dari percobaan yang telah dilakukan, jawab pertanyaan berikut ini:

    1. Tampilkan hasil program setelah dijalankan untuk 5 stack
      1
    2. Gambarkan urutan stack hasil dalam bentuk kotak-kotak linked list dari data yang telah diinputkan
      2
    3. Apa isi node head?
      data=1, x=0
    4. Apa isi node tail?
      data=5, x=4
    5. Modifikasi program tersebut sehingga bisa menampilkan data stack dalam Linked List untuk lebih dari 1 digit angka
#include 

struct stack

{

    char data[10];

    int atas;

    struct stack *next;

};




struct stack *ujung, *temp;

int j=0,x=0;




void push(char input[10])

{

    if (j==0)

    {

        x++;

        ujung=(struct stack*)malloc(sizeof(struct stack));

        strcpy(ujung->data,input);

        ujung->atas=x;

        ujung->next=NULL;

    }

    else

    {

        x++;

        temp=(struct stack*)malloc(sizeof(struct stack));

        strcpy(temp->data,input);

        temp->atas=x;

        temp->next=ujung;

        ujung=temp;

    }

    j++;

}




void pop()

{

    printf("\nData stack[%d] : %s",ujung->atas,ujung->data);

    //temp=ujung;

    ujung=ujung->next;

    free(temp);

}




void tampil()

{

    while (ujung!=NULL)

    {

        pop();

    }

}




main()

{

    char angka[10],respon[2];

    int indeks=1;

    printf("Masukkan angka yang akan di push [%d] :", indeks);

    scanf("%s",&angka);

    push(angka);fflush(stdin);




    printf("Ada data lagi (y/t)? ");gets(respon);

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

    {

        tampil();

    }




    do

    {

        indeks++;

        printf("Masukkan angka yang akan di push [%d] :", indeks);

        scanf("%c",&angka);

        push(angka);fflush(stdin);

        printf("Ada data lagi (y/t)? ");gets(respon);

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

    tampil();

}

1

 

6. Modifikasi program tersebut sehingga bisa menampilkan kondisi data stack terbaru untuk setiap penambahan data dan status TOP dari stack tersebut

#include 

struct stack

{

char data[10];

int atas;

struct stack *next;

};




struct stack *ujung, *temp;

int j=0,x=0;




void push(char input[10])

{

if (j==0)

{

x++;

ujung=(struct stack*)malloc(sizeof(struct stack));

strcpy(ujung->data,input);

ujung->atas=x;

ujung->next=NULL;

}

else

{

x++;

temp=(struct stack*)malloc(sizeof(struct stack));

strcpy(temp->data,input);

temp->atas=x;

temp->next=ujung;

ujung=temp;

}

j++;

}




void pop()

{

printf("\nData stack[%d] : %s",ujung->atas,ujung->data);

//temp=ujung;

ujung=ujung->next;

free(temp);

}




void tampil()

{

while (ujung!=NULL)

{

pop();

}

}




main()

{

char angka[10],respon[2];

int indeks=1;

printf("Masukkan angka yang akan di push [%d] :", indeks);

scanf("%s",&angka);

push(angka);fflush(stdin);

printf("== Top : %d ==\n",indeks);

printf("Ada data lagi (y/t)? ");gets(respon);

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

{

tampil();

}




do

{

indeks++;

printf("Masukkan angka yang akan di push [%d] :", indeks);

scanf("%c",&angka);

printf("== Top : %d ==\n",indeks);

push(angka);fflush(stdin);

printf("Ada data lagi (y/t)? ");gets(respon);

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

tampil();

}

 

2

Share

Tinggalkan Balasan