STRUKTUR DATA
Modul Praktikum
IDENTITAS MAHASISWA
NIM
NAMA
KELAS
KATA PENGANTAR
Penyusun
ii
DAFTAR ISI
IDENTITAS MAHASISWA .............................................................................................. i
KATA PENGANTAR .......................................................................................................ii
DAFTAR ISI .....................................................................................................................iii
KONTRAK PRAKTIKUM .............................................................................................. iv
ARRAY dan POINTER ...................................................................................................... 1
STRUCTURE ..................................................................................................................... 5
FUNGSI .............................................................................................................................. 8
SINGLE LINKED LIST ................................................................................................... 11
DOUBLE LINKED LIST ................................................................................................. 15
STACK ............................................................................................................................. 19
QUEUE ............................................................................................................................. 22
TREE................................................................................................................................. 26
REFERENSI ..................................................................................................................... 30
iii
KONTRAK PRAKTIKUM
Nama Mata Kuliah
Mata Kuliah Prasyarat
Tempat Pertemuan
Peraturan Praktikum :
1. Praktikan harus menghadiri setiap sesi praktiku, tidak hadir tanpa keterangan
akan menyebabkan hak menjadi praktikan gugur (nilai E).
2. Laporan praktikum dikumpulkan pada praktikum berikutnya.
20%
30%
50%
Catatan:
Kehadiran harus 100%, apabila tidak mengikuti praktikum diwajibkan mengganti
(inhal) setelah praktikum selesai semua. Maksimal inhal adalah 2 kali, karena
apabila lebih dari 2 kali maka mahasiswa dianggap tidak lulus.
iv
: 75 Menit
Percobaan
Pertanyaan
Tugas
1.1. Tujuan :
Setelah menyelesaikan modul ini, anda diharapkan dapat :
a. Memahami penerapan pointer dan array di dalam Bahasa C ++
b. Menggunakan pointer dan array di dalam program lainnya
1.2. Pelaksanaan percobaan :
#include <iostream.h>
#include <conio.h>
//Array satu dimensi
main()
{
int Nilai [10]={8, 12,
32, 3};
int i, Jumlah=0;
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 }
20,
15,
7,
5,
6,
4,
float Rata_Rata;
//Menghitung jumlah
for (i=0, i<10; i++)
Jumlah+=Nilai [i];
Rata_Rata= (float)
Jumlah / 10;
= ;
=
=
<<Jumlah;
<<Rata_Rata;
#include <iostream.h>
#include <conio.h>
main()
{
int Mat_A [3] [4]={{3,1,6,8}, {5,2,3,4},{6,1,2,4}};
int i j;
//Mencetak Elemen Matriks
for (i=0; i<3; i++)
{
for (j=0; j<4; j++)
cout <<Mat_A [i] [j]<<
cout <<endl ;
}
getch () ;
c. Percobaan Pointer
Ketiklah program di bawah ini. Kemudian jalankan program dan
perbaiki jika masih ditemui kesalahan
#include <iostream.h>
#include <conio.h>
1
2
3
4
void main()
5
{
6
7X
int x = 8
8C
int *xPtr;
9
xPtr = &x;
10
11
cout<<Nilai x = <<x<<endl;
12
cout<<Alamat x = <<&x<<endl;
13N
cout<<Alamat x = <<xPtr<<endl;
14
cout<<Nilai yang disimpan pada alamat ;
15
cout<<xPtr<< adalah <<*xPtr;
16
17
getch();
18
19 }
1
2
3
4
5
main()
6 {
7X
int Nilai []={45, 23, 50, 8, 12, 10, 15};
8C
int *Ptr_Nilai;
9
int i;
10
Ptr_Nilai = Nilai;
11
12
cout<<\nNilai Ptr_Nilai
: <<Ptr_Nilai;
13N
cout<<\nAlamat array Nilai
: <<Ptr_Nilai;
14
cout<<\nNilai yang ada pada alamat <<Ptr_Nilai
<<adalah <<*Ptr_Nilai;
15
cout<<\nElemen array indeks pertama
:
<<Nilai[0];
16
cout<<\n\nElemen Array (dengan Array) : ;
17
18
for(i=0;i<7;i++)
19
cout<<Nilai[i]<< ;//mencetak elemen array
20
cout<<\n\nElemen Array (dengan pointer) ;
21
for(i=0;i<7;i++);
22
cout<<*(Nilai+i)<< ;//mencetak elemen array
29
getch();
30 }
2.
3.
Jelaskan lagi bagaimana cara mengakses data yang ada di dalam array
dua dimensi, berdasarkan percobaan yang telah dilakukan !
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
1.4. Tugas :
Buatlah program untu membuat matrik 3 x 3, Kemudian pada setiap
elemen jumlahkan dengan 1 untuk baris pertama, jumlahkan dengan 2
untuk baris ke dua, dan jumlahkan dengan 3 untuk baris ke tiga !
Kondisi matrik awal
10
11
12
STRUCTURE
Tanggal :
Asisten :
Waktu
: 75 Menit
Percobaan
Pertanyaan
Tugas
2.1. Tujuan :
Setelah menyelesaikan modul ini, anda diharapkan dapat memahami
penggunaan/ penerapan structure di dalam pemrograman bahasa C++
2.2. Pelaksanaan percobaan :
a. Pemakaian Structure
1
2
3
4
5
6
7X
8C
9
10
11
12
13N
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
:
:
:
:
<<
<<
<<
<<
Mhs.Nim;
Mhs.Nama;
Mhs.Alamat;
Mhs.Umur;
}
5
1
2
3
4
5
6
7X
8C
9
10
11
12
13N
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
:
:
:
:
<<
<<
<<
<<
Mhs[i].Nim;
Mhs[i].Nama;
Mhs[i].Alamat;
Mhs[i].Umur;
Jelaskan ada berapa struct dan elemen apa saja serta mempunyai tipe
data apa aja struct dan masing-masing elemenya. pada percobaan a !
...................................................................................................................
...................................................................................................................
...................................................................................................................
2.
3.
Tunjukkan pada baris berapa dan tuliskan kembali baris tersebut, yang
menunjukkan penggunaan struct untuk suatu variable!
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
2.4. Tugas :
Modifikasi program pada percobaan b, sehingga program tersebut dapat
menampung 10 mahasiswa, serta dapat menampung data nama, jenis
kelamin, tanggal lahir, alamat, dan no hp/ telp !
FUNGSI
Tanggal :
Asisten :
Waktu
: 75 Menit
Percobaan
Pertanyaan
Tugas
3.1. Tujuan :
Setelah menyelesaikan modul ini, anda diharapkan dapat memahami
penggunaan/ penerapan fungsi di dalam pemrograman bahasa C++
3.2. Pelaksanaan percobaan :
1
2
3
4
5
6
7
8X
9C
10
11
12
13N
14
15
16
17
18
19
20
21
22
23
24
25
12, c = -5;
a
= <<a;
b
= <<b;
c
= <<c;
Terbesar : <<Maksimum(a,b,c);
}
int Maksimum(int x, int y, int z)
{
int Besar = x;
if(y > Besar)
Besar = y;
if(z > Besar)
Besar = z;
return (Besar)
}
1
2
3
4
void Tukar(int a int b);
5
void main()
6 {
7
8X
int a = 8, b = -5;
9C
cout<<Nilai a dan b Sebelumnya : <<a<< & <<b;
10
Tukar(a,b)
11
cout<<\nNilai a dan b Setelah ditukar : <<a<< &
<<b;
12
getch();
13N
14 }
15 void Tukar(int x, int y)
16 {
17
18
int z;
19
z = x;
20
x = y;
21
y = z;
22
23 }
2.
3.4. Tugas :
Modifikasi program pada percobaan b pada praktikum structure, sehingga
terdapat fungsi memasukkan data dan fungsi mencetak atau memunculkan
data!
10
: 75 Menit
Percobaan
Pertanyaan
Tugas
4.1. Tujuan :
Setelah menyelesaikan modul ini, anda diharapkan dapat memahami
membuat fungsi-fungsi operasi dalam single linked list
di dalam
pemrograman bahasa C++
4.2. Pelaksanaan percobaan :
Ketiklah program di bawah ini. Kemudian jalankan program dan
perbaiki jika masih ditemui kesalahan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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 Hapus_Depan(simpul &L);
void Hapus_Belakang(simpul &L);
void Cetak(simpul L);
main(){
char huruf, huruf2;
simpul L = NULL;
cout<<OPERASI PADA SINGLE LINKED
LIST<<endl<<endl;
cout<<Penyisipan Simpul di depan<<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);
cout<<Masukkan Huruf:;cin>>huruf;
Sisip_Depan(L, huruf);
11
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Cetak(L);
cout<<Penyisipan Simpul di belakang<<endl;
cout<<Masukkan Huruf:;cin>>huruf2;
Sisip_Belakang(L, huruf2);
cout<<Masukkan Huruf:;cin>>huruf2;
Sisip_Belakang(L, huruf2);
cout<<Masukkan Huruf:;cin>>huruf2;
Sisip_Belakang(L, huruf2);
cout<<Masukkan Huruf:;cin>>huruf2;
Sisip_Belakang(L, huruf2);
Cetak(L);
cout<<Setelah hapus depan<<endl;
Hapus_Depan(L);
Cetak(L);
getch();
}
void Sisip_Depan(simpul &L, char elemen){
simpul baru;
baru = (simpul)malloc(sizeof(simpul));
baru->Isi = elemen;
baru->Next = NULL;
if(L == NULL){
L = baru;
}else{
baru->Next = L;
L = baru;
}
}
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;
}
}
void Cetak(simpul L){
simpul bantu;
if(L == NULL)
cout<<LIST KOSONG<<endl;
12
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
else{
bantu == L;
cout<<Isi Linked List: ;
while(bantu->Next != NULL){
cout<<bantu->Isi<<;
bantu == bantu->Next;
}
cout<<bantu->Isi;
}
}
void Hapus_Depan(simpul &L){
simpul Hapus;
if(L == NULL)
cout<<LIST KOSONG<<endl;
else{
Hapus == L;
L = L->Next;
Hapus->Next = NULL;
free(Hapus);
}
}
2.
Ada berapa fungsi yang merupakan Operasi dalam single linked list
pada percobaan di atas ? Jelaskan masing-masing!
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
13
4.4. Tugas :
Tambahkan fungsi Hapus_Belakang(simpul DL) pada program diatas,
kemudian panggil di fungsi main()!
14
: 75 Menit
Percobaan
Pertanyaan
Tugas
5.1. Tujuan :
Setelah menyelesaikan modul ini, anda diharapkan dapat memahami
membuat fungsi-fungsi operasi dalam double linked list di dalam
pemrograman bahasa C++
5.2. Pelaksanaan percobaan :
Ketiklah program di bawah ini. Kemudian jalankan program dan
perbaiki jika masih ditemui kesalahan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#define true 1
#define false 0
typedef struct node *simpul;
struct node{
char Isi;
simpul kanan;
simpul kiri; };
void Sisip_Depan(simpul &DL, char elemen);
void Sisip_Belakang(simpul &DL, char elemen);
void Hapus_Depan(simpul &DL);
void Hapus_Belakang(simpul &DL);
void Cetak(simpul DL);
main(){
char huruf, huruf2;
simpul DL = NULL;
cout<<OPERASI PADA DOUBLE LINKED
LIST<<endl<<endl;
cout<<Penyisipan Simpul di depan<<endl;
cout<<Masukkan Huruf:;cin>>huruf;
Sisip_Depan(DL, huruf);
cout<<Masukkan Huruf:;cin>>huruf;
Sisip_Depan(DL, huruf);
cout<<Masukkan Huruf:;cin>>huruf;
15
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Sisip_Depan(DL, huruf);
cout<<Masukkan Huruf:;cin>>huruf;
Sisip_Depan(DL, huruf);
Cetak(DL);
cout<<Penyisipan Simpul di belakang<<endl;
cout<<Masukkan Huruf:;cin>>huruf2;
Sisip_Belakang(DL, huruf2);
cout<<Masukkan Huruf:;cin>>huruf2;
Sisip_Belakang(DL, huruf2);
cout<<Masukkan Huruf:;cin>>huruf2;
Sisip_Belakang(DL, huruf2);
cout<<Masukkan Huruf:;cin>>huruf2;
Sisip_Belakang(DL, huruf2);
Cetak(DL);
cout<<Setelah hapus depan<<endl;
Hapus_Depan(DL);
Cetak(DL);
getch();
}
void Sisip_Depan(simpul &DL, char elemen){
simpul baru;
baru = (simpul)malloc(sizeof(simpul));
baru->Isi = elemen;
baru->kanan = NULL;
baru->kiri = NULL;
if(DL == NULL){
DL = baru;
}else{
baru->kanan = DL;
DL->kiri = baru;
DL = baru;
}
}
void Sisip_Belakang(simpul &DL, char elemen){
simpul bantu, baru;
baru = (simpul)malloc(sizeof(simpul));
baru->Isi = elemen;
baru->kanan = NULL;
baru->kiri = NULL;
if(DL == NULL){
DL = baru;
}else{
bantu = DL;
while(bantu->Next != NULL)
bantu = bantu->kanan;
bantu->kanan = baru;
baru->kiri = bantu;
16
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
}
}
void Cetak(simpul DL){
simpul bantu;
if(DL == NULL)
cout<<LIST KOSONG<<endl;
else{
bantu == DL;
cout<<Isi Linked List: ;
while(bantu->Next != NULL){
cout<<bantu->Isi<< ;
bantu == bantu->Next;
}
cout<<bantu->Isi;
}
}
void Hapus_Depan(simpul &DL){
simpul Hapus;
if(DL == NULL)
cout<<LIST KOSONG<<endl;
else{
Hapus == DL;
DL = DL->kanan;
DL->kiri = NULL;
free(Hapus);
}
}
17
2.
Ada berapa fungsi yang merupakan Operasi dalam double linked list
pada percobaan di atas ? Jelaskan masing-masing!
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
5.4. Tugas :
Tambahkan fungsi Hapus_Belakang(simpul DL) pada program diatas,
kemudian panggil di fungsi main()!
18
STACK
Tanggal :
Asisten :
Waktu
: 75 Menit
Percobaan
Pertanyaan
Tugas
6.1. Tujuan :
Setelah menyelesaikan modul ini, anda diharapkan dapat memahami
membuat fungsi-fungsi operasi dalam stack di dalam pemrograman bahasa
C++
6.2. Pelaksanaan percobaan :
Ketiklah program di bawah ini. Kemudian jalankan program dan
perbaiki jika masih ditemui kesalahan
1
2
3
4
5
6
7
8X
9C
10
11
12
13N
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream.h>
#include <conio.h>
#define MaxS 10
struct Stack
{
char Isi[MaxS];
unsigned int Top;
};
void
void
void
void
main()
{
char huruf;
Stack S;
INITS(S);
cout<<Masukkan Karakter :;
cin>>huruf;
PUSH(S,huruf);
cout<<Masukkan Karakter :;
cin>>huruf;
PUSH(S,huruf);
19
29
cout<<Masukkan Karakter :;
30
cin>>huruf;
31
PUSH(S,huruf);
32
CETAK(S);
33
POP(S,huruf);
34
cout<<endl<<Yang Dihapus...<<huruf;
35
CETAK(S);
36
cout<<endl<<Masukkan Karakter :;
37
cin>>huruf;
38
PUSH(S,huruf);
39
cout<<Masukkan Karakter :;
40
cin>>huruf;
41
PUSH(S,huruf);
42
cout<<Masukkan Karakter :;
43
cin>>huruf;
44
PUSH(S,huruf);
45
CETAK(S);
46
POP(S,huruf);
47
cout<<endl<<Yang Dihapus...<<huruf;
48
CETAK(S);
49 getch();
50 }
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
20
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
}
}
else
cout<<Stack Kosong.....;
}
void POP(Stack &S, char &Hsl)
{
if(S.Top != 0)
{
Hsl = S.Isi[S.Top];
S.Top--;
}
else
cout<<Stack Kosong.....;
}
2.
6.4. Tugas :
Buatlah program stack dengan menggunakan fungsi-fungsi/ operasi yang
ada pada single linked list. ( Modifikasi atau gunakan fungsi-fungsi yang
telah dibuat dalam praktikum single linked list )
21
QUEUE
Tanggal :
Asisten :
Waktu
: 75 Menit
Percobaan
Pertanyaan
Tugas
7.1. Tujuan :
Setelah menyelesaikan modul ini, anda diharapkan dapat memahami
membuat fungsi-fungsi operasi dalam queue di dalam pemrograman
bahasa C++
7.2. Pelaksanaan percobaan :
Ketiklah program di bawah ini. Kemudian jalankan program dan
perbaiki jika masih ditemui kesalahan
1
2
3
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
4
typedef struct node *simpul;
5 X struct node
6C
{
7
char Isi;
8
simpul next;
9
};
10 void Sisip_Belakang(simpul &L, char elemen);
11 void Hapus_Depan(simpul &L);
12 void Cetak(simpul L);
13 main()
14 {
15
char huruf;
16
simpul L = NULL;//Pastikan Bahwa L Kosong
17
int i;
18
19
20
cout<<\nTambah antrian \n\n;
21
for(i=1; i<=3; i++)
22
{
23
cout<<Masukkan Huruf :;
24
cin>>huruf;
25
Sisip_Belakang(L, huruf);
22
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
}
Cetak(L);
//==Hapus Simpul Depan==
cout<<\nSetelah elemen antrian dikeluarkan
<<endl;
Hapus_Depan(L);
Cetak (L);
cout<<\ nSetelah elemen antrian dikeluarkan
<<endl;
Hapus_Depan(L);
Cetak (L);
cout<<\ nSetelah elemen antrian dikeluarkan
<<endl;
Hapus_Depan(L);
Cetak (L);
cout<<\nTambah antrian\n\n;
for(i=1 ; i<=3;i++)
{
cout<<Masukkan Huruf :;
cin>>huruf;
Sisip_Belakang(L, huruf);
}
Cetak(L);
cout<<\ nSetelah elemen antrian dikeluarkan
<<endl;
Hapus_Depan(L);
Cetak(L);
cout<<\ nSetelah elemen antrian dikeluarkan
<<endl;
Hapus_Depan(L);
Cetak(L);
getch();
}
23
}
69 Void Cetak(simpul L)
70 {
71
simpul bantu;
72
if(L==NULL)
73
cout<<Antrian Kosong......\n;
74
else
75
{
76
bantu = L;
77
cout<<\nIsi Linked List : ;
78
while (bantu->next != NULL)
79
{
80
cout<<bantu->Isi<<-->;
81
bantu = bantu->next;
82
}
83
Cout<<bantu->Isi;
84
}
85 }
86 void Hapus_Depan(simpul &L)
87 {
88
simpul Hapus;
89
if(L==NULL)
90
cout<<Antrian Kosong..........;
91
else
92
{
93
Hapus = L;
94
L = L->next;
95
Hapus->next = NULL;
96
free(Hapus);
97
}
98 }
Jelaskan fungsi-fungsi single lingked list apa saja yang ada di dalam
program di atas, kemudian analisa mengapa fungsi-fungsi itu
digunakan dalam pembuatan program antrian!
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
24
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
...................................................................................................................
7.4. Tugas :
Buatlah program antrian dengan menggunakan array. Di dalamnya
terdapat beberapa struct dan fungsi, yaitu
1. struct Queue
2. fungsi INITS
: memberikan nilai 1 untuk depan dan 0 untuk
belakang
3. fungsi Empty
: mengecek apakah antrian kosong
4. fungsi Full
: mengecek apakah antrian penuh
5. fungsi Kosong
: set antrian agar kosong
6. fungsi EnQueue : menambah isi antrian
7. fungsi DeQueue : mengurangi isi antrian
8. fungsi Cetak
: mencetak isi antrian
25
TREE
Tanggal :
Asisten :
Waktu
: 75 Menit
Percobaan
Pertanyaan
Tugas
8.1. Tujuan :
Setelah menyelesaikan modul ini, anda diharapkan dapat memahami
membuat fungsi-fungsi operasi dalam tree di dalam pemrograman bahasa
C++
8.2. Pelaksanaan percobaan :
Ketiklah program di bawah ini. Kemudian jalankan program dan
perbaiki jika masih ditemui kesalahan.
#include <iostream>
1
#include <stdlib.h>
2
#include <ctype.h>
3
4
using namespace std;
5
struct Node *createnode(long value);
6
struct Node *addnode(long value, struct Node* pNode);
7
void listnodes(struct Node *pNode);
8
void freenodes(struct Node *pNode);
9
10
11 struct Node {
long item;
12
int count;
13
struct Node *pLeft;
14
struct Node *pRight;
15
16 };
17
18 int main(void) {
long newvalue = 0;
19
struct Node *pRoot = NULL;
20
char answer = 'n';
21
cout<<"******************************\n";
22
cout<<"---- Program Sorting Binary Tree-----\n";
23
cout<<"-------------------------------------\n";
24
do {
25
cout<<"Inputkan Nilai Node: ";
26
cin>>newvalue;
27
if(pRoot == NULL)
28
26
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
pRoot = createnode(newvalue);
else
addnode(newvalue, pRoot);
cout<<"\nApakah anda mau inputkan nilai lagi(y or
n)? "<<endl;
cin>>answer;
}
while(tolower(answer) == 'y');
cout<<"\nHasil nilai binary tree:"<<endl;
listnodes(pRoot);
freenodes(pRoot);
cout << "\n" << endl;
return 0;
}
struct Node *createnode(long value) {
struct Node *pNode = (struct Node
*)malloc(sizeof(struct Node));
pNode->item = value;
pNode->count = 1;
pNode->pLeft = pNode->pRight = NULL;
return pNode;
}
struct Node *addnode(long value, struct Node* pNode) {
if(pNode == NULL)
return createnode(value);
if(value ==pNode->item) {
++pNode->count;
return pNode;
}
if(value < pNode->item) {
if(pNode->pLeft == NULL) {
pNode->pLeft = createnode(value);
return pNode->pLeft;
}else{
return addnode(value, pNode->pLeft);
}
}else{
if(pNode->pRight == NULL) {
pNode-> pRight = createnode(value);
return pNode-> pRight;
} else{
return addnode(value, pNode-> pRight);
}
}
}
void listnodes(struct Node *pNode) {
int i;
27
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
if(pNode->pLeft != NULL)
listnodes(pNode->pLeft);
for(i = 0; i<pNode->count ; i++)
cout<<endl<<pNode->item<<endl;
if(pNode->pRight != NULL)
listnodes(pNode->pRight);
}
void freenodes(struct Node * pNode) {
if(pNode == NULL)
return;
if(pNode->pLeft != NULL)
freenodes(pNode->pLeft);
if(pNode->pRight != NULL)
freenodes(pNode->pRight);
free(pNode);
28
8.4. Tugas :
Buatlah program tree yang dapat melakukan operasi PreOrder, InOrder,
dan PostOrder!
29
REFERENSI
Sitorus, Lamhot. Sembiring, David J.M., 2012, Konsep dan Implementasi Struktur
Data dengan C++, Andi, Yogyakarta.
A.S., Rosa. Shalahuddin, M., 2010, Modul Pembelajaran Struktur Data, Modula,
Bandung.
Kadir, Abdul. Heriyanto, 2006, Algoritma Pemrograman menggunakan C++, Andi,
Yogyakarta.
_________, 2011, Bahan ajar dan Modul Praktikum Struktur Data, Lab.
Pemrograman dan RPL, ITN Malang.
Fachrurrozi, M., 2009, Modul Praktikum Struktur Data, Comlabs Fakultas Ilmu
Komputer, Universitas Sriwijaya.
30