Download - Bab 8-stack-dan-queue
STACK
Kuliah Struktur Data Pascal
Definisi
• Adalah tumpulan data yang seolah-olah ada data di atas data lain.
• Suatu metode untuk Input dan hapus di dalam memori komputer.
• Konsep utama dalam STACK adalah LIFO ( Last In First Out ).
• Contoh:5.Guntur,4.Aditya,3.Tyas,2.Hendra,1.Dyah
• Data nomor 1 datang/masuk duluan, data nomor 5 yang paling atas yang keluar terlebih dahulu.
Arus Data5 Guntur
12
4 Aditya
24
3 Tyas
14
2 Hendra
15
1 Dyah
25
MASUK KELUAR
Algoritma
Input/tambah data
Jika ada input maka no stack/no tumpukan yang semula 0 akan tambah 1 demi 1 sampai maksimal tumpukan.
Pengambilan data
Jika ada pengambilan data maka data dipindahkan di variabel lain contohnya temp. Dan posisi tumpukannya yang semula maksimal akan berkurang 1 demi 1 sampai posisi 0 kembali.
Begin
top:=0;
For i:=1 to maks do
Begin
Writeln('masukkan nama ke', ' ',i,' ','='); readln(stack[i]);
top:=top+1;
End;
writeln('posisi tumpukan=',top);
Writeln('pengambilan data');
writeln('berapa data yang akan diambil?');readln(n);
if n<4 then
begin
For i:=1 to maks do
Begin
Elemen:=stack[top];
top:=top - 1;
End;
end;
Writeln('data elemen sekarang=',elemen);
writeln('posisi tumpukan=',top); Readln;
End.
CONTOH PROGRAM
Deklarasi
Const max=4;Type
Coba = recorddata :string;End;Barang = ARRAY [1..max] of coba;
VarStack:barang;full,empty:boolean;pilih:integer;top:byte;ambil,taruh,input:string;
Awal Program
• Memastikan posisi tumpukan kosong
• Element yang terambil belum ada
Mengawali stack
Procedure create;
Begin
top:=0;
ambil:=‘belum ada';
taruh:=‘belum ada';
End;
Inputan
• Dipastikan tumpukan belum penuh
• Menginput satu persatu
Pengecekan Kepenuhan
procedure cekpenuh;
Begin
if top=max then
full:=true else full:=false;
End;
Menambah Data
Procedure push;Begin
cekpenuh;If full=false then
Begintop:=top+1;writeln('masukkan data');readln(input);Stack[top].data:=input;taruh:=‘input';end
elsewriteln('maaf tumpukan sudah penuh tidak bisa menambah lagi');
End;
Pengambilan
• Dipastikan tumpukan tidak kosong
• Pengambilan satu persatu
Pengecekan Kekosongan
procedure cekkosong;
Begin
If top=0 then
empty:=true else empty:=false;
End;
Pengambilan Data
Procedure Pop;Begin
cekkosong;If empty=false then
Beginambil:=stack[top].data;top:=top - 1;end
elsewriteln('maaf tumpukan kosong sudah tidak bisa
mengambil lagi');End;
Menampilkan Semua data
• Procedure tampildata;
• Bagin
• For i:=1 to top do
• Begin
• Writeln(‘Data Ke-’,i,’:’,Stack*i+.data);
• End;
• End;
Queue (Antrian)
Kuliah Struktur Data Pascal
Definisi
• Adalah antrian data yang seolah-olah ada data yang mengantri dari yang terawal sampai yang terakhir.
• Suatu metode untuk Input dan hapus di dalam memori komputer.
• Konsep utama dalam Queue adalah FIFO ( First In First Out ).
• Contoh:1.Guntur,2.Aditya,3.Tyas,4.Hendra,5.Dyah
• Data nomor 1 datang/masuk duluan, data nomor 1 juga yang keluar terlebih dahulu.
Arus Data
1 2 3 4 5
guntur aditya tyas hendra dini
KELUAR
MASUK
Algoritma
• Input/tambah data
Jika ada input maka no queue/no antrian yang semula 0 akan tambah 1 demi 1 sampai maksimal antrian.
• Pengambilan data
Jika ada pengambilan data maka data dipindahkan di variabel lain contohnya temp. Dan posisi antriannya yang semula maksimal akan berkurang 1 demi 1 sampai posisi 0 kembali.
Begin
Antri:=0;
{untuk input}
For I:=1 to 3 do
Begin
Writeln(’masukkan nama ke’,’ ’,i);
Readln(d[i]);
Antri:=antri+1;
End;
{untuk Output}
For I:=1 to 3 do
Begin
Temp:=d[i];
Antri:=antri-1;
End;
{lihat output di var temp setelah pengambilan }
Writeln(’hasil var temp=’,temp);
Readln;
End.
CONTOH PROGRAM QUEUE
Deklarasi
program membuatqueue;uses crt;Type
Coba = recordnama :string;umur :integer;End;
Barang = ARRAY [1..4] of coba;Var
elemen:coba;queue:barang;full,empty:boolean;pilih,i:integer;antri:byte;
const max=4;label 1,2,3;
Awal Program
• Memastikan posisi antrian kosong
• Element yang diproses belum ada
Mengawali Queue
Procedure create;
Begin
antri:=0;
elemen.nama:='kosong';
Inputan
• Dipastikan antrian belum penuh (memerlukan pengecekan kepenuhan)
• Menginput satu persatu
Pengecekan Kepenuhan
procedure cekpenuh;
Begin
if antri=max then full:=true else full:=false;
End;
Menambah Data
Procedure push;Begin
cekpenuh;If full=false thenBegin
antri:=antri+1;write(‘nama: ');
readln(queue[antri].nama);writeln;End
elsewriteln('maaf antrian sudah penuh tidak bisa menambah lagi');
End;
Pengambilan
• Dipastikan antrian tidak kosong
• Pengambilan satu persatu atau lebih dari satu (optional)
Pengecekan Kekosongan
procedure cekkosong;
Begin
If antri=0 then empty:=true else empty:=false;
End;
Pengambilan DataProcedure Pop;
Begincekkosong;If empty=false then
BeginElemen.nama:=queue[1].nama;antri:=antri - 1;
endelsewriteln('maaf antrian kosong sudah tidak bisa mengambil
lagi');for i:=1 to antri doqueue[i]:=queue[i+1];
End;