• Tidak ada hasil yang ditemukan

MODUL PRAKTIKUM STRUKTUR DATA BAHASA PEM

N/A
N/A
Protected

Academic year: 2018

Membagikan "MODUL PRAKTIKUM STRUKTUR DATA BAHASA PEM"

Copied!
30
0
0

Teks penuh

(1)

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

(2)

BAHASAN :

PRAKTIKUM I

: TIPE DATA, PROCEDURE DAN FUNCTION

PRAKTIKUM II

: ARRAY DAN STRUCT

PRAKTIKUM III

: SORTING

PRAKTIKUM IV

: POINTER

PRAKTIKUM V

: LINKED LIST

(3)

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.

(4)

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() {

(5)

//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();

}

(6)

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.

(7)

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++) {

(8)

}

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;

(9)

cout<<" NIM : "<<data[cari-1].nim<<endl; getch();

(10)

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

(11)

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

(12)

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; }

(13)

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");

(14)

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();

}

(15)

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:

(16)

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)

{

(17)

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(); }

(18)

{

urut(); }

else if (pil == '3') {

} else {

cout<<"Salah input"<<endl; getch();

}

(19)

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.

(20)

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);

(21)

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);

(22)

//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;

(23)

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)

(24)

{

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); }

(25)

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;

(26)

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

(27)

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;

(28)

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);

(29)

case 5: cout<<"Terimakasih, tekan enter untuk keluar"; }

(30)

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

Referensi

Dokumen terkait

Berikut ini merupakan notasi yang digunakan dalam model. Biaya total untuk sistem persediaan material Panjang periode review untuk modul i tipe j Panjang periode

* Senarai berantai ganda (doubly linked-list) atau senarai dua arah (two-way list), setiap simpulnya mempunyai 2 buah pointer, dengan pointer pertama menunjuk

Fungsi deletenode( ) akan menghapus node pada posisi curr jika linked list tidak kosong dan memindahkan pointer curr ke posisi node pertama, atau curr bernilai NULL apabila linked

 DLLNC adalah sebuah Linked List yang terdiri dari dua arah pointer, dengan node yang saling terhubung, namun kedua pointernya menunjuk ke NULL.  Setiap node pada

Class Node pada double linked list tidak sama dengan single linked list karena nodenya memiliki 3 atribuat yaitu data node next dan node prev.. Berikut ini class

 DLLNC adalah sebuah Linked List yang terdiri dari dua arah pointer, dengan node yang saling terhubung, namun kedua pointernya menunjuk ke NULL.  Setiap node pada

• Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunakan suatu pointer lain yang digunakan untuk menunjuk node

• Kelebihan dari Single Linked List dengan Head &amp; Tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus