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 <stdio.h> 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:
- Tampilkan hasil program setelah dijalankan untuk 5 stack
- Gambarkan urutan stack hasil dalam bentuk kotak-kotak linked list dari data yang telah diinputkan
- Apa isi node head?
data=1, x=0 - Apa isi node tail?
data=5, x=4 - Modifikasi program tersebut sehingga bisa menampilkan data stack dalam Linked List untuk lebih dari 1 digit angka
#include <stdio.h> 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(); }
6. Modifikasi program tersebut sehingga bisa menampilkan kondisi data stack terbaru untuk setiap penambahan data dan status TOP dari stack tersebut
#include <stdio.h> 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(); }
Incoming Terms
- Ujung Temp
- Laporan Stack Linked List
- Kotak Linked List Struktur Data