0% menganggap dokumen ini bermanfaat (0 suara)
339 tayangan158 halaman

Pertemuan 1: Konsep Struktur Data & Array

Dokumen tersebut membahas konsep struktur data array dan penggunaannya dalam pemrograman. Array adalah struktur data sederhana yang dapat menampung banyak nilai dengan tipe data yang sama sekaligus. Dokumen ini menjelaskan pendefinisian array satu dan dua dimensi beserta contoh penerapannya.

Diunggah oleh

Pruedence Satria
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
339 tayangan158 halaman

Pertemuan 1: Konsep Struktur Data & Array

Dokumen tersebut membahas konsep struktur data array dan penggunaannya dalam pemrograman. Array adalah struktur data sederhana yang dapat menampung banyak nilai dengan tipe data yang sama sekaligus. Dokumen ini menjelaskan pendefinisian array satu dan dua dimensi beserta contoh penerapannya.

Diunggah oleh

Pruedence Satria
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 158

Pertemuan 1

Konsep Struktur Data &


Array
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.
Pada garis besarnya, Data dapat dikategorikan menjadi :
A. Type Data
B. Struktur Data
Terdiri dari :
1. Struktur Data Sederhana
Misalnya Array dan Record

2. Struktur Data Majemuk


Terdiri dari :
a. Linier
Misalnya : Stack, Queue dan Linear Linked List.

b. Non Linier
Misalnya : Pohon (Tree), Pohon Biner (Binary
Tree), Pohon Cari Biner (Binary Search Tree),
General Tree serta Graph.
Array Dimensi 1 & 2
❖ Array / Larik : 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.

❖ Homogen : Adalah bahwa setiap elemen dari sebuah


Array tertentu haruslah mempunyai type data yang sama.
Definisi Array
❖ Sebuah Array dapat mempunyai elemen yang seluruhnya
berupa integer atau character atau String bahkan dapat
pula terjadi suatu Array mempunyai elemen berupa Array.

❖ Karakteristik Array :
1. Mempunyai batasan dari pemesanan alokasi memory
(Bersifat Statis)
2. Mempunyai Type Data Sama (Bersifat Homogen)
3. Dapat Diakses Secara Acak
Definisi Array (Lanjutan)

❖ 3 Hal yang harus diketahui dalam mendeklarasikan array :


a. Type data array
b. Nama variabel array
c. Subskrip / index array

❖ Jenis Array (yang akan dipelajari) adalah :


a. Array Dimensi Satu (One Dimensional Array)
b. Array Dimensi Dua (Two Dimensional Array)
c. Array Dimensi Tiga (Thee Dimensional Array)
Apa itu Array dan mengapa harus
menggunakannya?
Array pada dasarnya adalah struktur data (Data Structures) yang dapat
menampung lebih dari satu nilai pada satu waktu. Array adalah kumpulan atau
rangkaian elemen yang berurutan dan memiliki jenis yang sama. Array dapat
melakukan loop dengan mudah dan mengambil nilai yang diperlukan hanya
dengan menentukan nomor indeks. Array juga bisa berubah (berubah), oleh
karena itu, kita dapat melakukan berbagai manipulasi sesuai kebutuhan.

Dengan menggunakan array pada Python maka kita dapat menghemat banyak
waktu. Seperti yang disebutkan sebelumnya, array membantu kita mengurangi
ukuran keseluruhan kode yang kita buat, sementara Python membantu kita
menghilangkan sintaks yang bermasalah, tidak seperti bahasa lain. Misalnya:
Jika kita ingin menyimpan bilangan bulat dari 1100, kita tidak akan dapat
mengingat 100 nama variabel secara eksplisit, oleh karena itu, kita dapat
menyimpannya dengan mudah menggunakan Array.
Apa Perbedaan Array Dengan List?

• Apabila Array diartikan sebagai struktur data yang dapat menampung


lebih dari satu nilai dalam satu waktu, lalu apa perbedaannya dengan
list? Dan bagaimana hubungannya dengan data structures lain
seperti series dan data frame?

• Pada dasarnya, array mirip seperti list namun tidak sepenuhnya


sama. Ada beberapa kesamaan seperti sama-sama menampung
lebih dari satu nilai dalam satu waktu, sama-sama dapat diiterasi
dan diindeks. Perbedaan antara List dan array adalah fungsi yang
dapat dilakukan padanya seperti misalnya ketika kita ingin membagi
array dengan suatu nilai (misal, 2), hasilnya akan dicetak sesuai
permintaan tetapi dalam kasus list, python akan menampilkan pesan
error.
Metode Array yang terdapat pada Python
Method Deskripsi

append() Menambahkan elemen di akhir list

clear() Menghapus semua elemen dari list

copy() Mengembalikan salinan list

Mengembalikan jumlah elemen dengan nilai yang


count()
ditentukan

Tambahkan elemen list (atau iterable), ke akhir list


extend()
saat ini

Mengembalikan indeks elemen pertama dengan nilai


index()
yang ditentukan

insert() Menambahkan elemen pada posisi yang ditentukan

pop() Menghapus elemen pada posisi yang ditentukan

remove() Menghapus item dengan nilai yang ditentukan

reverse() Membalik urutan list

sort() Mengurutkan list


Array Dimensi Satu
1. ARRAY DIMENSI SATU (One Dimensional Array)

Dapat disebut juga dengan istilah vektor yang menggambarkan


data dalam suatu urutan

Deklarasi : Nama_Array [jumlah_elemen];


Misalnya : A[5];

Penggambaran secara Logika :


Elemen Array

A[1] A[2] A[3] A[4] A[5]


0 1 2 3 4

Subscript / Index
Nomor indeks array di mulai dari 0
Array Dimensi Satu (Lanjutan)
Array Dimensi Satu (Lanjutan)
Rumus untuk menentukan jumlah elemen dalam Array :

n  = Perkalian dari elemen sebelumnya


 (Elemen Array) (untuk array dimensi dua & tiga)
i=1

Contoh :
Suatu Array A dideklarasikan sbb :
A[10]; maka jumlah elemen Array dimensi satu tersebut
adalah = 10
PEMETAAN (MAPPING)
ARRAY DIMENSI SATU KE STORAGE

Rumus : @A[i] = B + (i – 1) * L
Dimana : @A[i] : Posisi Array yg dicari
B : Posisi awal index di memory komputer
i : Subkrip atau indeks array yg dicari
L : Ukuran / Besar memory suatu type data
Contoh :
Suatu Array A dideklarasikan sebagai berikut :
int A[5]; dengan alamat awal index berada di 0011 (H) dan
ukuran memory type data integer = 2
Tentukan berapa alamat array A[3] ?
PEMETAAN (MAPPING) ARRAY DIMENSI SATU KE
STORAGE (Lanjutan)

Rumus : @A[i] = B + (i – 1) * L
Diketahui : Penyelesaian :
@A[i] = A[3] A[3] = 0011(H) + (3 – 1) * 2
B = 0011 (H) = 0011(H) + 4 (D)
i = 3 = 0011(H) + 4 (H)
L = 2
= 0015(H) 4 Desimal = 4 Hexa

0 1 2 3 4
A[1] A[2] A[3] A[4] A[5]
0011 0013 0015 0017 0019
KONVERSI BILANGAN
1. Decimal adalah bilangan berbasis sepuluh yang
terdiridari 0, 1, 2, 3, 4, 5, 6, 7, 8, dan 9
2. 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 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.


Array Dimensi Dua
2. ARRAY DIMENSI DUA (Two Dimensional Array)
Sering digunakan dalam menterjemahkan matriks
pada pemrograman.
Deklarasi : Nama_Array [jumlah elemen baris] [jumlah
elemen kolom];
Misalnya : A[3][2];

1
0
Penggambaran secara Logika :
0
1
2
Array Dimensi Dua (Lanjutan)

Menentukan jumlah elemen dalam Array dimensi dua:

n  = Perkalian dari elemen sebelumnya


 (Elemen array) (untuk array dimensi dua & tiga)
i=1

Contoh :
Suatu Array X dideklarasikan sbb :
X[4][3];
maka jumlah elemen Array dimensi dua tersebut adalah :

(4) * (3) = 12
PEMETAAN (MAPPING)
ARRAY DIMENSI DUA KE STORAGE
Terbagi Dua cara pandang (representasi) yang berbeda :
1. Secara Kolom Per Kolom (Coloumn Major Order/CMO)

@M[i][j] = M[0][0] + {(j - 1) * K + (i - 1)} * L

2. Secara Baris Per Baris (Row Major Order / RMO)

@M[i][j] = M[0][0] + {(i - 1) * N + (j - 1)} * L

Keterangan :
@M[i][j] = Posisi Array yg dicari, M[0][0] = Posisi alamat awal index
array,i = Baris, j = kolom, L = Ukuran memory type data
K = Banyaknya elemen per kolom, N = Banyaknya elemen per baris
Penggambaran secara logika
0 1

Misal : M[3][2]; 0
(Array dengan 3 Baris & 2 Kolom) 1
2

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 baris = 2

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


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 ?
0 1 2 index

0 0011(H)
1
2
?
3

index
Contoh Pemetaan (Lanjutan)

Penyelesaian :

Secara Baris Per Baris (Row Major Oder / RMO)


@M[i][j] = @M[0][0] + {(i - 1) * N + (j - 1)} * L
X[3][2] = 0011(H) + {(3 – 1) * 3 + (2 – 1)} * 4
= 0011(H) + 28 (D) 1C (H)
= 0011(H) + 1C (H)

= 002D(H)
Contoh Pemetaan (Lanjutan)

Penyelesaian :

Secara Kolom Per Kolom (Coloumn Major Oder / CMO)


@M[i][j] = @M[0][0] + {(j - 1) * K + (i - 1)} * L
X[3][2] = 0011(H) + {(2 – 1) * 4 + (3 – 1)} * 4
= 0011(H) + 24 (D) 18 (H)
= 0011(H) + 18 (H)

= 0029(H)
Contoh Program Array Dua Dimensi

https://www.online-python.com/
Latihan
1. Suatu array A dideklarasikan sbb :
A[50] dengan alamat awal berada di 0011(H).
Tentukan berapa alamat array A[20] dan A[40]
dengan tipe data int?

2. Suatu array X dideklarasikan sbb :


X[4][5] dengan alamat awal berada pada
0011(H). Tentukan berapa alamat array X[4][3],
berdasarkan cara pandang baris dan kolom,
Pertemuan 2

SISTEM BILANGAN
I. Konsep Dasar Sistem
Bilangan
• Sistem bilangan adalah suatu cara untuk mewakilibesaran 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 darijumlah nilai bilangan yang dipergunakan.
Konsep Dasar Sistem Bilangan

(Lanjutan)

Sistem bilangan yang sering digunakan adalah:


Sistem bilangan desimal
Sistem bilangan biner
Sistem bilangan oktal
Sistem bilangan hexadesimal
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:

A x 10n
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
Sistem Bilangan Desimal

(Lanjutan)

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:

4 x 103 = 4000 7 x 102 = 700


3 x 102 = 300 6 x 101 = 60
5 x 101 = 50 2 x 100 =
2 x 100 = 2+ 1 x 10-1 = 0,1
4352 5 x 10-2 = 0,05 +
762,15
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:
A x 2n

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
A8 atau A(O). Dalam hal ini yang dituliskan adalah A8
Dituliskan: A x 8n

Contoh penulisan: 3478


4. Sistem Bilangan Hexadesimal

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:
A x 16n

Contoh penulisan: A7816


II. 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.

1. Byte

Byte merupakan satuan yang digunakan untuk


menyatakan sebuah karakter pada sistem ASCII atau
EBCDIC
1 byte = 8 bit
Satuan Data (Lanjutan)

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
Satuan Data (Lanjutan)

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
III. 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
Sistem Pengkodean

(Lanjutan)

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.
BCD 4 Bit Digit Desimal BCD 4 Bit Digit Desimal
0000 0 0101 5
0001 1 0110 6
0010 2 0111 7
0011 3 1000 8
0100 4 1001 9
Sistem Pengkodean

(Lanjutan)

2. EBCDIC (Extended Binary Coded Decimal InterchangeCode)


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
Sistem Pengkodean

(Lanjutan)
3. ASCII (American Standard Code for InformationInterchange)
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
Tabel EBCDIC 8 bit
Tabel ASCII 8 bit
Sistem Pengkodean
(Lanjutan)

4. Unico
de

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
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
Konversi dari Bilangan Desimal ke Biner

(Lanjutan)
89
2:
44 sisa 1 Dituliskan dari bawah
2: ke atas: 1011001
22 sisa 0 Karena penulisan
2: dengan 8 bit, maka
11 sisa 0 8910 = 0101 10012
2:
5 sisa 1
2:
2 sisa 1
2:
1 sisa 0
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
Konversi dari Bilangan Desimal ke Oktal

(Lanjutan)

147
8:
18 sisa 3
8:
2 sisa 2

• Dituliskan dari bawah ke atas: 223


• Maka hasilnya menjadi 14710 = 2238
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
Konversi dari Bilangan Desimal ke Hexadesimal

(Lanjutan)

123
16 :
sisa 11

• 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

1101012

1 x 20 = 1 Maka hasil di samping


0 x 21 = 0 dituliskan:
1 x 22 = 4 11 01012 = 5310
0 x 23 = 0
1 x 24 = 16
1 x 25 = 32 +
53
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
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

3718 Maka hasil disamping


dituliskan:
1 x 80 = 1
3718 = 24910
7 x 81 = 56
3 x 82 = 192 +
249
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
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

Maka hasil disamping


8F16 dituliskan:
F x 160 = 15
8F16 = 14310
8 x 161 = 128 +
143
Konversi dari Bilangan Hexadesimal keBiner
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
Hexa 8 F
Biner 1000 1111
10 001 111
Oktal 2 1 7
Maka dituliskan menjadi 8F16 = 2178
LATIHAN

Dosen diharapkan memberikan contoh


danlatihan konversi bilangan

dengan tipe data float?


Pertemuan 3

ARRAY
DIMENSI BANYAK
ARRAY DIMENSI TIGA
(Three Dimensional Array)
Digunakan untuk mengelola data dalam bentuk 3 dimensi
atau tiga sisi.
Deklarasi :
Nama_Array[index1] [ndex2] [index3];
Misal : A [3][4][2];

Penggambaran secara Logika :

1
1
2
0
0 1 2 3
Menentukan jumlah elemen dalam Array dimensi 3 :

n  = Perkalian dari statemen sebelumnya


 (index array)
i=1

Contoh :
Suatu Array X dideklarasikan sbb :
A [3][4][2]; maka jumlah elemen Array dimensi tiga
tersebut adalah :

(3) * (4) * (2) = 24


PEMETAAN (MAPPING)
ARRAY DIMENSI TIGA KE STORAGE

Rumus :
@M[m][n][p] = M[0][0][0] + {((m-1) *(jum.elemen2 *
jum.elemen3)) + ((n-1)*(jum.elemen 3)) +
((p-1)}* L

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] ?
Contoh Pemetaan :
Penyelesaian :
1.Tentukan jumlah elemen array A [2][4][3]
= (2) * (4) * (3) = 24

2.@M[m][n][p] = M[0][0][0] + {((m-1) *(jum.elemen2 *


jum.elemen3)) + ((n-1)*(jum.elemen
3)) + ((p-1)}* L

A[2][3][2] = 0011(H) + {((2–1) * 4 * 3) + ((3-1) * 3) +


(2-1)} * 2
= 0011(H) + {12 + 6 + 1 } * 2
= 0011(H) + 38 (D) 26 (H)
= 0011(H) + 26 (H)
= 0037(H)
Contoh Program Array
Dimensi 3

Buatlah program array multi dimensi dengan Python


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

N
 I = N(N+1) / 2
I=1
Contoh Tringular Array

Gambar (a) Upper Triangular Array


(b) Lower Triangular Array
Tringular Array
(Lanjutan)
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 :
10 20 30 5 10 15
0 40 50 0 20 25 Dan lain-lain
0 0 60 0 0 30
Tringular Array
(Lanjutan)

Suatu Array Upper Tringular dan Array Lower


Tringular dapat dengan order yang sama, dapat
disimpan sebagai suatu array dengan order yang
berbeda, Contohnya :
SPARSE ARRAY (ARRAY
JARANG)
Suatu Array yang sangat banyak elemen nol-nya,
contohnya adalah Array A pada Gambar berikut :
Latihan
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]?
Pertemuan 4

LINKED LIST
BAGAIMANA LINKED LIST MENYIMPAN DATA
Linked List, di sisi lain, berbeda dengan array. Linked List,
tidak menyimpan data di lokasi memori yang berdekatan.
Untuk setiap item di lokasi memori, Linked List
menyimpan nilai item dan referensi atau penunjuk ke item
berikutnya. Sepasang item Linked List dan referensi ke
item berikutnya merupakan sebuah node.
Misal, jika sebuah node terdiri dari 34 | 10, artinya nilai
node tersebut adalah 30, sedangkan item berikutnya
disimpan di lokasi memori "10". Untuk melintasi Linked
List, Anda hanya perlu mengetahui lokasi memori atau
referensi dari node pertama, node lainnya dapat dilintasi
secara berurutan menggunakan referensi ke elemen
berikutnya di setiap node.
Referensi ke node pertama juga dikenal sebagai node awal.
LINKED LIST vs ARRAY
• Linked List adalah struktur data dinamis yang berarti bahwa memori
yang dicadangkan untuk Linked List dapat ditingkatkan atau dikurangi
saat runtime. Tidak ada memori yang dialokasikan untuk struktur data
Linked List sebelumnya. Setiap kali item baru diperlukan untuk
ditambahkan ke link, memori untuk node baru dibuat pada saat
berjalan. Di sisi lain, dalam kasus larik, memori harus dialokasikan
terlebih dahulu untuk sejumlah item tertentu. Dalam kasus di mana
item yang cukup tidak tersedia untuk mengisi semua indeks larik, ruang
memori akan terbuang.
• Karena array membutuhkan lokasi memori yang berdekatan, sangat
sulit untuk menghapus atau menyisipkan item dalam array karena
lokasi memori dari sejumlah besar item harus diperbarui. Di sisi lain,
item daftar tertaut tidak disimpan di lokasi memori yang berdekatan,
oleh karena itu Anda dapat dengan mudah memperbarui Linked List .
• Karena fleksibilitasnya, Linked List lebih cocok untuk
mengimplementasikan struktur data seperti tumpukan, antrian, dan
daftar.
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 (Lanjutan)

Linked juga mengandung sebuah


variabel penunjuk List, yang biasanya diberi
nama START (AWAL), yang berisi alamat dari
simpul pertama dalam List.
Penyajian Linked List
dalam Memory
Penyajian Linked List dalam Memory
(Lanjutan)
SINGLE LINGKED LIST
Single linked list adalah yang paling sederhana dari semua
varian linked list. Setiap node dalam satu linked list berisi item
dan referensi ke item berikutnya dan hanya itu. Di bagian ini,
kita akan melihat cara membuat node untuk sinlgled linked
list bersama dengan fungsi untuk berbagai jenis penyisipan,
traversal, dan penghapusan.

Setiap node memiliki pointer yang menunjuk ke simpul


berikutnya sehingga terbentuk satu untaian, dengan demikian
hanya diperlukan sebuah variabel pointer. Susunan berupa
untaian semacam ini disebut Single Linked List. Biasanya
Linked List pada node terakhir akan menunjuk ke NULL,
dimana NULL memilik nilai khusus yang artinya tidak
menunjuk ke mana-mana.
Bentuk
Node Single
Linked List
• Single : field pointer-nya hanya satu dan satu arah,pada
akhir node pointernya menunjuk NULL

Menempati alamat memori tertentu

• Linked List : node-node tersebut saling terhubung satu


sama lain.
Single Linked List (Lanjutan)

Setiap node pada linked list mempunyai field yang


berisi pointer ke node berikutnya, dan juga memiliki
field yang berisi data.

Node terakhir akan menunjuk ke NULL yang akan


digunakan sebagai kondisi berhenti pada saat
pembacaan isi linked list.
Pembuata
n Single
Linked List
Deklarasi Node :
class Node:
def init (self, data):
self.item = data
self.ref = None

Keterangan:
• class node kami akan berisi dua variabel item dan ref.
Nilai item akan ditetapkan oleh nilai yang diteruskan
melalui konstruktor, sedangkan referensi awalnya akan
disetel ke nol.
Pembuatan Class pada Single
Linked List
Selanjutnya, kita perlu membuat class untuk linked list.
Kelas ini akan berisi metode untuk menyisipkan,
menghapus, melintasi, dan mengurutkan daftar. Awalnya,
kelas hanya akan berisi satu anggota start_node yang
akan menunjuk ke simpul awal ataupertama dari daftar.
Nilai start_node akan disetel ke nol menggunakan
konstruktor karena daftar tertaut akan kosong pada saat
pembuatan. Skrip berikut membuat kelas untuk daftar
tertaut.
class LinkedList:
def init (self):
self.start_node = None
Pembuatan Class pada Single Linked List
(lanjutan)

• Selanjutnya, kita perlu membuat class untuk linked list.


Kelas ini akan berisi metode untuk menyisipkan,
menghapus, melintasi, dan mengurutkan daftar.
Awalnya, kelas hanya akan berisi satu anggota
start_node yang akan menunjuk ke simpul awal atau
pertama dari daftar. Nilai start_node akan disetel ke
nol menggunakan konstruktor karena daftar tertaut
akan kosong pada saat pembuatan. Skrip berikut
membuat kelas untuk daftar tertaut.
class LinkedList:
def init (self):
self.start_node = None
Menambahkan item pada Singled Linked List
di Awal
• Tergantung pada lokasi tempat Anda ingin menyisipkan item, ada
berbagai cara untuk menyisipkan item dalam singled .

• Cara paling sederhana untuk menyisipkan item dalam satu linked


list adalah dengan menambahkan item di awal. Fungsi berikut
menyisipkan item di awal linked list. Tambahkan fungsi ini ke kelas
LinkedList yang kita buat sebelumnya.
Deklarasi Penambahan di Awal pada Single Linked List
def insert_at_start(self, data):
new_node = Node(data)
new_node.ref=self.start_node
self.start_node= new_node

Pada skrip di atas, kita membuat metode insert_at_start (),


metode tersebut menerima satu parameter, yang pada
dasarnya adalah nilai item yang ingin kita masukkan. Di
dalam metode ini, kita cukup membuat objek dari kelas Node
dan menetapkan referensinya ke start_node karena
start_node sebelumnya menyimpan simpul pertama, yang
setelah penyisipan simpul baru di awal akan menjadi simpul
kedua. Oleh karena itu, kami menambahkan referensi
start_node ke variabel ref dari node baru. Sekarang karena
new_node adalah node pertama, kami menetapkan nilai
variabel start_node ke new_node.
Menambahkan Item pada Singled Linked List
di Akhir
Memasukkan Item di Akhir Fungsi berikut digunakan
untuk menambahkan item di akhir linked list.

def insert_at_end(self, data):


new_node = Node(data)
if self.start_node is None:
self.start_node = new_node
return
n = self.start_node
while n.ref is not None:
n= n.ref
n.ref = new_node;
Menambahkan Item pada Singled Linked List di Akhir
Dalam skrip di atas, membuat fungsi insert_at_end (), yang
menyisipkan elemen di akhir linked list. Nilai item yang ingin
disisipkan sebagai argumen ke fungsi. Fungsinya terdiri dari
dua bagian. Pertama kita periksa apakah linked list kosong
atau tidak, jika linked list kosong, yang harus kita lakukan
hanyalah mengatur nilai variabel start_node ke objek
new_node. Di sisi lain, jika list sudah berisi beberapa node.
Inisialisasi variabel n dengan simpul awal. Kemudian
melakukan iterasi melalui semua node dalam list
menggunakan loop sementara. Perulangan berakhir saat
mencapai simpul terakhir. Kemudian menetapkan referensi
node terakhir ke new_node yang baru dibuat. Tambahkan
fungsi insert_at_end () ke kelas LinkedList.
Menambahkan Item Setelah Item Lainnya

Menambahkan item setelah item lain dalam singled


linked list. Untuk melakukannya, kita bisa menggunakan
fungsi insert_after_item () seperti yang didefinisikan di
bawah ini:
def insert_after_item(self, x, data):
n = self.start_node
print(n.ref)
while n is not None:
if n.item == x:
break
n = n.ref
if n is None:
print("item not in the list")
else:
new_node = Node(data)
new_node.ref = n.ref
n.ref = new_node
Menambahkan Item Setelah Item Lainnya
(Lanjutan)

Fungsi insert_after_item () menerima dua parameter: x


dan data. Parameter pertama adalah item setelah itu
Anda ingin memasukkan node baru sedangkan parameter
kedua berisi nilai untuk node baru. Mulai dengan
membuat variabel baru n dan menugaskan variabel
start_node untuk itu. Selanjutnya, menelusuri linked list
menggunakan while loop. Perulangan while dijalankan
hingga n menjadi None. Selama iterasi, memeriksa
apakah nilai yang disimpan di node saat ini sama dengan
nilai yang dilewatkan oleh parameter x. Jika perbandingan
mengembalikan nilai true, maka perulangan dihentikan.
Selanjutnya, jika item ditemukan, variabel n tidak akan
menjadi None. Referensi new_node disetel ke referensi
yang disimpan oleh n dan referensi n disetel ke
kode_baru. Tambahkan fungsi insert_after_item () ke
kelas LinkesList.
Menambahkan Item Setelah Item Lainnya
(Lanjutan)
def insert_before_item(self, x, data):
if self.start_node is None:
print("List has no element")
return
if x == self.start_node.item:
new_node = Node(data)
new_node.ref = self.start_node
self.start_node = new_node
return
n = self.start_node print(n.ref)
while n.ref is not None:
if n.ref.item == x:
break
n = n.ref
if n.ref is None:
print("item not in the list")
else:
new_node = Node(data)
new_node.ref = n.ref
n.ref = new_node
Menambahkan Linked List
Meskipun kita dapat menambahkan item satu per satu
menggunakan salah satu fungsi penyisipan. Mari buat fungsi
yang meminta pengguna untuk memasukkan jumlah elemen
di node dan kemudian elemen individu dan memasukkan
elemen itu ke dalam linked list.

def make_new_list(self):
nums = int(input("How many nodes do you want to create: "))
if nums == 0:
return
for i in range(nums):
value = int(input("Enter the value for the node:"))
self.insert_at_end(value)
Menambahkan Linked List
(Lanjutan)

Dalam skrip di atas, fungsi make_new_list () pertama-tama


meminta pengguna untuk jumlah item dalam daftar. Selanjutnya
menggunakan for-loop, pengguna diminta untuk memasukkan
nilai untuk setiap node, yang kemudian dimasukkan ke dalam
daftar tertaut menggunakan fungsi insert_at_end ().
Menghapus Element di
Awal
Menghapus elemen atau item dari awal daftar tertaut
sangatlah mudah. Kita harus mengatur referensi
start_node ke node kedua yang dapat kita lakukan hanya
dengan menetapkan nilai referensi dari node awal (yang
menunjuk ke node kedua) ke node awal seperti yang
ditunjukkan di bawah ini:

def delete_at_start(self):
if self.start_node is None:
print("The list has no element to delete")
return
self.start_node = self.start_node.ref

Pada skrip di atas, periksa dulu apakah daftar itu kosong


atau tidak. Jika daftar kosong tampilkan pesan bahwa
daftar tidak memiliki elemen untuk dihapus. Jika tidak,
tetapkan nilai start_node.ref ke start_node tersebut.
Start_node sekarang akan mengarah ke elemen kedua.
Tambahkan fungsi delete_at_start () ke class LinkedList.
Menghapus Element di
Akhir
Untuk menghapus elemen dari akhir daftar, kita hanya
perlu mengulang melalui linked list sampai elemen
terakhir kedua, dan kemudian perlu mengatur referensi
elemen terakhir kedua ke none, yang akan mengubah
elemen terakhir kedua menjadi elemen terakhir. Script
untuk fungsi delete_at_end adalah sebagai berikut:

def delete_at_end(self):
if self.start_node is None:
print("The list has no element to delete")
return
n = self.start_node
while n.ref.ref is not None:
n = n.ref
n.ref = None
Menghapus Berdasarkan Nilai Element

Untuk menghapus elemen berdasarkan nilai, pertama-tama


kita harus menemukan node yang berisi item dengan nilai yang
ditentukan dan kemudian menghapus node tersebut.
Menemukan item dengan nilai yang ditentukan sangat mirip
dengan pencarian item. Setelah item yang akan dihapus
ditemukan, referensi node sebelum item diatur ke node yang
ada setelah item dihapus.
def delete_element_by_value(self, x):
if self.start_node is None:
print("The list has no element to delete")
return
# Deleting first node
if self.start_node.item == x:
self.start_node = self.start_node.ref
return
n = self.start_node
while n.ref is not None
if n.ref.item == x:
break
n = n.ref
if n.ref is None:
print("item not found in the list")
else:
n.ref = n.ref.ref
Contoh program single linked list
Latihan
(Dikumpulkan pada pertemuan selanjutnya)

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
Pertemuan 5
LINKED LIST
LANJUTAN
Doubly Linked List
Dalam single linked list, setiap node dari list memiliki dua
komponen, nilai aktual dari node dan referensi ke node
berikutnya dalam linked list. Dalam doubly linked list ,
setiap node memiliki tiga komponen: nilai node, referensi
ke node sebelumnya, dan referensi ke node berikutnya.
Untuk node awal dari daftar tertaut ganda, referensi ke
node sebelumnya adalah null. Demikian pula, untuk node
terakhir dalam daftar tertaut ganda, referensi ke node
berikutnya adalah null.
Pembuatan Doubly Linked
List
Membuat class untuk node
class Node:
def init (self, data):
self.item =
data self.nref
= None
self.pref =
None

Pada kode di atas, membuat class Node dengan tiga


variabel anggota: item, nref, dan pref. Variabel item akan
menyimpan data aktual untuk node. Nref menyimpan
referensi ke node berikutnya, sementara pref menyimpan
referensi ke node sebelumnya dalam doubly linked list.
Selanjutnya, perlu membuat class DoublyLinkedList, yang
berisi fungsi terkait doubly linked list yang berbeda.
class
DoublyLinkedLi
st: def init (self):
self.start_node = None
Menambahkan Item pada Empty List
Memasukkan Item dalam Empty List Cara termudah untuk
menyisipkan item dalam doubly linked list adalah dengan
menyisipkan item ke dalam Empty List. Skrip berikut
menyisipkan elemen di awal doubly linked list:
def insert_in_emptylist(self,
data): if self.start_node is
None:
new_node = Node(data)
self.start_node = new_node
else:
print("list is not empty")
Definisikan metode insert_in_emptylist (). Metode pertama
memeriksa apakah variabel self.start_node adalah None atau
tidak. Jika variabelnya Tidak Ada, itu berarti list kosong.
Selanjutnya, node baru dibuat dan nilainya diinisialisasi oleh
nilai yang diteruskan sebagai parameter ke parameter data
dari fungsi insert_in_emptylist (). Terakhir, nilai variabel
self.start_node disetel ke node baru. Dalam kasus jika list tidak
kosong, pesan hanya ditampilkan list tidak kosong.
Menambahkan Item di Awal Doubly Linked List
Untuk memasukkan item di awal doubly linked list, pertama harus
memeriksa apakah list tersebut kosong atau tidak. Jika list kosong,
definisikan di insert_in_emptylist () untuk memasukkan elemen karena
dalam list kosong, elemen pertama selalu di awal. Jika tidak, jika daftarnya
tidak kosong, lakukan tiga operasi: Untuk node baru, referensi ke node
berikutnya akan disetel ke self.start_node. Untuk self.start_node referensi
ke node sebelumnya akan diatur ke node yang baru dimasukkan. Terakhir,
self.start_node akan menjadi node yang baru disisipkan.
def insert_at_start(self, data):
if self.start_node is None:
new_node = Node(data)
self.start_node =
new_node print("node
inserted")
return
new_node = Node(data)
new_node.nref =
self.start_node
self.start_node.pref =
new_node self.start_node =
new_node
Menambahkan Item di Akhir Doubly Linked List
Memasukkan elemen di akhir doubly linked list agak mirip dengan
memasukkan
elemen di awal. Pertama, periksa apakah list kosong. Jika list kosong maka
kita cukup menggunakan metode insert_in_emptylist () untuk memasukkan
elemen. Jika list sudah berisi beberapa elemen, kita akan menelusuri list
tersebut hingga referensi ke node berikutnya menjadi Tidak Ada. Ketika
referensi node berikutnya menjadi None itu berarti node saat ini adalah node
terakhir. Referensi sebelumnya untuk node baru diatur ke node terakhir, dan
referensi berikutnya untuk node terakhir diatur ke node yang baru
dimasukkan.
def insert_at_end(self,
data): if self.start_node is
None: new_node =
Node(data)
self.start_node =
new_node return
n=
self.start_node
while
n.nref is not
None: n = n.nref
new_node =
Node(data) n.nref =
new_node
new_node.pref = n
Menambahkan Item pada After Another Item

Untuk menyisipkan item setelah item lain, periksa apakah


list kosong atau tidak. Jika list kosong, tampilkan pesan "list
is empty". Jika tidak, lakukan iterasi melalui semua node
dalam doubly linked list. Jika ingin menyisipkan node pada
node setelahnya yang dituju tidak ditemukan, tampilkan
pesan bahwa item tersebut tidak ditemukan. Lain jika node
ditemukan, itu dipilih dan lakukan empat operasi: Tetapkan
referensi sebelumnya dari node yang baru dimasukkan ke
node yang dipilih. Tetapkan referensi berikutnya dari node
yang baru disisipkan ke referensi berikutnya dari yang
dipilih. Jika node yang dipilih bukan node terakhir, atur
referensi sebelumnya dari node berikutnya setelah node
yang dipilih ke node yang baru ditambahkan. Terakhir, atur
referensi berikutnya dari node yang dipilih ke node yang
baru dimasukkan.
def insert_after_item(self, x,
data): if self.start_node is
None:
print("List is
empty") return
else: n = self.start_node
While
n is not
None: if n.item
== x:
break
n=
n.nref if n
is None:
print("item not in the list")
else:
new_node =
Node(data)
new_node.pref = n
new_node.nref =
n.nref
if n.nref is not None: n.nref.prev =
new_node n.nref = new_node
Menambahkan Item Before Another Item

Untuk menyisipkan item sebelum item lain, pertama periksa


apakah list kosong atau tidak. Jika list kosong, tampilkan
pesan bahwa "list is empty". Jika tidak, lakukan iterasi
melalui semua node dalam doubly linked list. Jika node yang
sebelumnya ingin memasukkan node baru tidak ditemukan,
tampilkan pesan bahwa item tersebut tidak ditemukan. Jika
node ditemukan, itu dipilih dan lakukan empat operasi:
1. Tetapkan referensi berikutnya dari node yang baru dimasukkan ke
node yang dipilih.
2. Setel referensi sebelumnya dari node yang baru disisipkan
ke referensi sebelumnya dari yang dipilih.
3. Tetapkan referensi berikutnya dari node sebelumnya ke
node yang dipilih, ke node yang baru ditambahkan.
4. Terakhir, atur referensi sebelumnya dari node yang dipilih ke
node yang baru dimasukkan.
Menambahkan Item Before Another Item
(Lanjutan)
def insert_before_item(self, x, data):
if self.start_node is
None: print("List is
empty") return
else:
n=
self.start_node
while n is not
None: if n.item ==
x:
break
n = n.nref if n is None:
print("item not in the list")
else:
new_node =
Node(data)
new_node.nref = n
new_node.pref =
n.pref if n.pref is not
None: n.pref.nref =
new_node n.pref =
new_nodeZ
Menghapus Elemen dari Doubly Linked List
Menghapus Elemen di node awal
Cara termudah untuk menghapus elemen dari doubly linked list adalah
di awal. Untuk melakukannya, mengatur nilai dari simpul awal ke simpul
berikutnya dan kemudian mengatur referensi sebelumnya dari simpul
awal ke None. Namun sebelumnya lakukan dua pemeriksaan. Pertama,
apakah list kosong. Dan kemudian lihat apakah daftar tersebut hanya
berisi satu elemen atau tidak. Jika list hanya berisi satu elemen maka
kita dapat mengatur node awal ke None
def delete_at_start(self):
if self.start_node is None:
print("The list has no element to delete")
Return
if self.start_node.nref is
None: self.start_node =
None
return
self.start_node =
self.start_node.nref
self.start_prev = None;
Menghapus Elemen di Node Akhir
Periksa kembali apakah list kosong atau jika list berisi satu elemen. Jika list
berisi satu elemen, atur node awal ke None. Jika list memiliki lebih dari satu
elemen, ulangi list sampai node terakhir tercapai. Setelah mencapai node
terakhir, tetapkan referensi berikutnya dari node sebelumnya ke node
terakhir, ke None yang benar-benar menghapus node terakhir.
def delete_at_end(self):
if self.start_node is None:
print("The list has no element to delete")
Return
if self.start_node.nref is None:
self.start_node = None
Return
n = self.start_node
while n.nref is not
None: n = n.nref
n.pref.nref = None
Menghapus Elemen Berdasarkan Nilai
def
delete_element_by_value(self,
x): if self.start_node is None:
print("The list has no element to delete") return
Return n = self.start_node
if self.start_node.nref is while n.nref is not None:
None: if if n.item == x:
self.start_node.item == x: break;
self.start_node = None n = n.nref
if n.nref is not None:
else:
n.pref.nref
print("Item not found") = n.nref
Return n.nref.pref =
if self.start_node.item == x: n.pref else:
self.start_node = if n.item == x:
n.pref.nref =
self.start_node.nref
None else:
print("Element not found")
self.start_node.pref = None
Implementasi Doubly Linked List
class Node: cur.next = new_node
def init (self, new_node.prev = cur
data): self.data = new_node.next = None
data self.next = None def prepend(self, data):
self.prev = None if self.head is None:
class new_node = node(data) new_node.next
DoubleLinkedLIst: = self.head self.head =
def init (self): new_node else:
self.head = None new_node = Node(data)
self.head.prev = new_node
def append(self,
new_node.next = self.head
data): if self.head is self.head = new_node
None: new_node.prev = None
new_node = def print_list(self):
Node(data) cur =
new_node.prev = self.head
None self.head = while cur:
new_node else: print(cur.data) cur = cur.next
new_node = Node(data)
cur = self.head
Implementasi Doubly Linked List (Lanjutan)
d1 = int(input("Masukkan nilai
: ")) d2 = int(input("Masukkan
nilai : ")) d3 =
int(input("Masukkan nilai : "))
d4 = int(input("Masukkan nilai
: ")) d5 = int(input("Masukkan
nilai : ")) d6 =
int(input("Masukkan nilai : "))
e1 = int(input("Masukkan nilai
: ")) e2 = int(input("Masukkan
nilai : ")) list.append(d
list=DoubleLinkedLIst() 4)
list.append(d1) list.append(d
list.append(d 5)
2) list.append(d
6)
list.append(d list.prepend(e
1)
3)
Circular Linked List
Circular Linked List memiliki 2 pointer pada masing - masingnode, dan pada pointer previous pada node tail mengarah ke pointer next pada
node head
class Circular Linked List
Node: cur.next = new_node

def init (self, data): new_node.next = new_node else:


self.data = data while cur.next != self.head: cur =
self.next = None cur.next

class
CircularLinkedList: def
init (self):
self.head = None

def prepend(self,
data): new_node =
Node(data) cur =
self.head
new_node.next =
self.head if not
self.head:
self.head = new_node Node(data) cur =
self.head
def
append while cur.next !=
(self, self.head: cur =
data): if cur.next
not cur.next = new_node
self.hea new_node.next = self.head
d:
self.hea
d=
Node(d
ata)
self.head.next =
self.head

else:

new_nod
e=
def print_list(self):
cur = self.head
list = CircularLinkedList()
while cur:
print(cur.dat list.append(c
a) cur = 1)
list.append(c
cur.next 2)
list.prepend(f
if cur == self.head: 1)
break list.prepend(f
c1 = int(input("Masukkan Nilai 2)
: ")) c2 = int(input("Masukkan
list.print_list()
Nilai : ")) f1 =
int(input("Masukkan Nilai : "))
f2 = int(input("Masukkan Nilai :
"))
Multiple Linked List
Multiple Linked List adalah Linked List yang dimana pada setiapnode memiliki banyak pointer.
Pertemuan 6
STACK atau TUMPUKAN
STACK (TUMPUKAN)
Merupakan bentuk khusus dari Linier List yang pemasukan
dan penghapusan elemennya hanya dapat dilakukan pada
satu posisi, yaitu posisi akhir dari List (Top)

Prinsip Stack adalah LAST-IN-FIRST-OUT (LIFO).

Klik untuk
Ilustrasi Stack
OPERASI STACK
• EMPTY
Untuk memeriksa apakah stack kosong
• SIZE
mengembalikan nilai stack
• PUSH
Untuk menambahkan item pada posisi paling atas
• POP
Untuk menghapus item paling atas (TOP)
• TOP
mengembalikan posisi ke elemen paling atas
• NOEL
menampilkan jumalah elemen pada stack
Inisialisasi
stack = [ ] ==> Digunakan untuk membuat stack dengan nama "stack" yang
masih kosong
def push(value): ==> Digunakan untuk mendefinisikan sebuah fungsi “push”
yang diisi dengan nilai
stack.append(value) ==> Digunakan untuk menambahkan elemen pada
puncak stack dengan nilai dari fungsi “push”
def pop(): ==> Digunakan untuk mendefinisikan sebuah fungsi “pop”
stack.pop() ==> Digunakan untuk menghapus elemen dari puncak stack dari
fungsi “pop”
def noel(): ==> Digunakan untuk mendefinisikan sebuah fungsi “noel”
print len(stack) ==> Digunakan untuk menampilkan jumlah elemen di dalam
stack dengan memanggil nama “stack” yang telah dibuat
def top(): ==> Digunakan untuk mendefinisikan sebuah fungsi “top”
top = len(stack) – 1 ==> Sebagai perhitungan untuk mengetahui elemen
pada puncak stack
print stack[top] ==> Maka akan menampilkan elemen pada puncak stack
def isempty(): ==> Digunakan untuk mendefinisikan sebuah fungsi “isempty”
def tampilkan(stack): ==> Digunakan untuk mendefinisikan sebuah fungsi
“tampilkan”
.
Contoh stack pada python
Fungsi PUSH
• Digunakan untuk memasukkan elemen ke dalam stack
dan selalu menjadi elemen teratas stack
• Dengan cara :
1. Menambah satu (increment) nilai TOP of
STACK setiap ada penambahan elemen
stack selama stack masih belum penuh
2. Isikan nilai baru ke stack berdasarkan indeks TOP
of STACK setelah ditambah satu (diincrement)
Fungsi PUSH (Lanjutan)

4 MAX_STACK 4 MAX_STACK

3 3 PUSH ELEMEN A

2 2

1 1

0 0 A TOP = TOP + 1
= -1 + 1
TOP = -1 = 0
Fungsi POP
• Digunakan untuk menghapus elemen yang berada pada
posisi paling atas dari stack.
• Dengan cara :
1. Ambil dahulu nilai elemen teratas stack dengan
mengakses TOP of STACK.
2. Tampilkan nilai yang akan diambil.
3. Lakukan decrement nilai TOP of STACK
sehingga jumlah elemen stack berkurang 1
Fungsi POP (Lanjutan)

4 MAX_STACK 4 Data yg di POP = C

3 3
2 C TOP = 2 2
1 B 1 B TOP = TOP - 1
=2-1
0 A 0 A = 1
Latihan

Diketahui suatu stack dgn max_stack = 6


1. Bila dilakukan PUSH 3 elemen kedalam stack,
kemudian di PUSH lagi 2 elemen dan di POP
3elemen. Maka dimana posisi Top of Stack ?
2. IsEmpty pada kondisi terakhir adalah ?
3. Dari kondisi diatas, Berapa elemen yg hrs di PUSH
untmencapai kondisi penuh Top of Stack =
max_stack ?
4. Berapa elemen yg hrs di POP unt mencapai
kondisiEmpty = True

Anda mungkin juga menyukai