MODUL STRUKTUR DATA - BSI...2. Konversi dari Bilangan Desimal ke Oktal Dengan cara membagi bilangan...
Transcript of MODUL STRUKTUR DATA - BSI...2. Konversi dari Bilangan Desimal ke Oktal Dengan cara membagi bilangan...
i
MODUL
STRUKTUR DATA
DISUSUN OLEH:
RABIATUL ADWIYA
NIP. 201209659
Program Studi Komputerisasi Akuntansi
AMIK Bina Sarana Informatika
Pontianak
2018
2
KATA PENGANTAR
Dengan mengucapkan syukur Alhamdulillah kehadirat Allah SWT atas segala
limpahan rahmat dan hidayah-Nya, sehingga penyusun dapat menyelesaikan modul
yang berjudul : “Struktur Data” dengan baik.
Buku petunjuk teori ini disusun sebagai pedoman khususnya bagi mahasiswa di
Jurusan Teknik Informatika, dalam memberikan pengenalan, pemahaman serta
mengasah kemampuan dalam bidang logika dan algoritma yang sudah menjadi
kewajiban untuk dikenal dan dipahami sebagai dasar mata kuliah di bidang teknologi
informasi. Diharapkan para mahasiswa nantinya bisa lebih terampil dan memahami
segala bentuk teknologi informasi saat ini.
Bagimanapun penyusun telah berusaha membuat buku ini dengan sebaik-
baiknya, namun tidak ada kesempurnaan dalam sebuah karya manusia. Penyusun
menyadari masih banyak kekurangan dalam penyusunan buku ini. Untuk itu pula segala
masukan, kritik dan saran dari pembaca dapat menjadikan acuan bagi penyusun dalam
penyempurnaan dan pembuatan buku berikutnya.
Tiada untaian kata yang dapat penyusun sampaikan selain panjatkan doa,
semoga Allah SWT selalu membuka hati kita dengan cahaya-NYA dan mengajarkan
ilmu-NYA kepada kita, serta menghindarkan kita dari ilmu yang tidak bermanfaat.
Pontianak, Oktober 2018
Penyusun
3
DAFTAR ISI
KATA PENGANTAR. ..................................................................................................................... ii
DAFTAR ISI . ................................................................................................................................. iii
KONSEP STRUKTUR DATA DAN ARRAY. ............................................................................... 4
SISTEM BILANGAN ........................................................................................................ 12
REPRESENTASI DATA ................................................................................................... 21
ARRAY DIMENSI BANYAK ........................................................................................... 26
SINGLE LINKED LIST NON CIRCULAR ..................................................................... 31
DAFTAR PUSTAKA ......................................................................................................... 48
4
KONSEP STRUKTUR DATA DAN ARRAY
A. STRUKTUR 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.
B. KONSEP DASAR TIPE DATA
Pada garis besarnya, data dapat dikategorikan menjadi :
1. Type Data Sederhana / Data Sederhana Terdiri dari :
a. Data Sederhana Tunggal Misalnya : Integer, Real/Float, Boolean dan
Character.
b. Data Sederhana Majemuk Misalnya : String B.
2. Struktur Data Terdiri dari :
a. Struktur Data Sederhana Misalnya Array dan Record
b. Struktur Data Majemuk Terdiri dari :
1) Linier Misalnya : Stack, Queue dan Linear Linked List.
2) Non Linier Misalnya : Pohon (Tree), Pohon Biner (Binary Tree), Pohon
Cari Biner (Binary Search Tree), General Tree serta Graph.
C. DEFINIS ARRAY
Array / Larik adalah struktur data sederhana yang dapat didefinisikan
sebagai pemesanan alokasi memory sementara pada komputer. Array dapat
didefinisikan sebagai suatu himpunan hingga elemen yang terurut dan homogen.
Terurut dapat diartikan bahwa elemen tersebut dapat diidentifikasi sebagai elemen
pertama, elemen kedua dan seterusnya sampai elemen ke-n. sedangkan, homogen
adalah bahwa setiap elemen dari sebuah Array tertentu haruslah mempunyai type
data yang sama. Sebuah Array dapat mempunyai elemen yang seluruhnya berupa
5
integer atau character atau String bahkan dapat pula terjadi suatu Array mempunyai
elemen berupa Array.
D. KARAKTERISTIK ARRAY
Array memiliki karakteristik sebagai berikut :
1. Mempunyai batasan dari pemesanan alokasi memory (Bersifat Statis)
2. Mempunyai Type Data Sama (Bersifat Homogen)
3. Dapat Diakses Secara Acak
E. 3 HAL YANG HARUS DIKETAHUI DALAM MENDEKLARASIKAN ARRAY
Ada 3 hal yang harus diketahui dalam mendeklarasikan Aarray yaitu :
1. Type data array
2. Nama variabel array
3. Subskrip / index array
F. JENIS ARRAY
Jenis Array (yang akan dipelajari) pada Modul ini adalah :
1. Array Dimensi Satu (One Dimensional Array)
Array Dimensi Satu (One Dimensional Array) dapat disebut juga dengan istilah
vektor yang menggambarkan data dalam suatu urutan Deklarasi : Type_Data
Nama_Variabel [index] Misalnya : int A[5];
Penggambaran secara Logika :
Elemen Array
A[1] A[2] A[3] A[4] A[5]
0 1 2 3 4
Subscript / Index
void main()
{ int bil [5];
6
clrscr;
cout<<"Masukkan 5 bilangan genap : "<< endl;
for (int i = 0; i < 5; i++)
{ cout<<"Bilangan ";
cout<< i + 1 <<" : ";
cin>> bil[i];
cout<<endl;
}
cout<<endl;
cout<<"5 bilangan genap yang dimasukkan “ << endl;
for (int i = 0; i < 5; i++)
cout<<" "<<bil[i];
getch();
}
Rumus untuk menentukan jumlah elemen dalam Array :
7
Pemetaan (Mapping) Array Dimensi Satu Ke Storage
Konversi Bilangan :
a. Decimal adalah bilangan berbasis sepuluh yang terdiridari 0, 1, 2, 3,
4, 5, 6, 7, 8, dan 9 2
b. Hexadecimal adalah bilangan berbasis enam belas yang terdiri dari
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, dan F.
Tabel di bawah adalah contoh konversi bilangan Decimal, dan
Hexadecimal :
Contoh Konversi Antar Bilangan :
Konversi Bilangan Decimal ke Hexadecimal Contoh 254 (10) = .......(16)
Caranya dengan membagi bilangan tersebut dengan enam belas sampai
8
bilangan tersebut tidak bisa lagi dibagi enam belas (kurang dari enam belas)
dengan mencatat setiap sisa pembagian.
254 : 16 = 15 sisa 14 atau E (lihat tabel di atas)
15 : 16 = sisa 15 atau F (lihat tabel di atas)
Jadi 254 (10) = FE (16) diurutkan dari sisa pembagian terakhir.
Contoh Penerapan Array Dimensi 1 Pada Program C++
2. Array Dimensi Dua (Two Dimensional Array)
Sering digunakan dalam menterjemahkan matriks pada pemograman.
Deklarasi : Type_Data Nama_Variabel [Index1] [Index2]
Missal : int A[3][2];
Penggambaran secara Logika :
0 1
0
1
2
9
Pemetaan (Maaping)Array Dimensi Dua Ke Storage
Terbagi dua cara pandang (representasi) yang berbeda
a. Secara Kolom Per Kolom (Column MajorOrder/CMO)
b. Secra Baris Per Baris (RowMajor Order / RMO)
Keterangan :
@M[i][j] = Posisi Array yang dicari, M[0][0] = Posisi alamat awal index
array, i = Baris,
j = Kolom, N= Banyaknya elemen per baris
Penggambaran Secara Logika
Misal : int M[3][2];
(Array dengan 3 Baris & 2 Kolom)
Berdasarkan Cara Pandang :
1. Kolom Per Baris (Row Major Order / RMO)
M[0,0] M[0,1] M[1,0] M[1,1] M[2,0] M[2,1]
Jumlah elemen per kolom = 2
@M[i][j] = M[0][0] + {(j – 1) * K + (I – 1)} * L
@M[i][j] = M[0][0] + {(j – 1) * N + (I – 1)} * L
10
2. Baris Per Kolom (Coloumn Major Order / CMO)
M[0,0] M[1,0] M[2,0] M[0,1] M[1,1] M[2,1]
Jumlah elemen per kolom = 3
3. Baris Per Kolom (Coloumn Major Order / CMO)
Contoh Pemetaan :
Suatu Array X dideklarasikan sebagai berikut : Float X[4][3], dengan alamat
index X[0][0] berada di 0011(H) dan ukuran type data float = 4
Tentukan berapa alamat array X[3][2] berdasarkan cara pandang baris dan
kolom ?
11
LATIHAN 1.
1. Suatu array A dideklarasikan sbb : int A[50] dengan alamat awal berada di
0011(H). Tentukan berapa alamat array A[20] dan A[40]?
2. Suatu array X dideklarasikan sbb : Float X[4][5] dengan alamat awal berada
pada 0011(H). Tentukan berapa alamat array X[4][3], berdasarkan cara pandang
baris dan kolom?
12
SISTEM BILANGAN
A. KONSEP DASAR SISTEM BILANGAN
Sistem bilangan adalah suatu cara untuk mewakili besaran dari suatu item
fisik. Konsep dasar sistem bilangan dikarakteristikkan oleh basis (radix), absolute
digit dan posisi (place) value, yang dituliskan:
Basis yang digunakan sistem bilangan tergantung dari jumlah nilai bilangan yang
dipergunakan.
Sistem bilangan yang sering digunakan adalah:
1. Sistem bilangan desimal
Sistem bilangan desimal menggunakan basis 10 (deca)
Menggunakan 10 macam simbol bilangan berbentuk digit angka:
0,1,2,3,4,5,6,7,8,9
Dasar penulisan:
Bentuk nilai desimal dapat berupa integer (bilangan bulat) dan pecahan
Dapat ditulis dalam bentuk eksponensial yaitu ditulis dengan mantissa dan
exponent.
Contoh: 1234 = 0,1234 x 10 4
mantissa exponent
Penulisan base/radix dituliskan setelah absolut digit, yaitu A10, atau A(D).
Dalam hal ini yang dituliskan adalah A10.
Contoh nilai 435210 dan 762,1510 dapat diartikan:
A X 10n
13
2. Sistem bilangan biner
Sistem bilangan biner menggunakan basis 2 (binary)
Menggunakan 2 macam simbol bilangan berbentuk digit angka: 0 dan 1
Penulisan base/radix dituliskan setelah absolut digit, yaitu A2 atau A(B).
Dalam hal ini yang dituliskan adalah A2
Dasar penulisan:
Contoh penulisan: 1001 00112
3. Sistem bilangan oktal
Sistem bilangan oktal menggunakan basis 8 (octal)
Menggunakan 8 macam simbol bilangan berbentuk digit angka:
0,1,2,3,4,5,6,7
Penulisan base/radix dituliskan setelah absolut digit, yaitu A 8 atau A(O).
Dalam hal ini yang dituliskan adalah A8
Dituliskan:
Contoh penulisan: 3478
4. Sistem bilangan hexadecimal
Sistem bilangan hexadesimal menggunakan basis 16 (hexa)
Menggunakan 16 macam simbol bilangan berbentuk digit angka:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
Penulisan base/radix dituliskan setelah absolut digit, yaitu A16 atau A(H).
Dalam hal ini yang dituliskan adalah A16
Dituliskan:
Contoh penulisan: A7816
B. SATUAN DATA
Komputer bekerja atas dasar sistem biner berupa 0 dan 1 yang disebut bit.
Bit merupakan satuan data terkecil dalam sistem komputer. Bit-bit dapat digunakan
untuk menyusun karakter apa saja. Sebuah karakter dinyatakan dengan 8 bit atau 16
bit.
A X 2n
A X 8n
A X 16n
14
1. Byte
Byte merupakan satuan yang digunakan untuk menyatakan sebuah karakter
pada sistem ASCII atau EBCDIC
1 byte = 8 bit
2. Kilobyte (KB)
Biasa digunakan untuk berkas gambar berukuran kecil
1 kilobyte = 1024 byte
3. Megabyte (MB)
Biasa digunakan untuk menyatakan kapasitas RAM dalam PC
1 MB = 1024 KB = 1.048.576 byte
4. Gigabyte (GB)
Biasa digunakan untuk menyatakan kapasitas harddisk dalam PC
1 GB = 1024 MB = 1.073.741.824 byte
5. Terabyte (TB)
Biasa digunakan untuk menyatakan kapasitas harddisk dalam mainframe
1 TB = 1024 GB = 1.009.511.627.776 byte
6. Petabyte (PB)
1 PB = 1024 TB
C. SISTEM PENGKODEAN
Sistem yang digunakan untuk mengkodekan karakter bermacam-macam.
Data disimpan dalam memori komputer menempati posisi 1 byte, yang
menggunakan kombinasi dari digit Biner. Komputer berbeda dalam menggunakan
kode biner untuk mewakili sebuah karakter. Ada beberapa kode yang akan dibahas,
yaitu BCD, EBCDIC, ASCII dan Unicode.
1. BCD (Binary Coded Decimal)
Merupakan kode biner yang digunakan hanya untuk mewakili nilai digit
desimal saja.
Sebuah karakter BCD dinyatakan dengan 4 bit
Karakter yang tersedia sebanyak 10 angka, yaitu angka 0,1,2,3,4,5,6,7,8,9
Digunakan pada komputer generasi pertama.
15
2. EBCDIC (Extended Binary Coded Decimal Interchange Code)
EBCDIC dikembangkan oleh IBM, yang diterapkan pada berbagai komputer
mainframe
Sebuah karakter dinyatakan dengan 8 bit
Karakter yang tersedia sebanyak 28 = 226 karakter
Digunakan pada komputer generasi ketiga
3. ASCII (American Standard Code for Information Interchange)
ASCII dikembangkan oleh ANSI (American National Standard Institute)
Sebuah karakter ASCII dinyatakan dengan 8 bit
Karakter yang tersedia sebanyak 226 karakter, meliputi huruf, angka, dan
spesial karakter, termasuk simbol Yunani dan karakter grafis
16
17
4. Unicode
Sebuah karakter Unicode dinyatakan dengan 16 bit
Karakter yang tersedia sebanyak 65.536 karakter, meliputi huruf, angka, dan
spesial karakter, termasuk simbol Yunani, karakter grafis, simbol Arab dan
Cina
D. KONVERSI BILANGAN
1. Konversi dari Bilangan Desimal ke Biner
Dengan cara membagi bilangan desimal dengan 2 (basis biner) sampai tidak
bisa dibagi lagi
Kemudian sisa pembagian diurutkan dari bawah ke atas dalam format 8 bit
Contoh nilai 8910 akan dikonversikan menjadi Biner
2. Konversi dari Bilangan Desimal ke Oktal
Dengan cara membagi bilangan desimal dengan 8 (basis oktal) sampai tidak
bisa dibagi lagi
Cara yang digunakan sama dengan bilangan biner
Contoh nilai 14710 akan dikonversikan menjadi Oktal
Dituliskan dari bawah ke atas: 223
Maka hasilnya menjadi 14710 = 2238
18
3. Konversi dari Bilangan Desimal ke Hexadesimal
Dengan cara membagi bilangan desimal dengan 16 (basis hexa) sampai
tidak bisa dibagi lagi
Cara yang digunakan sama dengan bilangan biner
Contoh nilai 12310 akan dikonversikan menjadi Hexa
Sisa 11 dikodekan menjadi B
Maka hasilnya menjadi 12310 = 7B16
4. Konversi dari Bilangan Biner ke Desimal
Dengan cara mengalikan masing-masing bit biner dalam bilangan sesuai
dengan radix dan position value-nya
Contoh bit 11 01012 akan dikonversikan menjadi Desimal
5. Konversi dari Bilangan Biner ke Oktal
Dengan cara membagi digit biner tersebut ke dalam tiga digit dari kanan
Ketiga digit tersebut kemudian dikonversikan menjadi desimal
Contoh bit 1010 10112 akan dikonversikan menjadi Oktal
Maka dituliskan menjadi 1010 10112 = 2538
6. Konversi dari Bilangan Biner ke Hexadesimal
Dengan cara membagi digit biner tersebut ke dalam empat digit dari kanan
19
Keempat digit tersebut kemudian dikonversikan menjadi desimal
Contoh bit 101010112 akan dikonversikan menjadi Hexa
Maka dituliskan menjadi 1010 10112 = AB16
7. Konversi dari Bilangan Oktal ke Desimal
Dengan cara mengalikan masing-masing bit oktal dalam bilangan sesuai
dengan radix dan position value – nya
Contoh bit 3718 akan dikonversikan menjadi Desimal
8. Konversi dari Bilangan Oktal ke Biner
Dengan cara mengkonversikan setiap satu digit oktal menjadi tiga digit biner
Contoh bit 718 akan dikonversikan menjadi Biner
Maka dituliskan menjadi 718 = 0011 10012
9. Konversi dari Bilangan Oktal ke Hexadesimal
Konversi ini tidak dapat dilakukan secara langsung, tetapi harus
dikonversikan terlebih dahulu ke Desimal atau Biner
Contoh bit 2438 akan dikonversikan menjadi Hexa
Maka dituliskan menjadi 2438 = A316
20
10. Konversi dari Bilangan Hexadesimal ke Desimal
Dengan cara mengalikan masing-masing bit hexa dalam bilangan sesuai
dengan radix dan position value - nya
Contoh bit 8F16 akan dikonversikan menjadi Desimal
11. Konversi dari Bilangan Hexadesimal ke Biner
Dengan cara mengkonversikan setiap satu digit hexa menjadi empat digit
biner
Contoh bit 8F16 akan dikonversikan menjadi Biner
Maka dituliskan menjadi 8F16 = 1000 11112
12. Konversi dari Bilangan Hexadesimal ke Oktal
Konversi ini tidak dapat dilakukan secara langsung, tetapi harus
dikonversikan terlebih dahulu ke Desimal atau Biner sama dengan konversi
dari oktal ke hexa
Contoh bit 8F16 akan dikonversikan menjadi Oktal
Maka dituliskan menjadi 8F16 = 2178
21
REPRESENTASI DATA
A. PENGERTIAN
Komputer menggunakan dan memanipulasi data untuk perhitungan
aritmatik, pemrosesan data, dan operasi logik. Type data yang digunakan dalam
komputer digital diklasifikasikan:
Data Numerik: merepresentasikan integer, pecahan, real, dan desimal berkode
biner.
Data Logikal: digunakan oleh operasi seperti OR, AND, COMPLEMENT,
COMPARE dan SHIFT.
Data Bit Tunggal: digunakan oleh operasi seperti SET, CLEAR, dan TEST.
Data Alfanumerik: digunakan untuk manipulasi string oleh instruksi seperti
MOVE dan SEARCH
B. ILUSTRASI REPRESENTASI DATA
C. REFRESENTASI INTEGER
Untuk keperluan pengolahan dan penyimpanan data komputer, hanya
bilangan biner yang dapat merepresentasikan bilangan Integer direpresentasikan
selain oleh nilai bilangannya juga dengan adanya tambahan tanda (Signed Integer).
Tipe:
Sign and Magnitude
22
One’s Complement
Two’s Complement
1. Representasi Sign-Magnitude
Merepresentasikan bilangan integer negatif
Bit yang paling kiri diidentifikasikan sebagai tanda (sign) :
Jika bit paling kiri adalah nol maka bilangan tersebut positif
Jika bit paling kiri adalah satu maka bilangan tersebut negative
Contoh:
+1810 = 000100102
−1810 = 100100102
a. Penjumlahan pada Sign-Magnitude mempunyai aturan:
Sign tidak dijumlahkan, hanya magnitude
Buang carry out dari bit yang paling kiri
Jumlahkan yang sign-nya sama
Sign hasil = sign penambah
Contoh penjumlahan 4 bit:
b. Pengurangan pada Sign-Magnitude mempunyai aturan:
Lakukan pengurangan jika sign sama
Jika sign tidak sama, ubah soal ke penjumlahan
Contoh pengurangan:
c. Kelemahan Sign-Magnitude:
Penambahan dan pengurangan memerlukan pertimbangan baik tanda
bilangan maupun nilai relatifnya
Ada dua representasi bilangan nol, yaitu :
23
+010 = 000000002
−010 = 100000002
2. Representasi Komplemen Satu
Komplemen pada dasarnya merubah bentuk pengurangan menjadi
pertambahan
Komplementasi bilangan biner dengan cara mengubah 1 menjadi 0 dan 0
menjadi 1
Contoh:
00110110 = 11001001
3. Representasi Komplemen Dua
Dibentuk dengan mengambil komplemen satu dari bilangannya dan dengan
menambahkan 1 pada posisi paling kanan
Contoh desimal 49 (dalam biner) menjadi bentuk komplemen dua:
D. PENJUMLAHAN BINER
Penjumlahan bilangan biner dilakukan sama seperti penjumlahan bilangan-
bilangan desimal. Operasi pengurangan, perkalian dan pembagian seperti yang
dilakukan pada komputer dan kalkulator digital sesungguhnya menggunakan
penjumlahan sebagai operasi dasarnya.
Ada 4 kondisi dalam penjumlahan bilangan biner:
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 0 (carry out 1)
Maksud dari carry out, hasilnya tidak bisa memuat lebih dari 1 digit, tetapi
disimpan ke dalam kolom sebelah yang lebih tinggi nilainya (digit paling kiri yang
diabaikan).
24
1. Penjumlahan Biner dengan Komplemen Dua
Ada beberapa kasus yang dapat dilakukan dengan komplemen dua:
a. Kasus 1: Dua Blangan Positip
Penjumlahan dari dua bilangan positip dilakukan secara langsung.
Contoh:
b. Kasus 2: Blangan Positip dan Negatip yang lebih kecil
Contoh: 8 + (-4)
Caranya bilangan -4 akan diubah ke dalam bentuk komplemen dua,
sehingga biner 4 (0100) menjadi:
c. Kasus 3: Blangan Positip dan Negatip yang lebih besar
Contoh: 8 + (-11)
Caranya bilangan -11 akan diubah ke dalam bentuk komplemen dua,
sehingga biner 11 (1101) menjadi:
d. Kasus 4: Dua Blangan Negatif
Contoh: -8 + (-7)
Caranya bilangan -8 dan -7 akan diubah ke dalam bentuk komplemen dua,
jadi biner 8 (1000) dan 7 (0111) menjadi:
25
26
ARRAY DIMENSI BANYAK
A. ARRAY DIMENSI TIGA (Three Dimensional Array)
Digunakan untuk mengelola data dalam bentuk 3 dimensi atau tiga sisi.
Deklarasi : Type_Data Nama_Variabel [index1] [ndex2] [index3];
Misal : int A [3][4][2];
Menentukan jumlah elemen dalam Array dimensi 3 :
Contoh :
Suatu Array X dideklarasikan sbb : int A [3][4][2]; maka jumlah elemen Array
dimensi tiga tersebut adalah :
B. PEMETAAN (MAPPING) ARRAY DIMENSI TIGA KE STORAGE
Contoh :
Suatu Array A dideklarasikan sebagai berikut : int A [2][4][3], dengan alamat awal
index A[0][0][0] berada di 0011(H) dan ukuran type data int = 2 Tentukan berapa
alamat Array di A[2][3][2] ?
27
Contoh Program Array Dimensi Tiga:
28
Tampilan Program
C. TRINGULAR ARRAY (ARRAY SEGITIGA)
Tringular Array dapat merupakan Upper Tringular (seluruh elemen di
bawah diagonal utama = 0), ataupun Lower Tringular (seluruh elemen di atas
diagonal utama = 0). Dalam Array Lower Tringular dengan N baris, jumlah
maksimum elemen <> 0 pada baris ke-I adalah = I, karenanya total elemen <> 0,
tidak lebih dari :
29
D. SPARSE ARRAY (ARRAY JARANG)
Contoh :
Diketahui suatu array segitiga atas memiliki 3 baris dan kolom, tentukan berapakah
jumlah elemen yang bukan nol pada array tersebut.
I = N(N+1) / 2
I = 3 (3+1) / 2
= 12 / 2
= 6
Contoh bentuk array nya adalah seperti dibawah ini :
Suatu Array Upper Tringular dan Array Lower Tringular dapat dengan order yang
sama, dapat disimpan sebagai suatu array dengan order yang berbeda, Contohnya :
30
Suatu Array yang sangat banyak elemen nol-nya, contohnya adalah Array A pada
Gambar berikut :
LATIHAN 4.
1. Suatu array A dideklarasikan sbb: Float A[5][5][5] dengan alamat awal A[0][0][0]
= 0021(H), berapakah alamat array A[2][3][2] dan A[5][4][3]?
2. Suatu array B dideklarasikan sbb: Char B[3][4][3] dengan alamat awal A[0][0][0] =
0021(H), berapakah alamat array A[2][3][2] dan A[3][4][3]?
31
SINGLE LINKED LIST NON CIRCULAR
A. KONSEP POINTER DAN LINKED LIST
Untuk mengolah data yang banyaknya tidak bisa ditentukan sebelumnya,
maka disediakan satu fasilitas yang memungkinan untuk menggunakan suatu
perubah yang disebut dengan perubah dinamis (Dinamic variable).
1. Perubah Dinamis (Dinamic variable
Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah
program dieksekusi.
2. Perbedaan Perubah Statis & Dinamis
Pada perubah statis, isi Memory pada lokasi tertentu (nilai perubah) adalah data
sesungguhnya yang akan diolah. Pada perubah dinamis, nilai perubah adalah
alamat lokasi lain yang menyimpan data sesungguhnya. Dengan demikian data
yang sesungguhnya dapat dimasukkan secara langsung.
Dalam hal cara pemasukkan data dapat diilustrasikan seperti dibawah ini.
B. DEKLARASI POINTER
Pointer digunakan sebagai penunjuk ke suatu alamat memori Dalam
pemrograman C++, Type Data Pointer dideklarasikan dengan bentuk umum :
Type Data * Nama Variabel;
Type Data dapat berupa sembarang type data, misalnya char, int atau float.
Sedangkan Nama veriabel merupakan nama variabel pointer.
Contoh penggunaan pointer dalam program C++:
Void main()
{
int x,y,*z;
x = 75; //nilai x = 75
y = x; //nilai y diambil dari nilai x
32
z = &x; //nilai z menunjuk kealamat pointer dari nilai x
getch();
}
C. LINKED LIST (LINKED LIST)
Salah satu Struktur Data Dinamis yang paling sederhana adalah Linked
List atau Struktur Berkait atau Senarai Berantai, yaitu suatu kumpulan komponen
yang disusun secara berurutan dengan bantuan Pointer. Linked List (Senarai
Berantai) disebut juga dengan Senarai Satu Arah (One-Way List). Masing-masing
komponen dinamakan dengan Simpul (Node).
Setiap simpul dalam suatu Linked List terbagi menjadi dua bagian,yaitu :
1. Medan Informasi
Berisi informasi yang akan disimpan dan diolah.
2. Medan Penyambung (Link Field)
Berisi alamat berikutnya. Bernilai 0, Jika Link tersebut tidak menunjuk ke Data
(Simpul) lainnya. Penunjuk ini disebut Penunjuk Nol.
Linked List juga mengandung sebuah variable penunjuk List, yang
biasanya diberi nama START (AWAL) yang berisi alamat dari simpul pertama
dalam List.
33
D. PENYAJIAN LINKED LIST DALAM MEMORY
Keterangan :
E. PERBEDAAN KARAKTERISTIK ARRAY DAN LINKED LIST
ARRAY LINKED LIST
Statis Dinamis
Penambahan / penghapusan data terbatas Penambahan / penghapusan data tidak
terbatas
Random access Sequential access
Penghapusan array tidak mungkin Penghapusan linked list mudah
F. BENTUK NODE SINGLE LINKED LIST NON CIRCULAR
Single adalah field pointer-nya hanya satu dan satu arah,pada akhir node
pointernya menunjuk NULL.
Sedangkan, Linked List adalah node-node tersebut saling terhubung satu sama lain.
Setiap node pada linked list mempunyai field yang berisi pointer ke node
berikutnya, dan juga memiliki field yang berisi data. Node terakhir akan menunjuk
34
ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi
linked list.
G. PEMBUATAN SINGLE LINKED LIST NON CIRCULAR
Deklarasi Node :
typedef struct TNode{
int data;
TNode *next;
};
Keterangan:
Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe
integer dan field next yang bertipe pointer dari TNode.
Setelah pembuatan struct, buat variabel head yang bertipe pointer dari TNode
yang berguna sebagai kepala linked list.
Digunakan perintah new untuk mempersiapkan sebuah node baru berserta
alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnya
ditunjuk ke NULL.
TNode *baru;
baru = new TNode;
baru->data = data baru;
baru->next = NULL;
H. SINGLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD
Dibutuhkan satu buah variabel pointer yaitu head yang akan selalu menunjuk pada
node pertama.
35
1. Deklarasi Pointer Penunjuk Head Single Linked List
Manipulasi linked list tidak dapat dilakukan langsung ke node yang dituju,
melainkan harus menggunakan suatu pointer penunjuk ke node pertama
(Head) dalam linked list.
Deklarasinya sebagai berikut:
TNode *head;
2. Fungsi Inisialisasi Single Linked List
3. Function untuk mengetahui kondisi Single Linked List
Jika pointer head tidak menunjuk pada suatu node maka kosong
int isEmpty()
{
if (head == NULL) return 1;
else return 0;
}
4. Menambah Node di Depan
Penambahan node baru akan dikaitan di node paling depan, namun pada saat
pertama kali (data masih kosong), maka penambahan data dilakukan dengan
cara: node head ditunjukkan ke node baru tersebut.
Prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan
menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi
data terdepan.
Menambah Node di Depan dengan C++
36
Ilustrasi penambahan node didepan
5. Menambah Node di Belakang
Penambahan data dilakukan di belakang, namun pada saat pertama kali,
node langsung ditunjuk oleh head.
37
Penambahan di belakang membutuhkan pointer bantu untuk mengetahui
node terbelakang. Kemudian, dikaitkan dengan node baru.
Untuk mengetahui data terbelakang perlu digunakan perulangan.
Menambahan node dibelakang dengan C++
Ilustrasi penambahan node dibelakang
38
6. Menghapus Node di Depan
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk
oleh pointer, maka harus dilakukan penggunakan suatu pointer lain (hapus)
yang digunakan untuk menunjuk node yang akan dihapus, barulah kemudian
menghapus pointer hapus dengan menggunakan perintah delete.
Sebelum data terdepan dihapus, terlebih dahulu head harus menunjuk ke
node berikutnya agar list tidak putus, sehingga node setelah head lama akan
menjadi head baru
Jika head masih NULL maka berarti data masih kosong!
Menghapus Node didepan dengan C++
39
Ilustrasi penghapusan node didepan
7. Menghapus Node di Belakang
Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk
menunjuk node yang akan dihapus, pointer bantu untuk menunjuk node
sebelum node yang dihapus yang akan menjadi node terakhir.
Pointer bantu digunakan untuk menunjuk ke nilai NULL. Pointer bantu
selalu bergerak sampai sebelum node yang akan dihapus, kemudian pointer
hapus diletakkan setelah pointer bantu. Selanjutnya pointer hapus akan
dihapus, pointer bantu akan menunjuk ke NULL.
Menghapus node dibelakang dengan C++
40
Ilustrasi penghapusan node dibelakang
8. Function untuk menghapus semua elemen Linked List
void clear()
{
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL) { hapus = bantu;
bantu = bantu->next;
delete hapus;
}
41
head = NULL;
}
I. MENAMPILKAN / MEMBACA ISI LINKED LIST
Linked list ditelusuri satu-persatu dari awal sampai akhir node.
Penelusuran dilakukan dengan menggunakan pointer bantu, karena pointer head
yang menjadi tanda awal list tidak boleh berubah/berganti posisi. Penelusuran
dilakukan terus sampai ditemukan node terakhir yang menunjuk ke nilai NULL.
Jika tidak NULL, maka node bantu akan berpindah ke node selanjutnya dan
membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait.
Jika head masih NULL berarti data masih kosong!
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL){
cout <<bantu ->data<<" ";
bantu=bantu->next;
}
printf(“\n”);
} else printf(“Masih kosong\n“);
}
J. SINGLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD DAN
TAIL
Dibutuhkan dua variabel pointer yaitu head dan tail. Head selalu menunjuk
pada node pertama, sedangkan tail selalu menunjuk pada node terakhir. Kelebihan
dari Single Linked List dengan Head & Tail adalah pada penambahan data di
belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus
menggunakan perulangan pointer bantu.
42
1. Inisialisasi Linked List
TNode *head, *tail;
2. Fungsi Inisialisasi Linked List
void init(){
head = NULL;
tail = NULL;
}
3. Function untuk mengetahui kondisi LinkedList kosong / tidak
int isEmpty(){
if(tail == NULL) return 1;
else return 0;
}
4. Menambah Node di Depan Dengan Head dan Tail
Ilustrasi penambahan node didepan dengan head dan tail
43
5. Menambah Node di Belakang Dengan Head dan Tail
Ilustrasi penambahan node dibelakang dengan head dan tail
44
6. Menghapus Node di Depan (Dengan Head dan Tail)
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk
oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan
pointer hapus pada head, kemudian dilakukan pergeseran head ke node
berikutnya sehingga data setelah head menjadi head baru, kemudian
menghapus pointer hapus dengan menggunakan perintah delete.
Jika tail masih NULL maka berarti list masih kosong!
Ilustrasi Menghapus Node di Depan (Dengan Head dan Tail)
45
7. Menghapus Node di Belakang (Dengan Head dan Tail)
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk
oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan
variabel hapus pada tail. Jika tail masih NULL maka berarti list masih
kosong!
Dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node
berikutnya sampai sebelum tail, sehingga tail dapat ditunjukkan ke bantu,
dan bantu tersebut akan menjadi tail yang baru.
Setelah itu hapus pointer hapus dengan menggunakan perintah delete.
Ilustrasi Menghapus Node di Belakang (Dengan Head dan Tail)
46
8. Function untuk menghapus semua elemen LinkedList dengan HEAD & TAIL
void clear()
{
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL)
{
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
tail = NULL;
}
47
LATIHAN 5.
Buatlah Ilustrasi / Penggambaran untuk menambah dan menghapus node di posisi
tengah pada :
1. Single Linked List dengan Head
2. Single Linked List dengan Head & Trail
48
DAFTAR PUSTAKA
Jogiyanto.2000.Konsep Dasar Pemrograman Bahasa C, Andi:Yogyakarta
Nugroho, Adi. 2009. Algoritma Dan Struktur Data Dalam Bahasa Java. Andi :
Yogyakarta
Pranata,Antonie.2000.Algortima dan Pemrograman, J&J Learning:Yogyakarta
Sanjaya,Dwi.2001. Bertualang dengan Struktur Data di Planet Pascal,J&J
Learning:Yogyakarta
Sjukani. Moh. 2009. Struktur Data (Algoritma & struktur Data 2) Dengan C, C++. Edisi
3. Mitra Wacana Media : Jakarta.