0% menganggap dokumen ini bermanfaat (0 suara)
32 tayangan35 halaman

Algoritma Pemrograman14

Dokumen tersebut membahas tentang struktur data stack (tumpukan) dan queue (antrian) beserta implementasinya dalam bahasa pemrograman. Dokumen menjelaskan konsep LIFO pada stack dan FIFO pada queue, serta cara implementasi operasi-operasi dasar seperti push, pop, add, delete menggunakan array dan pointer.

Diunggah oleh

A'raf riskyhaq
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
32 tayangan35 halaman

Algoritma Pemrograman14

Dokumen tersebut membahas tentang struktur data stack (tumpukan) dan queue (antrian) beserta implementasinya dalam bahasa pemrograman. Dokumen menjelaskan konsep LIFO pada stack dan FIFO pada queue, serta cara implementasi operasi-operasi dasar seperti push, pop, add, delete menggunakan array dan pointer.

Diunggah oleh

A'raf riskyhaq
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 35

Algoritma Pemrograman

Modul 14:
Stack (Tumpukan) dan
Queue (Antrian)
Tumpukan (Stack)
Struktur Tumpukan (Stack) adalah struktur data yang
meniru bagaimana proses menyimpan dan mengambil
satu benda pada suatu tumpukan benda yang ada dilantai.
Apabila diperhatikan dengan saksama maka proses
menyimpan buku (disebut push) dan proses mengambil
buku (disebut pop) dari suatu tumpukan selalu dilakukan
pada bagian atas tumpukan (top of the stack).
Sehingga terjadi urutan yang disebut LIFO (Last In First
Out), artinya benda yang terakhir disimpan pada
tumpukan adalah benda yang pertama yang bisa diambil
karena benda inilah yang berada pada urutan teratas dari
tumpukan.
9/10/2014 Algoritma Pemrograman, @SUARGA 2
9/10/2014 Algoritma Pemrograman, @SUARGA 3
Tumpukan (Stack) digunakan apabila data akan di-akses dengan
urutan LIFO. Struktur data Stack dapat di-implementasi dengan
menggunakan larik (array), dengan tipe data bentukan (record)
misalnya sebagai berikut:
 
Type Stack : record
< top: integer;
isi : array[1 .. maks] of item;
>
 
dimana: top adalah penunjuk posisi teratas dari tumpukan, bila stack
kosong top=0, bila penuh top=maks, setiap mengisi data top
bertambah 1, setiap mengambi data top berkurang 1
isi adalah array yang memuat data dalam tumpukan
item adalah tipe data yang disimpan dalam stack,
bisa int, char, dsb
9/10/2014 Algoritma Pemrograman, @SUARGA 4
9/10/2014 Algoritma Pemrograman, @SUARGA 5
• Prosedur push (input x : item; in-out S : Stack)
• { prosedur menempatkan item pada posisi top dari stack }
•  
• Definisi Variabel
• int atas;
•  
• Rincian Langkah
• If S.top = maks
• then write (“sudah penuh”);
• else
• S.top  S.top + 1;
• atas S.top;
• S.isi[atas]  x;
• endif.

9/10/2014 Algoritma Pemrograman, @SUARGA 6


9/10/2014 Algoritma Pemrograman, @SUARGA 7
• Prosedur pop (output x : item; in-out S:Stack)
• { prosedur mengambil data dari tumpukan pada posisi top dari stack }
•  
• Definisi Variabel
• int atas;
•  
• Rincian Langkah
• If S.top = 0
• then write (“tumpukan kosong”);
• else
• atas  S.top;
• x  S.isi[atas];
• S.top  S.top – 1;
• endif
•  

9/10/2014 Algoritma Pemrograman, @SUARGA 8


• Proses lain yang sering di-implementasi adalah proses
memulai (initialize) suatu tumpukan, yaitu menciptakan
stack kosong, dengan indeks top=0, sebagai berikut:
•  
• Prosedur initialize(in-out S:Stack)
• { memulai suatu stack }
• Definisi Variabel
• { tidak ada }
• Rincian Langkah
• S.top  0;

9/10/2014 Algoritma Pemrograman, @SUARGA 9


• Beberapa fungsi tambahan yang sering ditemukan pada implementasi tumpukan
adalah: fungsi untuk melihat elemen teratas, disebut fungsi “peek”.
•  
• Fungsi peek(in S:Stack)  item
• { fungsi untuk melihat elemen teratas dari suatu Stack }
•  
• Definisi Variabel
• item x;
• int atas;
•  
• Rincian Langkah
• atas  S.top;
• x  S.isi[atas];
• return x;

9/10/2014 Algoritma Pemrograman, @SUARGA 10


• Fungsi untuk memeriksa apakah suatu tumpukan kosong, disebut “isEmpty”.
•  
• Fungsi isEmpty(in S:Stack)  boolean
• { Fungsi untuk memeriksa apakah stack kosong }
•  
• Definisi Variable
• { tidak ada }
•  
• Rincian Langkah
• if (S.top = 0)
• then return true;
• else return false;
• endif;

9/10/2014 Algoritma Pemrograman, @SUARGA 11


Implementasi Struct C++
• Suatu struktur data yang memiliki elemen
berbeda dapat dibangun memakai record atau
dalam C++ disebut struct. Contoh

struct Stack {
int top;
char isi[25];
};
9/10/2014 Algoritma Pemrograman, @SUARGA 12
• Variabel dari suatu struct di-definisikan
seakan-akan struct merupakan tipe data baru,
misalnya: Stack S;
• Kemudian variabel yang ada dalam struct
dapat diakses sebagai member dari struct,
(memakai titik) misalnya:
S.top = S.top + 1;
S.isi[S.top] = x;

9/10/2014 Algoritma Pemrograman, @SUARGA 13


Implementasi C++ dari prosedur dan fungsi
Tumpukan
void inisial(Stack &S) {
S.top = -1;
}

• Inisialisasi tumpukan dilakukan dengan


memberi nilai awal S.top = -1, karena pada C+
+ indeks dimulai 0

9/10/2014 Algoritma Pemrograman, @SUARGA 14


void push(char x, Stack &S) {
int atas;

if (S.top == maks)
cout << "Stack Penuh" << endl;
else {
S.top += 1;
atas = S.top;
S.isi[atas] = x;
}
}
9/10/2014 Algoritma Pemrograman, @SUARGA 15
void pop(char &x, Stack &S) {
int atas;

if (S.top == -1)
cout << "Stack Kosong " << endl;
else {
atas = S.top;
x = S.isi[atas];
S.top = S.top - 1;
}
}
9/10/2014 Algoritma Pemrograman, @SUARGA 16
bool isEmpty(Stack S) {
if (S.top == -1)
return true;
else
return false;
}

char peeks(Stack S) {
char x;
int atas;

atas = S.top;
x = S.isi[atas];
return x;
}9/10/2014 Algoritma Pemrograman, @SUARGA 17
//myStack.cpp
#include <iostream>
#include <cstring>
using namespace std;

struct Stack {
int top;
char isi[80];
};

int maks=80;

void inisial(Stack &S);


void push(char x, Stack &S);
void pop(char &x, Stack &S);
bool isEmpty(Stack S);
char peeks(Stack S);

int main() {

char masukan[80];

9/10/2014 Algoritma Pemrograman, @SUARGA 18


Stack S;
int i;
char x;

inisial(S);
cout << "Masukkan satu kalimat : ";
cin.getline(masukan,80);

i=0;
while (masukan[i] != '\0') {
x = masukan[i];
push(x, S);
i++;
}

cout << "Isi Stack paling atas : ";


cout << peeks(S);
cout << endl;

9/10/2014 Algoritma Pemrograman, @SUARGA 19


cout << "Isi stack :\n";
while (!isEmpty(S)) {
pop(x,S);
cout << x << endl;
if (isEmpty(S))
break;
}
cout << endl;

system("PAUSE");
return 0;
}

9/10/2014 Algoritma Pemrograman, @SUARGA 20


9/10/2014 Algoritma Pemrograman, @SUARGA 21
Antrian (Queue)
Struktur Antrian adalah struktur data yang meniru
antrian orang yang sedang menunggu pelayanan
misalnya didepan seorang teller bank, atau antrian orang
yang sedang beli karcis pertunjukkan.
Apabila diperhatikan dengan saksama maka
penambahan orang pada suatu antrian selalu dilakukan
pada urutan paling belakang (rear of queue), dan
pelayanan selalu dilakukan pada urutan depan (front of
queue), sehingga urutan proses antrian sering disebut
sebagai FIFO (First In First Out), yang pertama masuk
antrian itulah yang pertama dilayani.
9/10/2014 Algoritma Pemrograman, @SUARGA 22
9/10/2014 Algoritma Pemrograman, @SUARGA 23
• Implementasi Antrian dapat dilakukan dengan membuat
tipe data buatan bernama Queue, misalnya sebagai berikut:
 
Type Queue : record
<
count, front, rear : integer;
isi : array[1..maks] of item;
>
 
• Dimana count adalah variabel untuk mencacah jumlah
elemen dalam antrian, front adalah variabel yang menunjuk
pada awal (bagian depan) antrian, rear adalah variabel yang
menunjuk pada bagian akhir antrian, dan isi adalah array
yang menyimpan isi antrian.
9/10/2014 Algoritma Pemrograman, @SUARGA 24
• Proses untuk memulai antrian (initialize):
menciptakan array untuk antrian, kemudian me-
mulai semua indeks, count=0, rear=0, front=1.
• Proses untuk menambahkan elemen (addQueue):
elemen ditambahkan dari belakang, sehingga count
bertambah 1, juga rear bertambah 1.
• proses untuk mengambil elemen (deleteQueue):
elemen diambil dari antrian selalu dari depan,
sehingga count berkurang 1, dan front bertambah 1
• proses untuk menghitung jumlah elemen (size):
berapa nilai count

9/10/2014 Algoritma Pemrograman, @SUARGA 25


front rear = front

empty, rear=0, front=1, count=0 addQueue(A), rear=1, front=1

rear front

B A

addQueue(B), rear=2, front=1, count=2

9/10/2014 Algoritma Pemrograman, @SUARGA 26


• Prosedur initializeQ(in-out Q:Queue)
• { memulai suatu antrian }
•  
• Definisi Variabel
• { tidak ada }
•  
• Rincian Langkah
• Q.count  0;
• Q.front  1;
• Q.rear  0;
• return.
9/10/2014 Algoritma Pemrograman, @SUARGA 27
• Prosedur addQueue(input x:item; in-out Q:Queue)
• { menambah elemen kedalam antrian }
•  
• Definisi Variabel
• { tidak ada }
•  
• Rincian Langkah
• if (Q.count = maks)
• then write (“tak ada tempat kosong”);
• else
• Q.count  Q.count + 1;
• Q.rear  (rear % maks) + 1;
• Q.isi[rear]  x;
• endif
• return.

9/10/2014 Algoritma Pemrograman, @SUARGA 28


• Prosedur deleteQueue(output x:item; in-out Q:Queue)
• { mengambil satu elemen dari antrian }
•  
• Definisi Variabel
• { tidak ada }
•  
• Rincian Langkah
• if (Q.count = 0)
• then write (“antrian kosong “);
• else
• Q.count  Q.count – 1;
• x  Q.isi[front];
• front  (front % maks) + 1;
• endif
• return;
•  
9/10/2014 Algoritma Pemrograman, @SUARGA 29
• Fungsi size(in-out Q:Queue)  integer
• { menghitung jumlah elemen dalam antrian }
•  
• Definisi Variabel
• int n;
•  
• Rincian Langkah
• n  Q.count;
• return n;

9/10/2014 Algoritma Pemrograman, @SUARGA 30


Implementasi C++
//myQueue.cpp
#include <iostream>
#include <cstring>
using namespace std;

int maks=80;
struct Queue {
int count;
int front, rear;
char isi[80];
};

void initialize(Queue &Q);


void addQueue(char x, Queue &Q);
void deleteQueue(char &x, Queue &Q);
bool isEmpty(Queue Q);
int sizes(Queue Q);
9/10/2014 Algoritma Pemrograman, @SUARGA 31
int main() {

char masukan[maks];
Queue Q;
int i;
char x;

initialize(Q);
cout << "Masukkan satu kalimat : ";
cin.getline(masukan,maks);

i=0;
while (masukan[i] != '\0') {
x = masukan[i];
addQueue(x, Q);
i++;
}

cout << "\nJumlah elemen dalam Antrian : ";


cout << sizes(Q);
cout << endl << endl;

9/10/2014 Algoritma Pemrograman, @SUARGA 32


cout << "Isi Queue :\n";
while (!isEmpty(Q)) {
deleteQueue(x,Q);
cout << x << endl;
if (isEmpty(Q))
break;
}
cout << endl;

system("PAUSE");
return 0;
}

void initialize(Queue &Q) {


Q.count = 0;
Q.front = 0;
Q.rear = -1;
}

9/10/2014 Algoritma Pemrograman, @SUARGA 33


void addQueue(char x, Queue &Q) { x = Q.isi[Q.front];
Q.front = (Q.front % maks) + 1;
if (Q.count == maks) }
cout << "Antrian Penuh" << endl; }
else {
Q.count += 1;
bool isEmpty(Queue Q) {
Q.rear = (Q.rear % maks) + 1;
if (Q.count == 0)
Q.isi[Q.rear] = x;
return true;
}
else
}
return false;
}
void deleteQueue(char &x, Queue &Q) {
int sizes(Queue Q) {
if (Q.count == 0)
cout << "Antrian Kosong " << endl;
return Q.count;
else {
}
Q.count = Q.count - 1;
9/10/2014 Algoritma Pemrograman, @SUARGA 34
9/10/2014 Algoritma Pemrograman, @SUARGA 35

Anda mungkin juga menyukai