Pertemuan 1: Konsep Struktur Data & Array
Pertemuan 1: Konsep Struktur Data & Array
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.
❖ 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)
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?
Subscript / Index
Nomor indeks array di mulai dari 0
Array Dimensi Satu (Lanjutan)
Array Dimensi Satu (Lanjutan)
Rumus untuk menentukan jumlah elemen dalam Array :
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
1
0
Penggambaran secara Logika :
0
1
2
Array Dimensi Dua (Lanjutan)
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)
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
0 0011(H)
1
2
?
3
index
Contoh Pemetaan (Lanjutan)
Penyelesaian :
= 002D(H)
Contoh Pemetaan (Lanjutan)
Penyelesaian :
= 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?
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)
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)
1. Byte
2. Kilobyte (KB)
Biasa digunakan untuk berkas gambar berukuran kecil
1 kilobyte = 1024 byte
3. Megabyte (MB)
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)
(Lanjutan)
(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
(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
(Lanjutan)
123
16 :
sisa 11
1101012
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];
1
1
2
0
0 1 2 3
Menentukan jumlah elemen dalam Array dimensi 3 :
Contoh :
Suatu Array X dideklarasikan sbb :
A [3][4][2]; maka jumlah elemen Array dimensi tiga
tersebut adalah :
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
N
I = N(N+1) / 2
I=1
Contoh Tringular Array
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.
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)
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)
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
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
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)
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)
3 3
2 C TOP = 2 2
1 B 1 B TOP = TOP - 1
=2-1
0 A 0 A = 1
Latihan