PENDAHULUAN
1
3. Pengembangan sistem manajemen laboratorium yang sehat dan harmonis.
2
Waktu praktikum sesuai dengan jadwal yang telah ditentukan, tempat
pelaksannan praktikum di Laboratorium Informatika.
c1. Jumlah tatap muka
jumlah tatap muka praktikum Algoritma dan Struktur Data di Laboratorium
Algoritma dan Struktur Data menetapkan 6 kali tatap muka.
c2. Lama praktikum setiap tatap muka
lama praktikum untuk setiap tatap muka adalah 2 jam dengan
mempertimbangkan bahwa setengah jam pertama untuk persiapan peralatan
sedangkan satu setengah jam berikutnya untuk materi praktikum. Jeda waktu
antar praktikum 15 menit dengan pertimbangan bahwa diperluka waktu kurang
lebih 15 menit bagi asisten untuk mempersiapkan peralatan praktikum
berikutnya.
Prosedur Penggunaan Laboratorium Algoritma Dan Struktur Data
1. Tidak menginstal software pada komputer yang digunakan
a. Tidak menginstal dan menghapus
b. Tidak membuat akun, didirektori
c. Tidak menambah dan mengurangi data yang ada, kecuali yang
dibutuhkan
2. Pelanggaran atas aturan ini dikenakan sanksi tidak dapat mengikuti
praktikum berikutnya
3. Asisten harus melaporkan terjadinya pelanggaran ke laboran dan mencatat
pelanggaran yang terjadi.
4. Kerusakan karena kelalaian praktikan menjadi tanggung jawab praktikan
yang bersangkutan.
5. Tidak membawa makanan dan minuman ke dalam laboratorium.
Prosedur pelaksanaan praktikum
1. Laboran menyiapkan laboratorium dan perlengkapannya.
3
4. Mahasiswa membuat laporan dan diserahkan kepada assisten pada
pertemuan berikutnya.
A > 85,1
AB 76 – 85
B 66 – 75
BC 56 – 65
C 46 – 55
D 36 – 45
E < 35
4
Flowchart Pelaksanaan Praktikum
Langkah-langkah yang dilakukan oleh Laboran, Asisten, Mahasiswa, Dosen dan
Kalab disajikan dalam diagram air.
5
6
Tata Tertib Praktikum Laboratorium Fakultas Teknik Umsida
1. Praktikum dilaksanakan tepat waktu sesuai dengan jadwal yang ditetapkan
2. Mahasiswa yang terlambat datang atau absen harus memberikan
surat/bukti yang dapat dipercaya (surat dokter atau surat keterangan kerja
dari perusahaan).
3. Mahasiswa diperkenankan pindah kelompok/jam/hari praktikum dengan
syarat mengkonfirmasi 1 minggu sebelum pelaksanaan praktikum mealui
Koordinator Praktikum dan Kepala Lab.
4. Mahasiswa yang tidak hadir pada saat jadwal yang telah ditentukan
diperkenankan mengikuti praktikum dengan membayar denda Rp 25.000,-
per modul praktikum selama proses praktikum masih berlangsung.
5. Mahasiswa harus berbusana yang sopan dan rapi (tidak diperkenankan
memakai kaos oblong dan sandal atau sepatu sandal).
6. Praktikum dianggap selesai jika mahasiswa telah menyerahkan laporan
sementara dan alat yang dipinjam dalam keadaan baik, bersih, dan rapi.
7. Kerusakan alat yang dipinjam oleh mahasiswa menjadi tanggung jawab
penuh kelompok mahasiswa yang bersangkutan.
8. Selama praktikum berlangsung, mahasiswa dilarang merokok, makan,
bergurau, bermain alat, menghidupkan handphone, ataupun keluar masuk
ruangan tanpa seijin dosen pembimbing / asisten pendamping.
9. Setelah melakukan praktikum, mahasiswa harus membuat laporan
sementara hasil pengamatan praktikum rangkap dua dan menyerahkan
kepada dosen pembimbing / asisten pada saat meninggalkan ruanganuntuk
ditanda tangani (yang nantinya dilampirkan pada laporan akhir).
10. Mahasiswa yang tidak melaksanakan praktikum 1 modul dinyatakan tidak
lulus.
11. Laporan Akhir Praktikum, cover-nya menggunakan Standar Fakultas dan
laporan diserahkan 2 minggu setelah jadwal masing-masing kelompok.
12. Apabila laporan diserahkan lebih dari 2 minggu maka dinyatakan TIDAK
LULUS dan laporan praktikum diserahkan ke koordinator praktikum dan
kepala lab.
7
13. Mahasiswa yang dinyatakan tidak lulus praktikum harus mengulang
dijadwal praktikum berikutnya dengan membayar biaya praktikum yang
telah ditentukan oleh Universitas melalui bank yang ditunjuk oleh
UMSIDA.
Inventaris Laboratorium Algoritma dan Struktur Data
Monitor : 12
CPU : 12
Mouse : 11
Keyboard : 11
Meja : 12
Kursi : 25
B. Penggunaan Laboratorium Algoritma dan Struktur Data
Laboratorium untuk praktikum Algoritma dan Struktur Data.
C. Peralatan Laboratorium
Di laboratorium Algoritma dan Struktur Data Fakultas Teknik Universitas
Muhammadiyah Sidoarjo memiliki peralatan Laboratorium yang ada untuk
menunjang pelaksanaan praktikum yang berupa:
1. Modul Praktikum Algoritma dan Struktur Data
2. Komputer
3. LCD
4. Papan Tulis
D. Peralatan Pendukung
Software yang digunakan dalam praktikum Algoritma dan Struktur Data adalah
Visual C++ 2010.
8
BAB II
KURIKULUM
B. Silabus Praktikum
Silabus praktikum algoritma dan struktur data:
1. Array,Pointer,dan Struktur.
2. Linked List.
3. Stack.
4. Queue.
5. Rekursif.
6. Sorting.
9
10
LABORATORIUM INFORMATIKA
PROGRAM STUDI INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS MUHAMMADIYAH SIDOARJO
2019
Error: Reference source not found
Lembar Asistensi
Modul I
Nim : 181080200095
Kelompok : 15
Mengetahui,
11
BAB III
MATERI MODUL
POKOK BAHASAN 1
STRUKTUR DATA, ARRAY, POINTER, DAN STRUKTUR
PENDAHULUAN
Pada pokok bahasan ini berisi penjelasan disertai contoh mengenai konsep
struktur data, array, pointer, dan struktur yang menjadi pemahaman dasar bagi
mahasiswa sebelum mempelajari struktur data, dimana konsep array, pointer, dan
struktur digunakan untuk merepresentasikan sebuah struktur data, diharapkan
mahasiswa dapat:
PENYAJIAN
Struktur data adalah sebuah bagian dari ilmu pemrograman dasar yang
mempunyai karakteristik yang terkait dengan sifat dan cara penyimpanan
sekaligus penggunaan atau pengaksesan data.
Struktur data bertujuan agar cara merepresentasikan data dalam membuat program
dapat dilakukan secara efisien dalam pengolahan di memori dan pengolahan
penyimpanan dari program ke storage juga lebih mudah dilakukan.
Struktur array satu dimensi dapat di deklarasikan dengan bentuk umum berupa :
tipe_var nama_var [ukuran];
12
Dengan:
- Tipe_var : untuk menyatakan jenis elemen array (misalnya int, char, unsigned).
Tipe data array dua dimensi biasa digunakan untuk menyimpan, mengolah
maupun menampilkan suatu data dalam bentuk tabel atau matriks. Untuk
mendeklarasikan array agar dapat menyimpan data adalah:
Dimana:
Jumlah elemen yang dimiliki array dua dimensi dapat ditentukan dari hasil
perkalian:
ukuran 1 x ukuran 2.
Seperti halnya pada array satu dimensi, data array dua dimensi akan ditempatkan
pada memori secara berurutan.
Array berdimensi banyak atau multi dimensi terdiri dari array yang tidak terbatas
hanya dua dimensi saja. Bentuk umum pendeklarasian array multi dimensi adalah:
tipe_var nama_var [ukuranl][ukuran2]...[ukurann];
Dalam bahasa C++, data array akan disimpan dalam memori pada alokasi yang
berurutan.
13
Contoh: Float nilai_tes[5];
1, dan seterusnya. Bentuk umum pengaksesan suatu elemen variabel array adalah:
Namavar [indeks];
lnisialisasi Array:
Array dapat diinisialisasikan secara langsung saat pertama kali dideklarasikan
(efisien untuk array berdimensi sedikit).
Contoh : int x[2]={1,2};
Array dapat dideklarasikan terlebih dahulu, baru kemudian diisi elemennya.
Contoh:
int x [2];
x[0]=l;
x[1]=2;
14
C. Konsep Dasar Pointer
Pointer adalah sebuah variabel yang berisi alamat variable yang lain. Suatu
pointer dimaksudkan untuk menunjuk kesuatu alamat memori sehingga alamat
dari suatu variabel dapat diketahui dengan mudah. Deklarasi pointer:
Operator pointer:
Operator ‘&’: untuk mendapatkan alamat memori operand / variable pointer.
Operator ‘*’ : untuk mengakses nilai data operand / variabel pointer.
Struktur adalah koleksi dari variabel yang dinyatakan dengan sebuah nama,
dengan sifat setiap variabel dapat memiliki tipe yang berlainan. Struktur biasa
dipakai untuk mengelompokkan beberapa informasi yang berkaitan menjadi
sebuah satu kesatuan. Contoh sebuah struktur adalah informasi data tanggal, yang
berisi tanggal, bulan, dan tahun.
Mendeklarasikan Struktur :
Contoh pendefinisian tipe data
struktur adalah : struct data_tanggal
{int tanggal;
Masing-masing tipe dari elemen struktur dapat berlainan. Adapun
variabel_struktur l sampai dengan variabel_struktur M menyatakan bahwa
variabel struktur yang dideklarasikan bisa lebih dari satu. Jika ada lebih dari satu
veriabel ,antara variabel struktur dipisahkan dengan tanda koma.
15
Elemen dari struktur dapat diakses dengan menggunakan bentuk:
variabel-struktur.nama-field
Antara variabel_struktur dan nama_field dipisahkan dengan operator titik
(disebut operator anggota struktur). Contoh berikut merupakan instruksi untuk
mengisikan data pada field tanggal:
tgl_lahir.tanggal = 30
int buIan;
int tahun;
};
Yang mendefinisikan tipe struktur bernama data_tanggal, yang terdiri dari tiga
buah elemen berupa tanggal, bulan, dan tahun. Bentuk umum dalam
mendefinisikan dan mendeklarasikan struktur adalah:
Struct nama_tipe_struktur
{
Tipe fieldl;
Tipe field2;
Tipe field3;
}
variabel_strukturl....variabel_strukturM;
16
for(i=0;i<10;i++)
{
k=i+1;
square[i] = k*k;
printf("\n Pangkat dari %d adalah %d",k,square[i]);
}
_getch();
}
Output:
int main() {
int matrik1[2][3]={{1,2,3},{4,5,6}};
int matrik2[2][3]={1,2,3,4,5};
int matrik3[2][3]={{1,2},{4}};
17
printArray(matrik1);
printArray(matrik2);
printArray(matrik3);
_getch();
}
3. Program pointer
Script:
#include <stdio.h>
#include <iostream>
#include <conio.h>
18
int main(void) {
int v=7,*p;
p =&v;
cout<<"Nilai v = "<<v;
cout<<endl;
cout<<endl;
cout<<"Nilai *p = "<<*p;
cout<<endl;
cout<<endl;
cout<<"Alamatnya = "<<p;
_getch();
}
Output:
#define MAX 10
19
struct dtnilai
{
char nim[12];
char nama[20];
double nilai[MAX];
};
int main() {
struct dtnilai data;
int i,jml;
char strnilai[5],strjum[5];
printf("NIM : ");
gets(data.nim);
cout<<endl;
printf("Nama : ");
gets(data.nama);
cout<<endl;
printf("Jumlah Test : ");
gets(strjum);
jml=atoi(strjum);
cout<<endl;
for(i=0;i<jml;i++)
{
printf("Nilai Test %d : ",i+1);
gets(strnilai);
data.nilai[i]=atof(strnilai);
}
cout<<endl;
printf("==============================================");
cout<<endl;
20
printf("DATA MAHASISWA YANG TELAH DIINPUTKAN : \n");
cout<<endl;
printf("NIM : %s\n",data.nim);
cout<<endl;
printf("Nama : %s\n",data.nama);
cout<<endl;
for(i=0;i<jml;i++)
{
printf("Nilai Test %d : %1f\n",i+1, data.nilai[i]);
}
_getch();
}
Output:
21
#include <conio.h>
void p(void);
int *a, *b;
int main()
{
p();
}
void p(void)
{
a=(int *)malloc(sizeof(int));
b=(int *)malloc(sizeof(int));
*a=19;
*b=5;
a=b;
*b=8;
printf("Alamat a = %x\t Isi a= %d\n",a,*a);
printf("Alamat b = %x\t Isi b= %d\n",b,*b);
_getch();
}
Output:
Tugas!
1. Buatlah program menggunakan POINTER untuk merubah karakter yang
dimasukkan dari huruf kecil menjadi huruf besar.
Script:
#include <iostream>
22
#include <conio.h>
#include <ctype.h>
using namespace std;
int main()
{
char str[100]="characters";
cout<<"String SEBELUM proses adalah "<<str<<endl;
char *p;
int i;
p= str;
for(i=0;p[i];i++)
p[i]=toupper(p[i]);
cout<<"String SESUDAH proses adalah "<<p<<endl;
_getch();
}
Output:
23
{
jumlah=jumlah+1;
}
cout<<"\nJumlah Karakternya = "<<jumlah<<endl;
_getch();
}
Output:
3. Buatlah program array dalam struktur, yang menampilkan judul film dan
tahun terbit dari data yang telah diinputkan. Data yang dimasukkan sebanyak 3
(tiga) data.
Script:
#include<iostream>
#include<conio.h>
using namespace std;
int main ()
{
char film1[50], thn1[50], film2[50], thn2[50], film3[50], thn3[50];
char film[3][50],thn[3][10];
for (int i = 1; i <= 3; i++)
{
cout<<"Masukkan Judul Film: ";
gets(film[i]);
cout<<"Masukkan Tahun Terbit : ";
gets(thn[i]);
cout<<endl;
}
cout<<""<<endl;
cout<<"Berikut film kamu :"<<endl;
24
for (int i = 1; i <= 3; i++)
{
cout<<film[i]; cout<<" ("<<thn[i] <<") "<<endl;
}
_getch();
}
Output:
25
LABORATORIUM INFORMATIKA
PROGRAM STUDI INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS MUHAMMADIYAH SIDOARJO
2019
Error: Reference source not found
Lembar Asistensi
Modul II
Nim : 181080200095
Kelompok : 15
Mengetahui,
26
POKOK BAHASAN 2
LINKED LIST (SENARAI)
PENDAHULUAN
Pada pokok bahasan ini akan dibahas mengenai struktur data senarai (list) yang
pembahasannya meliputi definisi dan representasi list, jenis-jenis list serta
operasi- operasi dasar pada list. Sehingga setelah mempelajari bab ini diharapkan
mahasiswa mampu:
a. Menjelaskan definisi dan representasi list.
b. Mengetahui jenis-jenis list.
c. Memahami operasi-operasi pada list.
PENYAJIAN (TUTORIAL)
Linked List adalah sejumlah objek atau elemen yang dihubungkan satu dengan
lainnya sehingga membentuk suatu list. Sedangkan objek atau elemen itu sendiri
adalah merupakan gabungan beberapa data (variabel) yang dijadikan satu
kelompok atau structure atau record yang dibentuk dengan perintah struct. Untuk
menggabungkan objek satu dengan lainnya, diperlukan paling tidak sebuah
variabel yang bertipe pointer. Syarat linked list adalah harus dapat diketahui
alamat simpul pertama atau biasa dipakai variabel First/Start/Header. Struktur
dasar sebuah list seperti gambar berikut:
27
a. Bagian data
b. Bagian pointer yang menunjuk ke simpul berikutnya
- First/Header
Variabel First/Header berisi alamat (pointer) / acuan (reference) yang menunjuk
lokasi simpul pertama linked list, digunakan sebagai awal penelusuran linked list.
- Nil/Null
Tidak bernilai, digunakan untuk menyatakan tidak mengacu kemanapun.
- Simpul Terakhir (Last)
Simpul terakhir linked list berarti tidak menunjuk simpul berikutnya. Tidak
terdapat alamat disimpan di field pointer (bagian ke dua dari simpul). Nilai null
atau nilai simpan di field pointer di simpul terakhir.
Gambar 2,2 list tunggal dengan kepala dan ekorm list tunggal berputar
28
List Ganda
List ganda adalah sebuah list yang elemennya menyimpan informasi elermen
sebelumnya dan informasi elemen setelahnya, sehingga proses penelusuran list
dapat dilakukan secara maju dan mundur. List ganda terbagi menjadi tiga jenis
yaitu list ganda dengan kepala(first), list ganda dengan kepala (first) dan
ekor(tail), serta list ganda yang berputar.
Gambar 2.3 List ganda dengan kepal, list ganda dengan kepala dan ekor
29
LEMBAR KERJA DAN TUGAS
1. Contoh program sisip senarai (linked list)
Script:
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
using namespace std;
NODPTR NodBaru(int m)
{
NODPTR n;
n = (NODPTR) malloc(sizeof(NOD));
if(n!=NULL)
{
n->data=m;
n->next=NULL;
}
return n;
30
}
void CetakSenarai(NODPTR s)
{
NODPTR ps;
for(ps=s;ps!=NULL;ps=ps->next)
printf("%d --> ",ps->data);
printf("NULL\n");
}
int main()
{
NODPTR pel;
NODPTR n;
CiptaSenarai(&pel);
n=NodBaru(55);
SisipSenarai(&pel, n, NULL);
n=NodBaru(75);
SisipSenarai(&pel, n, NULL);
CetakSenarai(pel);
_getch();
31
}
Output:
32
char hapus[5];
int j=0;
while (1)
{
if (j==0)
{
awal=(struct dtnilai*)malloc(sizeof(struct dtnilai));
printf("NIM : ");
gets(awal->nim);
printf("\n");
printf("Nama : ");
gets(awal->nama);
printf("\n");
printf("Nilai Test : ");
gets(strnilai);
printf("\n");
awal->nilai = atof(strnilai);
tampung=awal;
tampung->next=NULL;
}
else
{
ujung=(struct dtnilai*)malloc(sizeof(struct dtnilai));
tampung->next=ujung;
printf("NIM : ");
gets(ujung->nim);
printf("\n");
printf("Nama : ");
gets(ujung->nama);
printf("\n");
printf("Nilai Test : ");
33
gets(strnilai);
printf("\n");
ujung->nilai=atof(strnilai);
ujung->next=NULL;
tampung=ujung;
}
printf("Masukkan Data lagi? (y/t) : ");
gets(jawab);
printf("\n");
if(strcmp(jawab, "y")==0||strcmp(jawab,"Y")==0)
{
j++;
continue;
}
else if((strcmp(jawab,"T")==0||strcmp(jawab,"t")==0))
break;
}
printf("\nData Mahasiswa yang Diinputkan : \n");
printf("========================================\n");
printf("NIM \tNama \tNilai\n");
ujung=awal;
while (ujung!=NULL)
{
printf("%s\t%s\t%6.2f\n",ujung->nim,ujung->nama,ujung->nilai);
ujung=ujung->next;
}
getch();
}
34
Output:
35
{
printf("DATA MAHASISWA : \n");
printf("=====================================\n");
struct dtnilai *tampung;
struct dtnilai *ujung;
struct dtnilai *awal;
struct dtnilai *tanda;
struct dtnilai *tanda2;
char strnilai[10];
char jawab[5];
char hapus[5];
int j=0;
while (1)
{
if (j==0)
{
awal=(struct dtnilai*)malloc(sizeof(struct dtnilai));
printf("NIM : ");
gets(awal->nim);
printf("\n");
printf("Nama : ");
gets(awal->nama);
printf("\n");
printf("Nilai Test : ");
gets(strnilai);
printf("\n");
awal->nilai = atof(strnilai);
tampung=awal;
tampung->next=NULL;
}
else
36
{
ujung=(struct dtnilai*)malloc(sizeof(struct dtnilai));
tampung->next=ujung;
printf("NIM : ");
gets(ujung->nim);
printf("\n");
printf("Nama : ");
gets(ujung->nama);
printf("\n");
printf("Nilai Test : ");
gets(strnilai);
printf("\n");
ujung->nilai=atof(strnilai);
ujung->next=NULL;
tampung=ujung;
}
printf("Masukkan Data lagi? (y/t) : ");
gets(jawab);
printf("\n");
if(strcmp(jawab, "y")==0||strcmp(jawab,"Y")==0)
{
j++;
continue;
}
else if((strcmp(jawab,"T")==0||strcmp(jawab,"t")==0))
break;
}
printf("\nData Mahasiswa yang Diinputkan : \n");
printf("========================================\n");
printf("NIM \tNama \tNilai\n");
ujung=awal;
while (ujung!=NULL)
37
{
printf("%s\t%s\t%6.2f\n",ujung->nim,ujung->nama,ujung->nilai);
ujung=ujung->next;
}
while(1)
{
printf("\n");
printf("NIM yang akan dihapus (NIM/(t/T)) : \n");
gets (hapus);
if ((strcmp (hapus, "t")==0 ||strcmp(hapus,"T")==0))
{
printf ("Masukkan NIM\n");
continue;
}
else
break;
}
if(strcmp(awal -> nim,hapus)==0)
{
tanda=awal->next;
free (awal);
awal=tanda;
}
else
{
tanda2=awal;
tanda=tanda2->next;
while (tanda!=NULL)
{
if (strcmp(tanda->nim,hapus)==0)
{
if(tanda->next!=NULL)tanda2->next=tanda->next;
38
else
tanda2->next=NULL;
free (tanda);
break;
}
tanda2=tanda;
tanda=tanda->next;
}
}
printf("\n");
printf("Data Mahasiswa yang telah Dihapus (FIFO) : \n");
printf("============================================\n");
printf("NIM \tNama \tNilai \n");
ujung=awal;
while (ujung!=NULL)
{
printf ("%s\t%s\t%6.2f\n",ujung ->nim, ujung ->nama,ujung ->nilai);
ujung=ujung -> next;
}
getch();
}
39
Output:
Tugas!
1. Buatlah program untuk menampilkan 10 bilangan secara menurun yaitu 10, 9,
8, sampai dengan 1 menggunakan LINKED LIST.
Script:
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
using namespace std;
typedef struct nod
{
40
int data;
struct nod *next;
}NOD, *NODPTR;
void CiptaSenarai(NODPTR *s)
{
*s = NULL;
}
NODPTR NodBaru(int m)
{
NODPTR n;
n= (NODPTR) malloc (sizeof(NOD));
if (n != NULL)
{
n->data=m;
n->next = NULL;
}
return n;
}
void SisipSenarai(NODPTR *s, NODPTR t, NODPTR p)
{
if (p==NULL)
{
t->next=*s;
*s=t;
}
else{
t->next=p->next;
p->next=t;
}
}
void CetakSenarai(NODPTR s)
{
41
NODPTR ps;
for (ps=s; ps!=NULL; ps=ps->next)
printf("%d ", ps->data);
printf("\n");
}
int main()
{
NODPTR pel;
NODPTR n;
CiptaSenarai(&pel);
Output:
42
#include <iostream>
#include <conio.h>
using namespace std;
struct dtnilai
{
char nim[15];
char nama[20];
double nilai;
struct dtnilai *next;
};
int main()
{
printf("DATA BUKU : \n");
printf("=======================\n");
struct dtnilai *tampung;
struct dtnilai *ujung;
struct dtnilai *awal;
struct dtnilai *tanda;
struct dtnilai *tanda2;
char strnilai[10];
char jawab[5];
char hapus[5];
int j=0;
while (1)
{
if(j==0)
{
awal=(struct dtnilai*)malloc(sizeof(struct dtnilai));
printf("ID : ");
gets(awal->nim);
43
printf("\n");
printf("Judul : ");
gets(awal->nama);
printf("\n");
printf("Jumlah : ");
gets(strnilai);
printf("\n");
awal->nilai = atof(strnilai);
tampung=awal;
tampung->next=NULL;
} else
{
ujung=(struct dtnilai*)malloc(sizeof(struct dtnilai));
tampung->next=ujung;
printf("ID : ");
gets(ujung->nim);
printf("\n");
printf("Judul : ");
gets(ujung->nama);
printf("\n");
printf("Jumlah : ");
gets(strnilai);
printf("\n");
atof(strnilai);
ujung->next=NULL;
tampung=ujung;
}
printf("Masukkan Data Lagi? (y/t) : ");
gets(jawab);
printf("\n");
if(strcmp(jawab,"Y")==0||strcmp(jawab,"y")==0)
{
44
j++;
continue;
}
else if((strcmp(jawab,"T")==0||strcmp(jawab,"t")==0))
break;
}
printf("\nData Buku yang telah diinputkan : \n");
printf("=========================================\n");
printf("id \tJudul \tJumlah\n");
ujung=awal;
while(ujung!=NULL)
{
printf("%s\t%s\t%6.2f\n",ujung->nim,ujung->nama,ujung->nilai);
ujung=ujung->next;
}
while(1)
{
printf("\n");
printf("ID yang akan dihapus (ID/(t/T)) : \n");
gets(hapus);
if((strcmp (hapus, "t")==0 ||strcmp(hapus,"T")==0))
{
printf("Masukkan ID\n");
continue;
}
else
break;
}
if (strcmp(awal->nim,hapus)==0)
{
tanda=awal->next;
free (awal);
45
awal=tanda;
} else
{
tanda2=awal;
tanda=tanda2->next;
while(tanda!=NULL)
{
if(strcmp(tanda->nim,hapus)==0)
{
if(tanda->next!=NULL)
tanda2->next=tanda->next;
else
tanda2->next=NULL;
free (tanda);
break;}
tanda2=tanda;
tanda=tanda->next;
}
}
printf("\n");
printf("Data Buku Yang Telah Dihapus (FIFO):\n");
printf("========================================\n");
printf("id \tJudul \t\tJumlah\n");
ujung=awal;
while (ujung!=NULL)
{
printf("%s\t%s\t%6.2f\n",ujung->nim,ujung->nama,ujung->nilai);
ujung=ujung->next;
}
getch();
}
46
Output:
47
LABORATORIUM INFORMATIKA
PROGRAM STUDI INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS MUHAMMADIYAH SIDOARJO
2019
Error: Reference source not found
Lembar Asistensi
Modul III
Nim : 181080200095
Kelompok : 15
Mengetahui,
48
POKOK BAHASAN 3
STACK (TUMPUKAN)
PENDAHULUAN
Pada pokok bahasan ini akan dibahas mengenai struktur data tumpukan atau stack,
dimana stack merupakan suatu kumpulan data yang seolah-olah ada data yang
diletakkan diatas data yang lain. Setelah memepelajari materi ini diharapkan
mahasiswa mampu untuk:
a.Mengetahui dan memahami definisi stack.
b.Memahami operasi-operasi dasar stack.
c.Memahami representasi statis dan dinamis stack.
PENYAJIAN (TUTORIAL)
Stack adalah kumpulan elemen-elemen yang tersimpan dalam suatu tumpukan.
Aturan penyisipan dan penghapusan elemennya tertentu:
- Penyisipan selalu dilakukan "diatas" TOP
- Penghapusan selalu dilakukan pada TOP
Karena aturan penyisipan dan penghapusan semacam itu, TOP adalah satu-satu
nya alamat tempat terjadi operasi, elemen yang ditambahkan paling akhir akan
menjadi elemen yang akan dihapus. Dikatakan bahwa elemen Stack tersusun
secara LIFO (Last In First Out).
Seperti halnya jika kita mempunyai sebuah tumpukan buku, agar tumpukan buku
itu tidak ambruk ketika kita mengambil sebuah buku didalam tumpukan itu maka
harus diambil satu persatu dari tumpukan yang paling atas dari tumpukan.
49
Perhatikan bahwa dengan definisi semacam ini, representasi tabel sangat tepat
untuk mewakili stack, karena operasi penambahan dan pengurangan hanya
dilakukan di salah satu ujung tabel.
if(Full (S)){
Printf("Stack FULL");
}else{
++(S->count);
50
}
if(Empty(S)){
Printf("Stack Kosong");
}else{
--(S->Count);
x=s->item(s->Count);
S->Count=0;
int Empty(Stack*5){
Return(S->Count == 0);
Representasi stack:
- Representasi statis
51
Stack dengan representasi statis biasanya di implementasikan dengan
menggunakan array. Sebuah array memiliki tempat yang dialokasikan diawal
sehingga sebuah elemen yang dimasukkan dalam sebuah array terbatas pada
tempat yang ada pada array. Karena menggunakan array maka stack dengan
representasi statis dalam mengalami kondisi elemen penuh. Ilustrasi stack dengan
representasi statis dapat dilihat pada gambar 3.2:
52
Gambar 3.3 Representasi Stack Dinamis
Karena semua operasi pada sebuah stack diawali dengan elemen yang paling atas
maka jika menggunakan representasi dinamis saat elemen di tambahkan akan
menggunakan penambahan elemen pada awal stack(addfirst) dan saat
pengambilan atau penghapusan elemen menggunakan penghapusan diawal stack
(delfirst).
1. Program Stack
Script:
#include <stdio.h>
#include <conio.h>
#include <iostream>
#define MAXSTACK 3
typedef int itemType;
typedef struct
{
int item [MAXSTACK];
int jml;
} Stack;
void init(Stack *s)
{
s->jml=0;
}
int kosong(Stack *s)
{
return (s->jml==0);
}
53
int penuh(Stack *s)
{
return (s->jml==MAXSTACK);
}
void isi(itemType x, Stack *s)
{
if(penuh(s))
printf("\nMAAF!!! Data PENUH\n");
else{
s->item[s->jml]=x;
++(s->jml);
}
}
void ambil(Stack *s, itemType *x)
{
if(kosong(s))
printf("\nMAAF Data Kosong\n");
else
{
--(s->jml);
*x=s->item[s->jml];
s->item[s->jml]=0;
printf("\Data %i Berhasil Diambil\n",*x);
}
}
void tampil(Stack *s)
{
if (kosong(s))
printf("\Maaf Data Masih Kosong\n");
else
printf("\n");
for(int i=s->jml-1;i>=0;i--)
54
{
printf("Data: %d\n",s->item[i]);
}
}
void hapus(Stack *s)
{
s->jml=0;
printf("\nSemua Data Berhasil Dihapus\n");
}
int main()
{
int pil;
Stack tumpukan;
itemType data;
init(&tumpukan);
do
{
printf("\nMENU: \n 1. Isi (Data Angka)\n 2. Ambil\n 3. Lihat\n 4.
Hapus, (Hapus Semua Data)\n 5. Keluar\n");
printf("\n");
printf("Masukkan Pilihan : "); scanf("%i",&pil);
switch(pil)
{
case 1:
printf("\nMasukkan Data Angka : ");
scanf("%i",&data);;
isi(data,&tumpukan);
break;
case 2:
ambil(&tumpukan,&data);
break;
case 3 :
55
tampil(&tumpukan);
break;
case 4 :
hapus(&tumpukan);
break;
}
}while(pil!=5);
getch();
}
Output:
56
Script:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <conio.h>
using namespace std;
#define MAX 10
struct ttumpukan
{
int elm [MAX];
int puncak;
};
struct ttumpukan t;
int top;
void inisialisasi ()
{
t.puncak=0;
top=0;
}
void push (int x)
{
if(t.puncak==MAX)
printf ("Stack Sudah Penuh\n");
else
{
t.puncak=top+1;
t.elm[t.puncak]=x;
top=t.puncak;
printf ("PUSH %d : %d\n",t.puncak,t.elm[t.puncak]);
}
}
57
void pop()
{
if (top==0)
printf ("Stack Kosong\n");
else
{
printf ("\nPOP %d = %d\n",top,t.elm[top]);
t.puncak=top-1;
top=t.puncak;
}
}
void main ()
{
int i, jum;char strnilai[5], strjum[5];
inisialisasi ();
printf ("Masukkan jumlah Data : ");gets (strjum);
printf("\n");
jum=atoi(strjum);
for (i=0;i<jum;i++)
{
printf ("Nilai Integer %d : ",i+1);
gets (strnilai); push(atoi(strnilai));
printf ("\n");
}
for (i=jum;i>0;i--)
printf ("Elemen Data : %d\n",t.elm[i]);
for (i=0;i<jum;i++)
pop ();
getch();
}
Output:
58
3. Mempresentasikan Stack menggunakan Linked List
Script:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <conio.h>
using namespace std;
struct sStack
{
int isi;
struct sStack*next;
};
int x,i=1,j=1;
struct sStack*atas,*bantu,*baru;
void push(int nilai)
{
if(j==1)
{
atas=(struct sStack*)malloc(sizeof(struct sStack));
atas->isi=nilai;
atas->next=NULL;
59
}
else
{
baru=(struct sStack*)malloc(sizeof(struct sStack));
baru->isi=nilai;
baru->next=atas;
atas=baru;
}
j++;
}
void pop()
{
bantu=atas;
printf("Data Yang Di POP %d : %d\n",i,bantu->isi);
atas=atas->next;
i++;
free(bantu);
}
int main()
{
char jawab[2],strNilai[5];
while(1)
{
printf("Data Yang Di PUSH ke %d : ",j);
gets(strNilai);x=atoi(strNilai);
push(x);
printf("Data Lagi ? <y/t> : ");
gets(jawab);
if((strcmp(jawab,"Y")==0)||(strcmp(jawab,"y")==0))
continue;
else
break;
60
}
j--;
printf("Data Nilai Yang Telah Diinputkan :\n");
while(atas!=NULL)
pop();
getch();
}
Output:
Tugas!
1. Buatlah program stack statis yang menampilkan data yang di push dan di pop.
Script:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include <conio.h>
using namespace std;
struct sStack
{
char isi;
struct sStack*next;
};
int x,i=1,j=1;
struct sStack*atas, *bantu, *baru;
void push(char nilai)
61
{
if (j==1)
{
atas=(struct sStack*)malloc(sizeof(struct sStack));
atas->isi=nilai;
atas->next=NULL;
}
else
{
baru=(struct sStack*)malloc(sizeof(struct sStack));
baru->isi=nilai;
baru->next=atas;
atas=baru;}
printf("%c is Pushed\n", nilai);
j++;
}
void pop()
{
bantu=atas;
printf("%c is Popped\n",*bantu);
atas=atas->next;
i++;
free(bantu);
}
int main()
{
push('3');
push('8');
push('1');
cout<<endl;
j--;
62
while(atas!=NULL)
pop();
getch();
}
Output:
Script:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include <conio.h>
using namespace std;
struct sStack
{
char isi;
struct sStack*next;
};
int x,i=1,j=1;
struct sStack*atas, *bantu, *baru;
void push(char nilai)
{
63
if(j==1)
{
atas=(struct sStack*)malloc(sizeof(struct sStack));
atas->isi=nilai;
atas->next=NULL;
}
else
{
baru=(struct sStack*)malloc(sizeof(struct sStack));
baru->isi=nilai;
baru->next=atas;
atas=baru;
}
j++;
}
void pop()
{
bantu=atas;
printf("[%c] --> ",*bantu);
atas=atas->next;
i++;
free(bantu);
}
int main()
{
push('I');
push('D');
push('E');
push('T');
j--;
while(atas!=NULL)
pop();
64
printf("NULL");
getch();
}
Output:
65