MODUL PRAKTIKUM STRUKTUR DATA
BAHASA PEMROGRAMAN C++
NAMA : RIFKI IZDIHAR OKTAVIAN A. P.
NIM
: J1F114060
UNIVERSITAS LAMBUNG MANGKURAT
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
PROGRAM STUDI S1 ILMU KOMPUTER
BANJARBARU
BAHASAN :
PRAKTIKUM I
: TIPE DATA, PROCEDURE DAN FUNCTION
PRAKTIKUM II
: ARRAY DAN STRUCT
PRAKTIKUM III
: SORTING
PRAKTIKUM IV
: POINTER
PRAKTIKUM V
: LINKED LIST
PRAKTIKUM I
TIPE DATA, PROCEDURE DAN FUNCTION
TUJUAN
a.
Praktikan dapat mengenal dan tahu pengertian tipe data yang ada pada C++.
b.
Praktikan dapat membuat program dengan menggunakan tipe data yang berbeda-beda.
c.
Mengenal procedure dan function pada bahasa pemrograman C++
d.
Memahami procedure dan function pada bahasa pemrograman C++
e.
Dapat menggunakan procedure dan function pada bahasa pemrograman C++
DEKLARASI
a.
Tipe Data
jenis_tipe_data nama_variabel : value;
b.
Procedure
Procedure nama (formal parameter : jenis);
c.
Fnnction
Function nama : jenis hasil;
Atau Function nama (formal parameter : jenis ) : jenis_hasil;
DASAR TEORI
Struktur data adalah cara menyimpan atau merepresentasikan data didalam komputer agar
bisa dipakai secara efisien. Sedangkan data adalah representasi dari fakta dunia nyata. Fakta atau
keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk
tulisan, suara, gambar, sinyal atau symbol.
Procedure yaitu sub program yang digunakan untuk melakukan proses tertentu dan tidak
mengembalikan nilai, bisa disimpan dalam database sebagai object skema, sehingga suatu
procedure bisa digunakan berulangkali tanpa harus melakukan parsing dan compile ulang.
procedure, function merupakan modul program yang menghasilkan suatu kuantitas. Hal ini
dapat dilihat dari bentuk header-nya yang menyebutkan jenis data dari kuantitas yang dihasilkan.
Perbedaan fungsi dengan prosedur adalah jika pada fungsi, nilai yang dikirimkan balik
terdapat pada nama fungsinya (kalau pada prosedur pada parameter yang dikirimkan secara acuan).
Karena nilai balik berada di nama fungsi tersebut, maka fungsi tersebut dapat langsung digunakan
untuk dicetak hasilnya atau nilai fungsi tersebut dapat juga langsung dipindahkan ke pengenal
variable yang lainnya. Pada prosedur, nama prosedur tidak dapat digunakan lagsung, yang dapat
langsung digunakan adalah parameternya yang mengandung nilai balik.
IMPLEMENTASI
//procedure
#include<iostream> #include<conio.h>
using namespace std; void bea_cukai() {
double harga, nilai_impor; //tipe data double cout<<"PROGRAM SEDERHANA BEA CUKAI"<<endl; cout<<"==========================="<<endl; cout<<"Input Harga Barang : ";cin>>harga; cout<<"Input Nilai Impor : ";cin>>nilai_impor; cout<<"Total Dibayar : "
<<harga+nilai_impor+(0.1*harga)+(0.75*harga)<<endl; //ppn=10%, bea=7.5%
}
//utama int main() {
//functions
#include <iostream> #include <conio.h>
using namespace std;
int ppn (int a) {
return ((0.1*a)+a); //ppn=10%
}
//utama main() {
int harga; //tipe data integer
cout<<"PROGRAM SEDERHANA PPN"<<endl; cout<<"==========================="<<endl; cout<<"Harga = ";cin>>harga;
cout<<"Total Dibayar = "<<ppn(harga); getch();
}
PRAKTIKUM II
ARRAY DAN STRUCT
TUJUAN
a.
Mengetahui pengertian array dan record.
b.
Mengetahui penggunaan array dan record.
c.
Mengetahui macam-macam array pada c++.
DEKLARASI
a.
Array
Nama_variabel_array [jumlah_elemen_array];
b.
Struct/Record
Struct nama TipeStruct
{
Tipefield1 namafield1;
Tipefield2 namafield2;
. . .
Tipefieldn namafieldn;
} namaVar;
DASAR TEORI
Array atau biasa disebut dengan larik merupakan sekumpulan atau sekelompok data yang
memiliki nama, jenis, dan tipe yang sama. Setiap data dalam suatu kelompok memiliki susunan
tertentu yang didalam Array dikenal dengan Indeks. Indeks adalah urutan data yang ada dalam
suatu array, Indeks dalam array biasanya dimulai dari indeks 0 sampai indeks ke-n. Array secara
umum dibagi menjadi 2 yaitu Array Satu Dimensi dan Array Multi Dimensi.
Macam-Macam Array
1.
Array Satu Dimensi
Array satu dimensi adalah komponen elemen-elemen yang identik, yang bersusun satu
baris. Elemen tersebut memiliki tipe data yang sama, tetapi isi dari elemen tersebut bias berbeda
(Sama, 2013). Setiap elemen array dapat diakses melalui index. Index array secara default
dimulai dari 0. Adapun deklarasi array satu dimensi sebagai berikut.
Tipe_array nama_array[ukuran]
2.
Array Dua Dimensi
Array dua dimensi merupakan array yang terdiri dari m buah baris dan n buah kolom
bentuknya dapat berupa matriks atau tabel. Adapun deklarasi array dua dimensi sebagai berikut.
Tipe_array nama_array[baris][kolom]
3.
Array Multidimensi
Array multidimensi merupakan array yang mempunyai ukuran lebih dari dua. Bentuk
pendeklarasian array multidimensi sama saja dengan seklarasi array dimensi satu maupun
dimensi dua. Adapun deklarasi array multidimensi sebagai berikut.
Tipe_array nama_array[ukuran1][ukuran2] . . . [ukuranN]
IMPELEMTASI
a.
Array
#include <iostream> #include <conio.h> using namespace std;
main() {
int data[10]; int elemen;
for(elemen=0; elemen<=5; elemen++) {
}
for(elemen=0; elemen<=5; elemen++) {
cout<<"\nData ke-"<<elemen<<":"<<data[elemen]; //memanggil atau menampilkan data yang disimpan }
}
b.
Struct
#include <iostream> #include <conio.h> #include <iomanip>
using namespace std;
struct mhs {
char nama[20]; char nim[10]; };
struct mhs data[10];
main() {
int n,cari; cout<<endl;
cout<<"======================================\n"; cout<<" PROGRAM STRUCT OF ARRAY\n";
cout<<"======================================\n"; cout<<" Masukkan jumlah data : ";
cin>>n;
for (int i=0;i<n;i++) {
cout<<endl<<" Data ke-"<<(i+1)<<endl; cout<<" Nama : "; cin>>(data[i].nama); cout<<" NIM : "; cin>>data[i].nim;
cout<<"---\n"; }
cout<<endl;
cout<<" Masukkan data yang ingin ditampilkan : "; cin>>cari;
cout<<" NIM : "<<data[cari-1].nim<<endl; getch();
PRAKTIKUM III
SORTING
TUJUAN
a.
Mengetahui pengertian sorting.
b.
Mengetahui macam-macam sorting
c.
Mengimplementasikan Sorting pada program.
DEKLARASI
Void Tukar (int a, int b) {
int temp temp = a; a = b; b = temp; }
DASAR TEORI
Dalam arti bahasa sorting adalah penyortiran atau memilih-milih. Pada struktur data
Sorting adalah sebuah metode untuk pengurutan data, misalnya dari data yang terbesar ke data
yang terkecil. Dengan cara program yang dibuat harus dapat membandingkan antar data yang di
inputkan. Artinya jika ada deretan data, maka data yang pertama akan membandingkan dengan
data yang kedua. Jika data yang pertama lebih besar dari pada data yang kedua maka data yang
pertama akan bertukar posisi dengan data yang kedua, begitu seterusnya sampai benar-benar data
terurut dari yang terbesar hingga yang terkecil.
Macam-Macam
Sorting
1.
Bubble Sort
Bubble Sort atau metode gelembung adalah metode pengurutan dengan cara
melakukan penukaran data dengan tempat disebelahnya jika data sebelum lebih besar
dari pada data sesudahnya secara terus menerus sampai bisa dipastikan dalam satu
masing-masing kunci atau data akan dengan lambat menggelembung atau
membandingan data ke posisinya yang tepat.
2.
Insertion Sort
Insertion Sort adalah Metode Literasi (pengulangan) yang menginsert atau
menyisipkan setiap elemen ketempat yang sesuai(setelah dibandingkan dengan
elemen kiri dan kanannya) atau kita bisa mengumpamakan metode ini seperti
bermain kartu, yaitu satu demi satu akan menginsert ketempat yang sesuai.
3.
Selection Sort
Selection Sort adalah metode yang digunakan dengan cara memilih data yang
akan diurutkan menjadi dua bagian, yang belum diurutkan, dan meja yang telah
diurutkan. Elemen pertama yang diambil dari bagian array yang belum diurutkan dan
kemudian diletakan pada posisinya sesuai dengan bagian lain array yang telah di
urutkan. Tahapan ini dilakukan secara berulang-ulang hingga tidak ada lagi elemen
yang tersisa pada bagian array yang belum diurutkan.
d.
Quick Sort
Quick Sort adalah Metode yang dimulai dengan menscan daftar yang disortir
untuk nilai median. Nilai ini yang disebut tumpuan atau (pivot), kemudian dipindahkan
ke satu sisi pada daftar dan butir-butir yang nilainya lebih besar dari tumpuan di
pindahkan ke sisi lain.
5.
Merge Sort
Merge Sort adalah metode yang digunakan untuk menyusun daftar dengan cara
membagi daftar menjadi dua bagian yang lebih kecil. Kemudian kedua daftar yang
baru tersebut disusun secara terpisah dan diurutkan masing-masing. Kemudian hasil
sortir dari setiap bagian tersebut digabungkan dan diurutkan lagi hingga menghasilkan
urutan yang sudah tersortir. Intinya menggabungkan dua array yang sudah tersortir
yaitu array A dan array B kemudian membuat array ketiga yaitu array C yang berguna
IMPLEMENTASI
#include <iostream> #include <conio.h> #include <iomanip> #include<stdlib.h> #include <windows.h> using namespace std;
//agar gotoxy bisa digunakan di dev C++
/*====================================================================== ====*/
void gotoxy(int x, int y) {
COORD coord; coord.X = x; coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); }
/*====================================================================== ====*/
struct mhs {
char nama[20], nim[15]; int umur;
};
mhs data[20];
int n;
void input() {
system ("cls");
cout<<" Masukkan Jumlah Mahasiswa : ";cin>>n; cout<<endl;
for (int i=0; i<n; i++) {
system ("cls");
cout<<" Data ["<<(i+1)<<"]"<<endl;
cout<<" Nama : ";cin>>data[i].nama; cout<<" NIM : ";cin>>data[i].nim; cout<<" Umur : ";cin>>data[i].umur; }
void urut() {
mhs temp; int max;
for(int i=0; i<n; i++) {
for(int j=0; j<n-1; j++) {
if(data[j].umur<data[j+1].umur) {
temp=data[j]; data[j]=data[j+1]; data[j+1]=temp; }
} }
system ("cls");
cout<<"|===================================================|"<<endl; cout<<"| DATA MAHASISWA |"<<endl; cout<<"|===================================================|"<<endl; cout<<"| No | Nama | NIM | Umur |"<<endl; cout<<"|===================================================|"<<endl; for (int i=0; i<n; i++)
{
gotoxy(1,6+i);cout<<"| | | | |"<<endl;
gotoxy(3,6+i);cout<<(i+1);
gotoxy(8,6+i);cout<<data[i].nama; gotoxy(27,6+i);cout<<data[i].nim; gotoxy(44,6+i);cout<<data[i].umur;
}
cout<<endl;
cout<<"|===================================================|"<<endl; getch();
}; main() {
char pil; do
{
system ("cls");
cout<<"| DATA MAHASISWA |"<<endl; cout<<"|====================================|"<<endl; cout<<"| 1. Masukkan Data Mahasiswa |"<<endl; cout<<"| 2. Urutkan Data Mahasiswa |"<<endl; cout<<"| 3. Keluar |"<<endl; cout<<"|====================================|"<<endl; cout<<" Pilihan : ";cin>>pil;
if (pil == '1') {
input(); }
else if (pil == '2') {
urut(); }
else if (pil == '3') {
} else {
cout<<"Salah input"<<endl; getch();
}
PRAKTIKUM IV
POINTER
TUJUAN
a.
Mengenal pointer dan penggunaanya pada pemrograman bahasa C++.
b.
Mengetahui operator dalam pointer pada bahasa C++.
DEKLARASI
tipe_data1 nama_variabel_biasa; tipe_data2 *nama_variabel_pointer;
nama_variabel_pointer=&nama_variabel_biasa;
DASAR TEORI
Pointer merupakan sebuah variabel yang berisi alamat dari variabel lain. Suatu pointer
dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu variabel dapat
diketahui dengan mudah. Arti pointer dalam bahasa sehari-hari adalah petunjuk atau bisa di bilang
penentu atau pointer secara sederhana bisa diartikan sebagai tipe data yang nilainya mengarah pada
nilai yang terdapat pada sebuah area memori (alamat memori).
Terdapat dua macam operator pointer yang disediakan oleh C++, yaitu :
a.
Operator Dereference (&)
Operator ini biasa disebut dengan
“address of”
atau operator alamat. Dengan
menggunakan operator dereference ini, suatu variable akan menghasilkan/menampilkan
alamat lokasi memori.
b.
Operator Reference (*)
Operator Reference atau biasa disebut dengan
“value pointed by”.
Bedanya dengan
Operator Dereference, operator ini akan menampilkan nilai yang terdapat dalam suatu
alamat memori, bukan menampilkan alamat memorinya.
Terdapat beberapa operasi pada penggunaan pointer. Operasi-operasi tersebut antara lain
adalah sebagai berikut:
Suatu variable pointer seperti halnya variable yang lain, juga bisa mengalami operasi
penugasan. Nilai dari suatu variable pointer dapat disalin ke variable pointer yang lain.
2.
Operasi Aritmatika
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer
saja. Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan. Operasi
penambahan dengan suatu nilai menunjukkan lokasi data berikutnya (index selanjutnya)
dalam memori. Begitu juga operasi pengurangan.
3.
Operasi Logika
Suatu pointer juga dapat dikenai operasi logika. Sama seperti operasi logika pada
variable pada umumnya. Dalam hal ini, operasi logika yang dilakukan juga dapat
menggunakan statement
if
ataupun statemen
switch
seperti yang biasa dilakukan.
(Solichin, 2003).
IMPLEMENTASI
#include <iostream> #include <conio.h> #include <iomanip> #include<stdlib.h> using namespace std;
int n;
int arr[10]; int i;
int size; void input() {
system ("cls");
cout<<" Masukkan Jumlah Data : ";cin>>size; cout<<endl;
cout << "\nInput angka\n"; for(i=0;i<size;i++) cin >> arr[i];
};
void bubble(int *ptr,int s)
{
for(i=1;i<s;i++) { for(j=0;j<s-i;j++) { if(*(ptr+j)>*(ptr+j+1)) { temp=*(ptr+j); *(ptr+j)=*(ptr+j+1); *(ptr+j+1)=temp; } } } } void urut() { system ("cls");
cout << "\nSebelum sorting\n"; for(i=0;i<size;i++) cout << arr[i] << " ";
bubble(arr,size); cout << "\nSetelah sorting\n";
for(i=0;i<size;i++) cout << arr[i] << " "; getch(); }; main() { char pil; do { system ("cls"); cout<<"===================================="<<endl; cout<<" DATA MAHASISWA "<<endl; cout<<"===================================="<<endl; cout<<" 1. Masukkan Data "<<endl; cout<<" 2. Urutkan Data "<<endl; cout<<" 3. Keluar "<<endl; cout<<"===================================="<<endl; cout<<" Pilihan : ";cin>>pil;
if (pil == '1') {
input(); }
{
urut(); }
else if (pil == '3') {
} else {
cout<<"Salah input"<<endl; getch();
}
PRAKTIKUM V
LINKED LIST
TUJUAN
a.
Mengetahui pengertian dari linked list pada bahasa pemrograman C++
b.
Mengetahui kegunaan linked list pada pemrograman C++
c.
Dapat mengaplikasikan linked list pada pemrograman C++
DEKLARASI
struct tnode
*head=NULL;
*curr=NULL;
*node=NULL;
DASAR TEORI
Linked list adalah sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu,
yang setiap elemennya terdiri dari dua bagian. Linked list juga merupakan suatu cara untuk
menyimpan data dengan struktur sehingga dapat secara otomatis menciptakan suatu tempat baru
untuk menyimpan data yangdiperlukan. Struktur ini lebih dinamis karena banyaknya elemen
dengan mudah ditambah atau dikurangi, berbeda dengan array yang ukurannya tetap. berikut
gambaran kecil mengenai linked list.
Dengan kata lain, linked list ialah satu bentuk struktur data yang berisi kumpulan data yang
tersusun secara sekuensial, saling bersambungan, dinamis dan terbatas. Suatu senarai berkait
(linked list ) adalah suatu simpul (node) yang dikaitkan dengan simpul yang lain dalam suatu
urutan tertentu. Suatu simpul dapat berbentuk suatu struktur atau class. Simpul harus mempunyai
satu atau lebih elemen struktur atau class yang berisi data. Secara teori, linked list adalah sejumlah
node yang dihubungkan secara linier dengan bantuan pointer. Dikatakan single (singly) linked
apabila hanya ada satu pointer yangmenghubungkan setiap node. Single artinya field pointer nya
hanya satu buah saja dan satu arah.
hal yang jelas, variabel next ini akan menghubungkan kita dengan node di sebelah kita, yang
juga bertipe struct node. Hal inilah yang menyebabkan next harus bertipe struct node.
Single Linked List Circular adalah Single Linked List yang pointer nextnya menunjuk pada
dirinya sendiri. Jika Single Linked List tersebut terdiri dari beberapa node, maka pointer next
pada node terakhir akan menunjuk ke node terdepannya. Sedangkan Single Linked List Non
Circular artinya field pointer-nya hanya satu buah saja dan satu arah dan saling terhubung satu
sama lain, untuk setiap node pada linked list mempunyai field yang berisi pointer ke node
berikutnya, dan juga memiliki field yang berisi data. Pada akhir linked list, node terakhir akan
menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi
linked list.
IMPLEMENTASI
#include <iostream.h> #include <conio.h> #include <stdlib.h>
typedef struct node *simpul; struct node
{
char isi; simpul next; };
void sisip_depan(simpul &L, char elemen); void sisip_belakang(simpul &L, char elemen);
void sisip_tengah1(simpul &L, char elemen1, char elemen2); void sisip_tengah2(simpul &L, char elemen1, char elemen2); void hapus_depan(simpul &L);
void hapus_belakang(simpul &L);
void hapus_tengah(simpul &L, char elemen); void cetak(simpul L);
main() {
char huruf, huruf2;
simpul L = NULL; //memastikan bahwa L kosong
cout << "==operasi pada single linked list=="<<endl<<endl; //sisip depan
cout << "penyisipan simpul di depan " << endl << endl; cout << "masukkan huruf : "; cin >> huruf;
sisip_depan(L,huruf);
cout << "masukkan huruf : "; cin >> huruf; sisip_depan(L,huruf);
cout << "masukkan huruf : "; cin >> huruf; sisip_depan(L,huruf);
cetak(L);
//sisip belakang
cout << "\n\nPenyisipan simpul di belakang "<<endl<<endl; cout << "masukkan huruf : "; cin >> huruf;
sisip_belakang(L,huruf);
cout << "masukkan huruf : "; cin >> huruf; sisip_belakang(L,huruf);
cout << "masukkan huruf : "; cin >> huruf; sisip_belakang(L,huruf);
cout << "masukkan huruf : "; cin >> huruf; sisip_belakang(L,huruf);
cetak(L);
//sisip simpul setelah simpul tertentu
cout << endl<<endl<< "masukkan huruf : "; cin >> huruf; cout << "disisip setelah huruf : "; cin >> huruf2; cout << huruf << "disisip setelah " << huruf2 << endl; sisip_tengah1(L, huruf, huruf2);
cetak(L);
//sisip simpul sebelum simpul tertentu
cout << endl<< endl<< "masukkan huruf : "; cin >> huruf; cout << huruf << " disisip sebelum "<<huruf2 <<endl; sisip_tengah2(L,huruf, huruf2);
cetak(L);
//hapus simpul depan
cout << endl<<endl<<"setelah hapus simpul depan "<<endl; hapus_depan(L);
cetak(L);
//hapus simpul belakang
cout << endl<<endl<<"setelah hapus simpul belakang "<<endl; hapus_belakang(L);
cetak(L);
//hapus simpul tengah
cout << "\n\n Masukkan huruf tengah yang akan dihapus : "; cin >> huruf;
hapus_tengah(L,huruf); cetak(L);
//fungsi sisip simpul di depan
void sisip_depan(simpul &L, char elemen) {
simpul baru; // = new simpul;
baru = (simpul) malloc(sizeof(simpul)); baru ->isi = elemen;
baru ->next = NULL; if (L==NULL)
L=baru; else
{
baru -> next = L; L=baru;
} }
//fungsi sisip simpul setelah simpul tertentu 1
void sisip_tengah1(simpul &L, char elemen1, char elemen2) {
simpul bantu, baru;
baru = (simpul) malloc(sizeof(simpul)); baru->isi = elemen1;
baru -> next = NULL; if(L == NULL)
cout << "list kosong ...: "<< endl; else
{
bantu = L;
while (bantu->isi != elemen2) bantu=bantu->next; baru->next = bantu->next;
bantu->next = baru; }
}
//fungsi sisip simpul setelah simpul tertentu 2
void sisip_tengah2(simpul &L, char elemen1, char elemen2) {
simpul bantu, baru;
baru = (simpul) malloc(sizeof(simpul)); baru->isi = elemen1;
baru -> next = NULL; if(L == NULL)
cout << "list kosong ...: "<< endl; else
{
bantu = L;
while (bantu->next->isi != elemen2) bantu=bantu->next;
bantu->next = baru; }
}
//sisip simpul dibelakang
void sisip_belakang(simpul &L, char elemen) {
simpul bantu, baru;
baru = (simpul) malloc(sizeof(simpul)); baru->isi = elemen;
baru->next = NULL; if (L==NULL)
L=baru; else
{
bantu = L;
while (bantu->next != NULL) bantu = bantu->next; bantu->next=baru;
} }
//fungsi mencetak isi linked list
void cetak(simpul L) {
simpul bantu; if(L==NULL)
cout << "linked list kosong...."<<endl; else
{
bantu = L;
cout <<"isi linked list : "; while (bantu->next != NULL) {
cout<<bantu->isi<<"-->"; bantu=bantu->next; }
cout << bantu->isi; }
}
//fungsi hapus simpul depan
void hapus_depan(simpul &L) {
simpul hapus; if (L==NULL)
{
hapus = L; L = L -> next; hapus ->next = NULL; free(hapus);
} }
//fungsi hapus simpul belakang
void hapus_belakang(simpul &L) {
simpul bantu, hapus; if (L==NULL)
cout<<"linked list kosong ..."; else
{ bantu = L;
while(bantu->next->next != NULL) bantu=bantu->next; hapus = bantu ->next;
bantu->next = NULL; free(hapus);
} }
//fungsi hapus simpul di tengah
void hapus_tengah(simpul &L, char elemen) {
simpul bantu, hapus; if (L==NULL)
cout<<"linked list kosong ..."; else
{
bantu = L;
while (bantu->next->isi != elemen) bantu=bantu->next; hapus = bantu -> next;
bantu->next = bantu->next->next; hapus->next = NULL;
free(hapus); }
PRAKTIKUM VI
STACK, QUEUE DAN TREE
TUJUAN
a.
Mengenal apa itu stack, queue, dan tree pada bahasa pemrograman C++
b.
Memahami penggunaan stack, queue, dan tree pada bahasa pemrograman C++
c.
Mengetahui cara mengaplikasikan stack, queue, dan tree pada bahasa pemrograman C++
DEKLARASI
a.
Stack
struct stack
{
int elemen[max+1];
};
stack top;
b.
Queue
typedef struct
{
int HEAD, TAIL;
int data[max+1];
}
Queue;
c.
Tree
struct TreeNode
{
int item;
TreeNode *left;
TreeNode *right;
DASAR TEORI
Stack dapat diartikan sebagai tumpukan dari benda atau data yang seolah-olah diletakkan di
atas data yang lain dimana data yang pertama kali masuk akan terakhir. Secara sederhana sebuah
stack bisa digambarkan sebagai tumpukan buku yang disimpan dengan cara ditumpuk keatas.
Dimana buku yang pertama kali disimpan atau ditumpuk ada di paling bawah dan yang selanjutnya
ditumpuk diatasnya. Dan ketika kita melakukan pengambilan buku ototmatis buku yang terkahir
ditumpuk atau disimpan terakhir akan mejadi yang pertama diambil, istilah ini kemudian disebut
FILO (First In Last Out) dan bertambah atau berkurangnya data melalui satu ujung yang sama
yaitu ujung atas tumpukan.
Kaidah utama dalam konsep queue adalah FIFO yang merupakan singkatan dari First In First
Out, artinya adalah data yang pertama kali dimasukkan atau disimpan, maka data tersebut adalah
yang pertama kali akan diakses atau dikeluarkan. Analoginya sama dengan antrian di sebuah loket
pembelian tiket kereta, orang yang datang lebih dahulu, maka akan dilayani terlbih dahulu, dan
akan selesai lebih dulu dari orang-orang yang datang setelahnya.
Tree merupakan salah satu bentuk struktur data linier yang menggambarkan hubungan
yang bersifat hierarkis (hubungan one to many) antara elemen-elemen. Tree bisa didefinisikan
sebagai kumpulan simpul/node dengan satu elemen khusus yang disebut Root. Node lainnya
terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama lain (disebut
Subtree). Untuk lebih jelasnya, di bawah akan diuraikan istilah-istilah umum dalam tree:
Predecessor : Node yang berada di atas node tertentu
Successor
: Node yang berada di bawah node tertentu
Ancestor
: Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur
yang sama
Descendant : Seluruh node yang terletak sesudah node tertentu dan terletak pada jalur
yang sama
Parent
: Predecessor satu level di atas suatu node
Child
: Successor satu level di bawah suatu node
Sibling
: Node-node yang memiliki pparent yang sama dengan suatu node
Subtree
: Bagian dari tree yang berupa suatu node beserta descendentnya dan
memiliki semua karakteristik dari tree tersebut
Height
: Banyaknya tingkatan/level dalam suatu tree
Root
: Satu-satunya node khusus dalam tree yang tak punya predecessor
Leaf
: Node-node dalam tree yang tak memiliki successor
Degree
: Banyaknya child yang dimiliki suatu node
(Sanjaya, 2005).
IMPLEMENTASI
#include <iostream.h> #include <conio.h> #define max 10
struct Tumpukan{ int atas;
int data[max]; }T;
void awal(){ T.atas=-1; }
int kosong(){ if (T.atas==-1) return 1; else return 0; }
int penuh(){ if(T.atas==max-1) return 1; else return 0; }
void input(int data){ if(kosong()==1) {T.atas++;
T.data[T.atas]=data;
cout<<"Data "<<T.data[T.atas]<<" masuk ke stack";} else if(penuh()==0)
{T.atas++;
T.data[T.atas]=data;
else
cout<<"Tumpukan penuh"; }
void hapus(){ if(kosong()==0){
cout<<"Data teratas sudah terambil"; T.atas--;
} else
cout<<"Data kosong"; }
void tampil(){ if(kosong()==0)
{for(int i=T.atas;i>=0;i--)
{cout<<"\nTumpukan ke "<<i<<"="<<T.data[i];} }
else
cout<<"Tumpukan kosong"; }
void bersih(){ T.atas=-1;
cout<<"Tumpukan kosong!"; }
void main(){ int pil,data; awal(); do {
clrscr();
cout<<"1. Input\n2. Hapus\n3. Tampil\n4. Bersihkan\n5. Keluar\nMasukkan pilihan :";
cin>>pil; switch(pil)
{case 1:cout<<"Masukkan data = ";cin>>data; input(data);
case 5: cout<<"Terimakasih, tekan enter untuk keluar"; }
DAFTAR PUSTAKA
Sanjaya, Dwi. 2005.
Asyiknya Belajar Struktur Data di Planet C++.
Jakarta: PT Elex Media Komputindo.
Solichin, Achmad. 2003.
Pemrograman Bahasa C dengan Turbo C.
Jakarta: Ilmu Komputer.org