Satu hal yang perlu diingat adalah bahwa didalam suatu tumpukan dapat menambah (menyisipkan) data dan mengambil (menghapus) data lewat ujung yang sama yang disebut sebagai ujung atas tumpukan.
Secara sederhana sebuah tumpuykan bisa digambarkan seperti tersaji pada gambar 6.1. Dari gambar tersebut dapat dikatakan bahwa kotak B berada di atas kotak A dan ada di bawah kotak C. Gambar ini hanya menunjukkan bahwa dalam tumpukan hanya dapat menambah atau mengambil sebuah kotak melalui satu ujung, yaitu ujung bagian atas. Dapat dikihat pula bahwa tumpukan merupakan kumpulan data yang sifatnya dinamis, artinya dapat menambah dan mengambil data dari kumpulan data tersebut.
F
|
E
|
D
|
C
|
B
|
Penyajian
stack bisa menggunakan array, namun kurang tepat. Array bisa digunakan kalau
elemen stack tidak melebihi batas maksimum. Tipe yang bisa digunakan adalah
record. Manipulasi dengan menggunakan record mempunyai dua medan, yaitu medan
penyimpanan elemen tumpukan dan medan pencatat posisi ujung atas tumpukan.
3.2.1.a Operasi stack
Dalam Stack terdapat dua operasi,
yaitu :
- Menyisipkan data (PUSH)
Menambahkan
/ menyisipkan data ke dalam stack. Kita tidak bisa menambahkan data pada
tumpukan yang sudah penuh (overflow).
Algoritma
:
if t.atas
= maxelemen
cout
<< ”sudah penuh ”;
else
{
// naikkan
posisi tumpukan
// tambah
isi tumpukan
}
2.
Menghapus data (POP)
Menghapus
elemen yang ada di posisi paling atas. Menghapus posisi juga akan menghapus
elemen. Kita tidak mungkin menghapus elemen ketika tumpukan sudah kosong.
(t.atas = 0)
Algoritma
:
if t.atas
= 0
cout
<< ”tumpukan kosong ”;
else
{
// kurangi
t.atas;
}
import java.util.Scanner;
public class begin {
public Scanner dataIn = new Scanner(System.in);
protected int[] data;
protected int top = 0;
public begin(int max) {
data = new int[max];
}
public int setData() {
int input;
System.out.print("masukkan data berupa integer=");
input = dataIn.nextInt();
return input;
}
public void push(int result) {
top++;
data[top] = result;
}
public int pop() {
int hasil;
hasil = data[top];
top--;
return hasil;
}
public int size() {
int ukuran = top;
System.out.println("ukuran STACK = " + ukuran);
return ukuran;
}
public int peek() {
int result = data[top];
System.out.println("hasil PEEK = " + result);
return result;
}
public boolean isEmpty() {
if (top == 0) {
System.out.println("KOSONG");
return true;
} else {
System.out.println("STACK BERISI");
return false;
}
}
public void printStack() {
for (int a = 1; a <= top; a++) {
System.out.println(data[a]);
}
}
public void clear() {
for (int a = 1; a <= top; a++) {
pop();
System.out.println(data[a]);
}
}
}
import java.util.Scanner;
public class arrstack {
public static void main(String[] args) {
Scanner dataIn = new Scanner(System.in);
int x;
String lagi = "";
begin stack = new begin(100);
do {
System.out.println("PROGRAM STACK");
System.out.println("1. push");
System.out.println("2. pop");
System.out.println("3. size");
System.out.println("4. peek");
System.out.println("5. isEmpty");
System.out.println("6. printStack");
System.out.println("7. clear");
System.out.print("Masukkan pilihan anda = ");
x = dataIn.nextInt();
switch (x) {
case 1:
stack.push(stack.setData());
break;
case 2:
stack.pop();
break;
case 3:
stack.size();
break;
case 4:
stack.peek();
break;
case 5:
stack.isEmpty();
break;
case 6:
stack.printStack();
break;
case 7:
stack.clear();
break;
default:
System.out.println("OUT OF RANGE");
}
System.out.print("LAGI (y / t) = ");
lagi = dataIn.nextLine();
lagi = dataIn.nextLine();
} while (!lagi.equals("t"));
}
}
output