Anda di halaman 1dari 6

PERKEMBANGAN MATERI STRUKTUR DATA

Hamdani , Syndy Ammanda , Wanda dira pawitra , Nanda amalya, Indra Gunawan,
M. Kom dhannymotovlog@gmail.com, sindyammanda12@gmail.com,
wandadira499@gmail.com, nandaamalya2323@gmail.com
Prodi Teknik Informatika (Semester 2)
Amik Dan Stikom Tunas Bangsa P.Siantar

ABSTRAK
Pada perkembangan materi ini di tugaskan untuk mengembangkan materi Struktur data yang dimana
di dalam mata pelajaran tersebut terdapat materi type data.

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta
operasi yang didefinisikan terhadapnya. Pemakaian Struktur Data yang tepat didalam proses pemrograman, akan
menghasilkan Algoritma yang lebih jelas dan tepat sehingga menjadikan program
secara keseluruhan lebih sederhana. Ty Range Uk
Kata kunci : type data pe uran
(Byte)
Int - 2
eger 32768..32767
Lo - 4
PENDAHULUAN ng 2147483648..21474

Struktur Data adalah cara penyimpanan dan 83647


pengorganisasian data data pada memori computer
maupun file secara efektif sehingga dapat di gunakan
secara efisien, termasuk operasi operasi didalamnya.
Array atau larik di definisikan sebagai pemesanan data matriks berukuran besar sesuai kapasitas
alokasimemory berurutan. Definisi ini kurang tepat memori komputer.
,kaena terjadi kerancuan antara struktur data dan
representasinya. Memang benar array hamper selalu Program yang telah dibuat dengan memanfaatkan
diimplementasikan menggunakan memory berurutan struktur data graph mampu memecahkan masalah
tapi tidak selalu demikian
jaringan (jarak terpendek dan rentang pohon
TINJAUAN PUSTAKA
minimal) dengan tepat dan memberikan
INETEGER pemecahan langkah demi langkah.

Merupakan Bilangan Bulat


STRUKTUR DATA QUEUE
dan tidak mengandung pecahan. seperti : ...-3,-2,-
Queue (antrian) adalah struktur data dimana
1,0,1,2,3,.... berarah, Gambar 2 menunjukkan jaringan
data yang pertama kali dimasukkan adalah data yang
dengan busur berarah. Angka-angka pada busur pertama kali bisa dihapus. Atau bisa juga disebut
merupakan suatu nilai yang dengan struktur data yang menggunakan mekanisme
FIFO (First In First Out). Queue dalam kehidupan
tergantung permasalahannya.
sehari-hari seperti antrian pada penjualan tiket kereta
api, dimana orang yang pertama datang adalah orang
yang pertama kali dilayani untuk membeli tiket. Jika
ada orangbaru yang datang akan membali tiket, maka nItems = 0; } //———————————————
posisinya berada pada urutan paling belakang dalam —————– public void insert(long j) // letakkan item
antrian tersebut. Orang yang berada pada posisi terakhir (data) di posisi belakang dari queue { if(rear == maxSize-
dalam antrian adalah yang terakhir kali dapat dilayani 1) // rear = -1; queArray[++rear] = j; //naikkan rear dan
dan memperoleh tiket kereta api (kalau kurang masukkan item (data) pada posisi rear yang baru
beruntung, maka akan kehabisan tiket). Contoh lain nItems++; //tambah satu item lagi } //—
adalah nasabah yang antri di teller bank, paket data yang ———————————————————–
menunggu untuk ditransmisikan lewat internet, antrian public long remove() // hapus item (data) yang berada
printer dimana terdapat antrian print job yang menunggu pada posisi front { long temp = queArray[front++];
giliran untuk menggunakan printer, dsb. Istilah-istilah //dapatkan nilainya dan naikkan front if(front ==
yang digunakan dalam queue (antrian) Memasukkan data maxSize) // front = 0; nItems–; // item (data) berkurang
(insert) disebut juga dengan put, add, atau enqueue. satu return temp; } //—————————————
Menghapus data (remove) biasa disebut dengan istilah ———————– public long peekFront() // { return
delete, get, atau dequeue. Bagian belakang queue, dimana queArray[front]; } //—————————————
data bisa dimasukkan disebut dengan back, tail (ekor), ———————– public boolean isEmpty() //benar
atau end (akhir). Sedangkan bagian depan (front) queue jika queue-nya kosong { return (nItems==0); } //——
dimana data bisa dihapus juga biasa disebut dengan ——————————————————– public
istilah kepala (head). Circular Queue Di dunia nyata boolean isFull() // benar jika queue-nya penuh { return
apabila seseorang sedang mengantri (misalnya antri tiket (nItems==maxSize); } //————————————
kereta api), apabila telah dilayani dan memperoleh tiket, ————————– public int size() // jumlah ietm
maka ia akan keluar dari antrian dan orang-orang yang (data) dalam queue { return nItems; } //——————
berada di belakangnya akan bergerak maju ke dapan. ——————————————– } // end class
Kita bisa saja menggerakkan setiap item data ke depan Queue QueueApp.java class QueueApp { public static
apabila kita menghapus data yang terdepan, tetapi hal ini void main(String[] args) { Queue theQueue = new
kurang efektif. Sebaliknya kita tetap menjaga setiap item Queue(5); // queue menampung 5 item (data)
data di posisinya, yang kita lakukan hanyalah merubah theQueue.insert(10); // masukkan 4 item (data)
posisi front dan rear saja. Yang menjadi permasalahan theQueue.insert(20); theQueue.insert(30);
adalah apabila posisi rear berada pada bagian akhir dari theQueue.insert(40); theQueue.remove(); // hapus 3
array (atau pada nomor indeks yang terbesar). Meskipun item (data) theQueue.remove(); // (10, 20, 30)
ada bagian yang kosong di awalawal array – karena theQueue.remove(); theQueue.insert(50); // masukkan
mungkin data telah dihapus, data baru tidak bisa 4 item (data) lagi theQueue.insert(60); // (wraps
dimasukkan lagi karena rear-nya sudah tidak bisa around) theQueue.insert(70); theQueue.insert(80);
bergerak lagi. Atau mungkinkah posisi rear nya bisa while( !theQueue.isEmpty() ) // hapus dan tampilkan {
berpindah? Situasi seperti itu bisa dilihat seperti gambar // all items long n = theQueue.remove(); // (
berikut: circular queueUntuk menghindari permasalahan
System.out.print(n);System.out.print(“ “); }
seperti itu (tidak bisa memasukkan data baru) – meskipun System.out.println(“”); } // end main() } // end class
queue-nya belum penuh, maka front dan rear-nya QueueApp.
berputar (kembali) ke bagian awal array. Kejadian seperti
ini dinamakan dengan circular queue (atau kadang- Struktur Data Stack
kadang disebut juga dengan istilah ring buffer). Kejadian
seperti ini seperti terlihat pada gambar berikut: Berikut Secara bahasa, Stack berarti tumpukan. Jika dikaitkan
Contoh Implementasi Antrian dalam Java : Queue.java dengan struktur data, Stack berarti sekumpulan data
class Queue { private int maxSize; private long[] yang organisasi atau strukturnya bersifat tumpukan
queArray; private int front; private int rear; private int atau menyerupai tumpukan. Secara ilustrasi, stack
nItems; //— dapat digambarkan dengan gambar di samping. “Top “
merupakan pintu untuk keluar masuknya elemen –
———————————————————– elemen stack. A, B, dan C merupakan suatukoleksi.
public Queue(int s) // konstruktor { maxSize = s; Dari ilustrasi dapat digambarkan bahwa C merupakan
queArray = new long[maxSize]; front = 0; rear = -1; elemen yang terakhir memasuki stack namunpertama
keluar dari stack. Begitu sebaliknya dengan A. A
merupakan elemen pertama yang memasukitumpukan memungkinkan pendefinisian keterhubungan hirarkis,
namun terakhir saat keluar dari tumpukan. Di dalam maka struktur graph memungkinkan pendefinisian
gambar juga terlihat urutan masuk dan keluar yang keterhubungan tak terbatas antara entitas data. Banyak
berkebalikan. Elemen yang masuk pertama akankeluar entitas-entitas data dalam masalah-masalah nyata secara
erakhir dan sebaliknya. Prinsip ini telah dikenal dalam alamiah memiliki keterhubungan langsung (adjacency)
struktur data dengan nama prinsip LIFO (Last In First secara tak terbatas demikian. Contoh: informasi topologi
Out). Di dalam pengembangannya, stack dapat dan jarak antar kota-kota di pulau Jawa. Dalam masalah
dikelompokkan menjadi dua bagian. Dua bagian ini kota x bisa berhubungan langsung dengan hanya satu
tersebut yaitudan Double Stack. Single Stack Single atau limaentitas-entitas data dalam masalah-masalah
Stack Single Stack atau Stack Tunggal adalah stack nyata secara alamiah memiliki keterhubungan langsung
yang hanya terdiri dari satu koleksi. Bila stack (adjacency) secara tak terbatas demikian. Contoh:
inidirepresentasikan dengan array, maka pengisian dan informasi topologi dan jarak antar kota-kota di pulau
penghapusan harus dilakukan bertahap dari indeksnya. Jawa. Dalam masalah ini kota x bisa berhubungan
TOPDi dalam proses single stack terdapat tiga macam langsung dengan hanya satu atau lima kota lainnya.
proses utama, yaitu : - Inisialisasi - PUSH (Insert, Untuk memeriksa keterhubungan dan jarak tidak
Masuk, Simpan, Tulis) - POP (Delete, Keluar, Ambil, langsung antara dua kota
Baca, Hapus) INISIALISASI Proses inisialisasi dapat diperoleh berdasarkan data
merupakan proses awal yang dilakukan untuk keterhubunganketerhubungan langsung dari kota-kota
menyimpan indeks penunjuk stack. lainnya yang memperantarainya. Representasi data
dengan struktur data linear ataupun hirarkis pada masalah
PUSH PROSES ini masih bisa digunakan namun akan membutuhkan
pencarianpencarian yang kurang efisien. Struktur data
push adalah proses memasukkan data baru ke stack graph secara eksplisit menyatakan keterhubungan ini
indeks selanjutnya. Algoritma dasar proses PUSH sehingga pencariannya langsung (straightforward)
adalah : top = top + 1; array[top] = variable_tampung; dilakukan pada strukturnya sendiri. Masalah-masalah
POP Proses pop adalah proses mengeluarkan / Graph Masalah path minimum (Shortest path problem):
mengambil data dari stack dengan indeks yang mencari route dengan jarak terpendek dalam suatu
disimpan padaAlgoritma dasar proses POP adalah : jaringan transportasi. Masalah aliran maksimum
variable top. variable_tampung = array[top]; top = top
(maximum flow problem): menghitung volume aliran
– 1; Double Stack Double Stack atau Stack Ganda adalah
BBM dari suatu reservoir ke suatu titik tujuan melalui
stack yang hanya terdiri dari dua single stack. Bila stack
jaringan pipa.
inidirepresentasikan dengan array, maka pengisian dan
penghapusan harus melalui salah satu arah. Di dalam Pengertian Struktur Data Linked List
proses double stack terdapat lima macam proses utama,
yaitu : - Inisialisasi - PUSH1 (Proses Push untuk Single Linked list (list bertaut) adalah salah satu struktur data
Stack pertama) - POP1 (Proses Pop untuk Single Stack dasar yang sangat fundamental dalam bidang ilmu
pertama) - PUSH2 (Proses Push untuk Single Stack komputer. Dengan menggunakan linked list maka
kedua) - POP2 (Proses Pop untuk Single Stack kedua) programmer dapat menimpan datanya kapanpun
Algoritma dasar masing dibutuhkan. Linked list mirip dangan array, kecuali pada
– masing proses adalah sebagai berikut : linked list data yang ingin disimpan dapat dialokasikan
INISIALISASI top1 = -1; top2 = MAX_ARRAY; secara dinamis pada saat pengoperasian program (run-
PUSH1 top1 = top1 + 1; array[top1] = time). Pada array, apabila programmer ingin menyimpan
variable_tampung; POP1 variable_tampung = data, programmer diharuskan untuk mendefinisikan besar
array[top1]; top1 = top1 – 1; PUSH2 top2 = top2 – 1; array terlebih dahulu, seringkali programmer
array[top2] = variable_tampung; POP2 mengalokasikan array yang sangat besar(misal 100). Hal
variable_tampung = array[top2]; top2 = top2 + 1; ini tidak efektif karena seringkali yang dipakai tidak
STRUKTUR DATA GRAPH Graph merupakan sebesar itu. Dan apabila programmer ingin menyimpan
struktur data yang paling umum. Jika struktur linear data lebih dari seratus data, maka hal itu tidak dapat
memungkinkan pendefinisian keterhubungan dimungkinkan karena sifat array yang besarnya statik.
sikuensial antara entitas data, struktur data tree Linked list adalah salah satu struktur
data yang mampu menutupi kelemahan tersebut. Secara Head
umum linked list tersusun atas sejumlah bagian-bagian
data yang lebih kecil yang terhubung (biasanya melalui adalah tanda untuk kepala antrian (elemen pertama
pointer). Linked list dapat divisualisasikan seperti kereta, dalam antrian) yang tidak akan berubah-ubah .
bagian kepala linked list adalah mesin kereta, data yang Pergerakan pada Antrian terjadi dengan penambahan
disimpan adalah gerbong, dan pengait antar gerbong elemen Antrian kebelakang, yaitu menggunakan nilai
adalah pointer. ------- -------- -------- Mesin Tail Fungsi
Data Data -------- -------- ------- (kepala) ---> Pointer --
IsFull
-> Pointer -- -------- -------- -------- Programmer
membaca data menyerupai kondektur yang ingin Untuk mengecek apakah Antrian sudah penuh atau
memeriksa karcis penumpang. Programmer menyusuri belum Dengan cara : - Mengecek nilai Tail - Jika tail =
linked list melalui kepalanya, dan kemudian berlanjut MAX-1 berarti antrian sudah penuh (MAX-1 adalah
ke gerbong (data) berikutnya, dan seterusnya sampai batas elemen array dalam program C++).
gerbong terakhir (biasanya ditandai dengan pointer
menunjukkan alamat kosong (NULL)). Penyusuran Fungsi Enqueue •
data dilakukan secara satu persatu sehingga
penyusuran data bekerja dengan keefektifan On. Untuk menambahkan elemen ke dalam Antrian,
Dibandingkan array, ini merupakan kelemahan penambahan elemen selalu dilakukan pada elemen
terbesar linked list. Pada array, apabilan programmer paling belakang • Penambahan elemen selalu
ingin mengakses data ke-n (index n), maka menggerakan variable Tail dengan cara menambahkan
programmer dapat langsung mengaksesnya. Tail terlebih dahulu.
Sedangkan dengan linked list programmer harus
menyusuri data sebanyak n terlebih dahulu.
Fungsi Dequeue
STRUTUR DATA SORT
Digunakan untuk menghapus elemen terdepan (head)
Sort adalah proses pengurutan data yang sebelumnya dari Antrian Dengan cara : menggeser semua elemen
disusun secara acak sehingga menjadi tersusun secara antrian kedepan dan mengurangi Tail dgn 1.
teratur menurut suatu aturan tertentu. Pada umumnya Penggeseran dilakukan dengan menggunakan looping.
terdapat 2 jenis pengurutan : v Ascending (Naik) v
Descending (Turun) Contoh : Data Acak : 5 6 8 1 3 25 Fungsi Clear
10 Terurut Ascending : 1 3 5 6 8 10 25 Terurut
Descending : 25 10 8 6 5 3 1 Untuk melakukan proses Untuk menghapus elemen-elemen Antrian dengan cara
pengurutan tersebut dapat digunakan berbagai macam membuat Tail dan Head = -1 Penghapusan
cara / metoda. Beberapa metoda diantaranya : a) Buble elemenelemen Antrian sebenarnya tidak menghapus
/ Exchange Sort b) Selection Sort c) Insertion Sort d) arraynya, namun hanya mengeset indeks pengaksesan-
Quick Sort Bubble / Exchange Sort. nya ke nilai -1 sehingga elemen-elemen Antrian tidak
lagi terbaca sehingga mengembalikan antrian seperti
Fungsi Create keadaan semula.

Digunakan untuk membentuk dan menunjukan awal


terbentuknya suatu Antrean / Queue.
SINGLE LINKED LIST (Non Circular)
Fungsi IsEmpty • KONSEP POINTER DAN LINKED LIST

Untuk memeriksa apakah Antrian penuh atau kosong Untuk mengolah data yang banyaknya tidak bisa
• Dengan cara memeriksa nilai Tail, jika Tail = -1 ditentukan sebelumnya, maka disediakan satu fasilitas
maka antrian kosong (empty) yang memungkinan untuk menggunakan suatu
perubah yang disebut dengan perubah dinamis
(Dinamic variable)
Perubah Dinamis (Dinamic variable) yang dihapus yang akan menjadi node terakhir. •
Pointer bantu digunakan untuk menunjuk ke nilai
Suatu perubah yang akan dialokasikan hanya pada NULL. Pointer bantu selalu bergerak sampai
saat diperlukan, yaitu setelah program dieksekusi. sebelum node yang akan dihapus, kemudian pointer
hapus diletakkan setelah pointer bantu. Selanjutnya
pointer hapus akan dihapus, pointer bantu akan
menunjuk ke NULL.
Perbedaan Perubah Statis & Dinamis

Pada perubah statis, isi Memory pada lokasi tertentu


(nilai perubah) adalah data sesungguhnya yang akan Menampilkan / Membaca Isi Linked List •
diolah. Pada perubah dinamis, nilai perubah adalah
alamat lokasi lain yang menyimpan data Linked list ditelusuri satu-persatu dari awal sampai
sesungguhnya. Dengan demikian data yang akhir node. Penelusuran dilakukan dengan menggunakan
sesungguhnya dapat dimasukkan secara langsung. pointer bantu, karena pointer head yang menjadi tanda
awal list tidak boleh berubah/berganti posisi. •
DEKLARASI POINTER
Penelusuran dilakukan terus sampai ditemukan node
Pointer digunakan sebagai penunjuk ke suatu alamat terakhir yang menunjuk ke nilai NULL. Jika tidak
memori Dalam pemrograman C++, Type Data Pointer NULL, maka node bantu akan berpindah ke node
dideklarasikan dengan bentuk umum : Type Data * selanjutnya dan membaca isi datanya dengan
Nama Variabel; Type Data dapat berupa sembarang menggunakan field next sehingga dapat saling berkait.
type data, misalnya char, int atau float. Sedangkan • Jika head masih NULL berarti data masih kosong!
Nama veriabel merupakan nama variabel pointer.
Menghapus Node di Depan (Dengan Head dan
Contoh penggunaan pointer dalam program C++: Tail)
Void
Penghapusan node tidak boleh dilakukan jika keadaan
main()
node sedang ditunjuk oleh pointer, maka harus
{ int x,y,*z; x = 75; //nilai x = 75 y = x; //nilai y dilakukan penunjukkan terlebih dahulu dengan pointer
diambil dari nilai x z = &x; //nilai z menunjuk
hapus pada head, kemudian dilakukan pergeseran head
kealamat pointer dari nilai x getch(); }
ke node berikutnya sehingga data setelah head
menjadi head baru, kemudian menghapus pointer
Menghapus Node di Depan •
hapus dengan menggunakan perintah delete. Jika tail
Penghapusan node tidak boleh dilakukan jika masih NULL maka berarti list masih kosong!
keadaan node sedang ditunjuk oleh pointer, maka
harus dilakukan penggunakan suatu pointer lain KESIMPULAN
(hapus) yang digunakan untuk menunjuk node yang
akan dihapus, barulah kemudian menghapus pointer • Struktur data yang telah dirancang dan
hapus dengan menggunakan perintah delete. • diimplementasikan mampu untuk
Sebelum data terdepan dihapus, terlebih dahulu head menyimpan data matriks berukuran besar
harus menunjuk ke node berikutnya agar list tidak sesuai kapasitas memori komputer.
putus, sehingga node setelah head lama akan menjadi • Program yang telah dibuat dengan−
head baru • Jika head masih NULL maka berarti data memanfaatkan struktur data Queue dimana
masih kosong! data yang pertama kali dimasukkan adalah
data yang pertama kali bisa dihapus. Atau
Menghapus Node di Belakang •
bisa juga disebut dengan struktur data yang
menggunakan mekanisme FIFO (First In First
Membutuhkan pointer bantu dan hapus. Pointer hapus
digunakan untuk menunjuk node yang akan dihapus, Out). dan Linked list mampu
pointer bantu untuk menunjuk node sebelum node memecahkan masalah Untuk mengolah
data yang banyaknya tidak bisa ditentukan .
• SARAN
Perlu dikembangkan kembali struktur data
yang mampu memanfaatkan penyimpan
eksternal (disk) sebagai tempat
pemrosesan sementara (temporer)
untuk memecahkan suatu masalah
pada program tersebut.

DAFTAR PUSTAKA
Dimyati, Tjutju Tarliah. (1992). Operations Research,
Model-model Pengambilan Keputusan.

Santoso, Insap. (1992). Struktur Data Andi Offset, Yogyakarta.


Schneider, G Michael. (1982). An Introduction to
Programming and Problem Solving with PASCAL.
Second Edition. John Wiley & Sons, Inc. Taha, Hamdy A. (1982).
Operations Research, An Introduction. Macmillan Publishing Co.,
Inc. New York.

Wirth, Niklaus. (1976). Algorithms + Data Structures


= Programs. Prentice Hall In

Anda mungkin juga menyukai