Modul Struktur Data Dan Algoritma
Modul Struktur Data Dan Algoritma
TI 2018
BAB I
PENDAHULUAN
A. Pengantar
Suatu sistem aplikasi pengolahan data dengan representasi data berbentuk matrik sparse.
Bagaimana struktur datanya? Suatu sistem mengintegrasikan beberapa sistem lainnya.
Bagaimana struktur datanya? Isu struktur data semakin penting pada saat: Ukuran data sangat
besar, data sangat komplek, kebutuhan akses data sangat cepat, adanya keterbatasan
sumberdaya. Struktur data lebih kongkret, merupakan teknik atau strategi untuk
mengimplementasikan sebuah ADT (ADT lebih merupakan deskripsi logika) Struktur data
merupakan cara membentuk, mengkonstruksi, mengaransemen, mengkomposisikan ataupun
mengorganisasikan data (ADT) ADT: stack, queue, priority queue, dictionary, sequence, set
Struktur Data: array, linked list, hash table (open, closed, circular hashing), trees (binary
search trees, heaps, AVL trees, 2-3 trees, tries, red/black trees, B-trees).
B. Deskripsi
Mata kuliah ini memberi pemahaman mengenai Konsep Struktur Data, Konsep Algoritma
Pemograman, Defenisi Algoritma, Tipe Data, Pseudo - Code , Sintak dalam Pemograman C++, Standard
I/O pemograman, Perintah Masukan, Perintah Keluaran, Mengakses Element Structure, Array dan
Structure, Nested Structure, Operator ‘*’ dan '&', Array Dimensi Satu, Array Dimensi Dua, Array Multi
Dimensi, Structure String, Prototype Konversi String, Passing Variable (by reference / by value), Return
Value/ Non Return Value, Insertion Sort, Bubble Sort, Selection Sort, Squencial Search Un-Order List,
Squencial Search Order, Binary Search, Linked List, Pointer-Based Linked List, Circular linked list,
Operasi dan aplikasi Stack, Operasi dan Aplikasi Queue dan Deque, Algoritma Push dan Pop, FIFO,
Terminologi Tree, Karakteristik Tree, Terminologi Graph, Traversal Graph.
D. Capaian Pembelajaran
Mahasiswa memahami dan menerapkan konsep pengorganisasian kumpulan data dan
algoritma pemrograman struktur data dalam pemrograman.
Mahasiswa memahami dan menjelaskan definisi struktur data dan algoritma pemograman.
Mahasiswa mengenal dan memahami Pemograman C++.
Mampu memahami, menjelaskan dan menerapkan definisi struktur, array dan pointer.
Mampu memahami, menjelaskan dan menerapkan sorting, branching, looping.
Mampu memahami, menjelaskan dan menerapkan function pada pemrograman.
Mampu memahami, menjelaskan dan menerapkan definisi stack dan queque.
Mampu memahami, menjelaskan dan menerapkan definisi single double linked list.
Mampu memahami, menjelaskan dan menerapkan definisi tree dan graph.
E. Proses Pembelajaran
Teori Dan Praktek, Tatap Muka, Infokus, White Board, Penghapus, Laptop
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
F. Penilaian
Kehadiran = 10%
Tugas/Quis = 20%
UTS = 30%
UAS = 40%
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
MODUL 1
KONSEP STRUKTUR DATA DAN ALGORITMA
A. Tujuan
Mahasiswa mampu memahami konsep struktur data, defenisi struktur data, defenisi algoritma,
mengenal C++, paradigm pemograman, implementasi pemograman, kerangka program C++, komentar,
identifier.
B. Uraian Materi
Materi 1 : Konsep Struktur Data
Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer agar bisa
dipakai. Struktur data adalah sebuah skema organisasi, seperti struktur dan array, yang diterapkan pada
data sehingga data dapat diinterprestasikan, sehingga operasi-operasi spesifik dapat dilaksanakan pada
data tersebut. Data adalah representasikan dari fakta dunia nyata.
Fakta atau keterangan tentang kenyataan yang disimpan, direkam atadirepresentasikan dalam bentuk
tulisan suara, gambar, atau symbol. Suatu struktur data mempunyai tiga bagian utama yaitu :
Himpunan struktur dari tempat penyimpanan atau storage.
Merupakan koleksi dari variable dan hubungan antara satu variable dengan variable yang lain.
Himpunan dari fungsi-fungsi dasar.
Dapat digunakan pada struktur tempat penyimpanan yang ada dan dapat digunakan pada setiap
bagian dari program
Himpunan dan algoritma digunakan untuk pengubahan dari struktur tempat penyimpanan.
Program adalah kompulan instruksi komputer, sedangkan metode dan tahapan sistematis dalam
program adalah algoritma. Program ini ditulis dengan menggunakan bahasa pemrograman,
disimpulkan program adalah suatu implementasi dari bahasa pemrograman.
• Data
Defenisi : fakta atau kenyataan sebuah objek
Pengertian : suatu nilai yang mengandung arti memiliki tipe konstanta atau variabel
• Algoritma
Algoritma adalah urutan aksi-aksi yang dinyatakan dengan jelas dan tidak rancu untuk memecahkan
suatu masalah dalam rentang waktu tertentu.
Algoritma dapat dituliskan dengan banyak cara, mulai dari menggunakan bahasa alami yang digunakan
sehari-hari, simbol grafik bagan alir, sampai menggunakan bahasa
pemograman seperti bahasa C atau C++.
• Variabel
Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam
proses program. Berbeda dengan konstanta yang nilainya selalu tetap, nilai dari suatu variable bisa
diubah-ubah sesuai kebutuhan. Untuk memperoleh nilai dari suatu variable digunakan pernyataan
penugasan (assignment statement), yang mempunyai sintaks sebagai berikut :
variable = ekspresi ;
Tipe data
Tipe data dapat dikelompokkan menjadi atas dua macam :
1. Tipe sederhana untuk menyimpan satu nilai dalam satu variabel
2. Tipe data terstruktur
• Definisi Program/Pemrograman
Adalah kumpulan instruksi-instruksi tersendiri yang biasanya disebut source code yang dibuat oleh
programmer (pembuat program)
Paradigma Pemrograman
1. Pemrograman Prosedural
- Berdasarkan urutan-urutan, sekuensial
- Program adalah suatu rangkaian prosedur untuk memanipulasi data. Prosedur merupakan
kumpulan instruksi yang dikerjakan secara berurutan.
2. Pemrograman Fungsional
- Berdasarkan teori fungsi matematika
- Fungsi merupakan dasar utama program.
3. Pemrograman Terstruktur
- Secara berurutan dan terstrukrtur.
- Program dapat dibagai-bagi menjadi prosedur dan fungsi.
Contoh: PASCAL dan C
4. Pemrograman Modular
- Pemrograman ini membentuk banyak modul.
- Modul merupakan kumpulan dari prosedur dan fungsi yang berdiri sendiri. Sebuah program dapat
merupakan kumpulan modul-modul.
Contoh: MODULA-2 atau ADA
5. Pemrograman Berorientasi Obyek
- Pemrograman berdasarkan prinsip obyek, dimana obyek memiliki
- data/variabel/property dan method/event/prosedur yang dapat dimanipulasi.
Contoh: C++, Object Pascal, dan Java.
6. Pemrograman Berorientasi Fungsi
Pemrograman ini berfokus pada suatu fungsi tertentu saja.
Contoh: SQL (Structured Query Language), HTML, XML dan lain-lain.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
7. Pemrograman Deklaratif
Pemrograman ini mendeskripsikan suatu masalah dengan pernyataan daripada memecahkan masalah
dengan implementasi algoritma.
Contoh: PROLOG
• Kriteria Algoritma Menurut Donald E. Knuth
1. Input: algoritma dapat memiliki nol atau lebih inputan dari luar.
2. Output: algoritma harus memiliki minimal satu buah output keluaran.
3. Definiteness (pasti): algoritma memiliki instruksi-instruksi yang jelas dan tidak ambigu.
4. Finiteness (ada batas): algoritma harus memiliki titik berhenti (stopping role).
5. Effectiveness (tepat dan efisien): algoritma sebisa mungkin harus dapat dilaksanakan dan efektif.
Contoh instruksi yang tidak efektif adalah: A = A + 0 atau A = A * 1
• Jenis Proses Algoritma:
1. Sequence Process: instruksi dikerjakan secara sekuensial, berurutan.
2. Selection Process: instruksi dikerjakan jika memenuhi kriteria tertentu
3. Iteration Process: instruksi dikerjakan selama memenuhi suatu kondisi tertentu.
4. Concurrent Process: beberapa instruksi dikerjakan secara bersama.
Contoh Algoritma
Algoritma menghitung luas persegi panjang:
1. Masukkan panjang (P)
2. Masukkan lebar (L)
3. L ← P * L
4. Tulis L
Definisi Pseudo-code
Kode atau tanda yang menyerupai (pseudo) atau merupakan pejelasan cara menyelesaikan suatu
masalah. Pseudo-code sering digunakan oleh manusia untuk menuliskan algoritma. Problem: mencari
bilangan terbesar dari dua bilangan yang diinputkan
Contoh Pseudo-code:
1. Masukkan bilangan pertama
2. Masukkan bilangan kedua
3. Jika bilangan pertama > bilangan kedua maka kerjakan langkah 4, jika tidak, kerjakan Langkah 5.
4. Tampilkan bilangan pertama
5. Tampilkan bilangan kedua
Contoh Algoritma
1. Masukkan bilangan pertama (a)
2. Masukkan bilangan kedua (b)
3. if a > b then kerjakan langkah 4
4. print a
5. print b
1. Mendefinisikan masalah
Tentukan masalahnya, apa saja yang harus dipecahkan dengan menggunakan komputer, dan apa
inputan serta outputnya.
2. Menemukan solusi
langkah berikutnya adalah menentukan solusi. Jika masalah terlalu kompleks, maka ada baiknya
masalah tersebut dipecah menjadi modul-modul kecil agar lebih mudah diselesaikan. Contohnya
masalah invers matriks, maka kita dapat membagi menjadi beberapa
modul:
- meminta masukkan berupa matriks bujur sangkar
- mencari invers matriks
- menampilkan hasil kepada pengguna
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
3. Memilih algoritma
Pilihlah algoritma yang benar-benar sesuai dan efisien untuk permasalahan tersebut
4. Menulis program
Pilihlah bahasa yang mudah dipelajari, mudah digunakan, dan lebih baik lagi jika sudah dikuasai,
memiliki tingkat kompatibilitas tinggi dengan perangkat keras dan platform lainnya.
5. Menguji program
silahkan uji program tersebut dengan segala macam kemungkinan yang ada, termasuk error-
handlingnya sehingga program tersebut akan benar-benar handal dan layak digunakan.
6. Menulis dokumentasi
Caranya adalah dengan menuliskan komentar-komentar kecil tentang apa maksud kode tersebut, untuk
apa, variabel apa saja yang digunakan, untuk apa, dan parameter-parameter yang ada pada suatu
prosedur dan fungsi.
7. Merawat program
Program yang sudah jadi perlu dirawat untuk mencegah munculnya bug yang sebelumnya tidak
terdeteksi. Atau mungkin juga pengguna membutuhkan fasilitas baru yang dulu tidak ada.
• Tanda { pada fungsi main() menyatakan awal eksekusi program. Adapun } pada fungsi main()
menyatakan akhir eksekusi program.
• Pemakaian fungsi cout dipakai untuk menampilkan text.
• Memakai tanda atau symbol <<, yang diketahui sebagai operator pemasukan (insertion operators).
Tanda tersebut mengatakan kepada kompiler agar segera menghasilkan output sesuai dengan input.
• ”Selamat menggunakan C++“ adalah suatu pernyataan yang diapit oleh tanda petik ganda.
• Setiap pernyataan harus diakhiri dengan tanda titik koma (;).
• return 0 maksudnya pada baris ini juga ada kode yang memerintahkan fungsi main kembali ke 0.
• Komentar merupakan bagian yang penting dalam program.
• Komentar tidak akan mempengaruhi terhadap jalannya program karena komentar tidak ikut
dieksekusi pada saat proses kompilasi.
Fungsi komentar antara lain:
1. Menjelaskan tujuan / fungsi program.
2. Memudahkan saat program dibuat atau direvisi.
3. Menjelaskan keterangan-keterangan lain tentang kegunaan sejumlah pernyataan dalam program.
Menggunakan tanda //
Pada C++ suatu komentar diawali dengan dua tanda garis miring (//). Semua tulisan yang terletak
sesudah tanda // hingga akhir baris dengan sendirinya akan diperlakukan sebagai keterangan.
Tanda ini digunakan untuk menuliskan komentar yang banyaknya hanya satu baris.
Menggunakan tanda /*.....*/
Tanda ini dapat digunakan untuk menuliskan komentar yang banyaknya satu baris atau lebih.
Bentuk ini bermanfaat untuk mengabaikan sejumlah pernyataan yang telah dibuat oleh
pemrograman karena suatu alasan misalnya sedang melacak kesalahan.
Identifier (pengenalan) adalah suatu nama yang biasa dipakai dalam pemrograman untuk menyatakan
variabel, konstanta bernama, tipe data, fungsi, label, objek. Indentifikasi dilakukan untuk
mempermudah proses penanganan data atau nilai.
Contoh identifier: int bilangan_bulat, long X2, int A[5], const int MAX=5, int A=10, B=15, C=25;
C. Rangkuman
• Pemakaian struktur data yang tepat di dalam proses pemrograman akan menghasilkan algoritma
yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efisien dan
sederhana.
• Secara umum struktur data terdiri dari beberapa bagian seperti himpunan nilai-nilai data dan
sejumlah operasi dasar yang bekerja pada data tersebut menurut suatu algoritma tertentu.
D. Tugas
1. Membuat resume dari materi yang telah diterangkan.
2. Tanya jawab dan diberikan latihan soal terhadap individu.
E. Test
1. Jelaskan konsep struktur data.
2. Jelaskan defenisi algoritma.
3. Jelaskan implementasi struktur data dan algoritma.
4. Jelaskan kerangka C++.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
MODUL 2
Tipe Data, Operator C++, Struktur C++
A. Tujuan
Mahasiswa mampu mengenal tipe bilangan bulat (integer), tipe bilangan desimal (floating-point), tipe
logika (boolean), tipe karakter / string, tipe data bentukan, struktur, enumerasi, operator assignment,
operator unary, operator binary, operator ternary, struktur Bahasa C++, include, fungsi main(), tanda
semicolon, komentar, mengenal input/output
B. Uraian Materi
Materi 1 : Tipe Data
Tipe data merupakan bagian program yang paling penting karena tipe data mempengaruhi setiap
instruksi yang akan dilaksanakan oleh computer. Misalnya saja 5 dibagi 2 bisa saja menghasilkan hasil
yang berbeda tergantung tipe datanya.
Jika 5 dan 2 bertipe integer maka akan menghasilkan nilai 2, namun jika keduanya bertipe float maka
akan menghasilkan nilai 2,5.Tipe data berfungsi untuk merepresentasikan jenis dari sebuah nilai yang
terdapat dalam program.
Dalam C++ terdapat beberapa tipe data dasar yang telah didefinisikan yaitu:
1. Tipe bilangan bulat (integer)
Digunakan untuk data-data angka yang tidak mengandung angka dibelakang koma.
Misalnya 3, 21, 78.
contoh:
#include <iostream.h>
int main()
{
int x; //mendeklarasikan variabel x dengn tipe data int
x=3; //melakukan assigment terhadap variabel x
cout <<“Nilai x adalah “<<x;
return 0;
}
2. Tipe Bilangan Desimal (floating-point)
Tipe yang mempresentasikan data-data bilangan yang mengandung angka dibelakang koma, misalnya
3.16, 21.5, dll.
Contoh
Tipe data Float = 32, double = 64, dan long double = 80.
#include <iostream.h>
int main()
{
double y;
y = 27.55; //melakukan assigment terhadap variabel y
cout <<“Nilai y adalah “<<y;
return 0;
}
3. Tipe Logika (boolean)
Tipe ini merepresentasikan data-data yang hanya mengandung dua buah nilai, yaitu nilai logika
(boolean) yang terdiri dari nilai benar (direpresentasikan dengan nilai 1) dan nilai salah
(direpresentasikan dengan nilai 0).
4. Tipe Karakter / String
Tipe ini merepresentasikan data-data yang berupa karakter, dan dinyatakan dengan tipe char,
sedangkan untuk string dinyatakan dengan pointer dari tipe char yaitu char*.
Contoh :
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
#include <iostream.h>
int main()
{
char Karakter ='A';
char*nama ="Susi Susanti";
char Jurusan[15]="INFORMATIKA";
cout <<Karakter<<endl;
cout <<nama<<endl;
cout <<Jurusan<<endl;
return 0;
}
5. Tipe data Bentukan
Tipe data yang dibuat sendiri sesuai kebutuhan dalam program yang akan dimuat.
a. Struktur
Struktur adlah tipe data bentukan yang menyimpan lebih dari satu variabel bertipe sama maupun
berbeda.
Deklarasinya:
Struct nama_struktur
{
Tipe_data variabel1;
Tipe_data variabel2;
......
};
b. Enumerasi
Tipe Enumerasi adalah tipe data yang nilainya terbatas pada nilai-nilai yang telah didefinisikan saja.
Tipe enumerasi digunakan untuk membentuk tipe data yang nilainya pasti.
Deklarasinya:
enum nama_tipe{nilai1, nilai2,....};
Contoh pendefinisian tipe enumerasi:
enum JENIS_KELAMIN{Pria, Wanita};
enum HARI{Minggu, Senin, Selasa, Rabu, Kamis, Jumat, Sabtu};
3. Operator Binary
Operator yang digunakan dalam operasi yang melibatkan dua buah operand.
Operator Binary dikelompokan menjadi 4 jenis yaitu:
a. Operator Aritmatika
b. Operator Logika
c. Operator Relasional
d. Operator Bitwise
a. Operator Aritmatika
Operator yang digunakan untuk melakukan operasi-operasi aritmatika seperti penjumlahan,
pengurangan, dan sebagainya.
Operator Keterangan
* Perkalian
/ Pembagian
% Modulus atau sisa bagi
+ Penjumlahan
- Pengurangan
b. Operator Logika
Operator yang digunakan untuk melakukan operasi dimana nilai yang dihasilkan dari operasi tersebut
hanya bernilai benar (true / 1) atau salah (false / 0).
Nilai ini biasa disebut dengan boolean.
1. Operator AND (&&)
menghasilkan nilai 1 (benar) jika semua operand-nya bernilai benar, jika tidak maka operasi
tersebut akan menghasikan nilai 0 (salah).
2. Operator OR (||)
menghasilkan nilai 0 (salah) jika semua operand-nya bernilai salah, namun jika tidak maka
operasi tersebut akan menghasilkan nilai 1 (benar).
3. Operator NOT (!)
Nilai yang dihasilkan oleh nilai NOT adalah kebalikan dari nilai yang dikandung di dalamnya.
Jika nilai awal 1 (benar) maka nilai operasi NOT menjadi 0 (salah).
c. Operator Relasional
Operator yang digunakan untuk menentukan relasi atau hubungan dari dua buah operand. Operator ini
banyak digunakan untuk melakukan pengecekan sebuah ekspresi (kondisi) dalam struktur
percabangan.
Operator Jenis Operasi
> Lebih besar
< Lebih kecil
>= Lebih besar atau sama dengan
<= Lebih kecil atau sama dengan
== Sama dengan
!= Tidak sama dengan
d. Operator Bitwise
Operator yang digunakan untuk melakukan operasi-operasi yang berhubungan dengan pemanipulasian
bit.
Operator Keterangan
<< Shift left
>> shift right
&& operasi bit AND
| | Operasi bit OR
^ Operasi bit XOR
~ Operasi bit NOT
4. Operator Ternary
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
Operator yang digunakan dalam operasi yang melibatkan tiga buah operand.
Bentuk umum:
Ekspresi1? Ekspresi2: Ekspresi3;
Jika ekspresi1 bernilai benar, maka program akan mengeksekusi ekspresi2. Sedangkan jika ekspresi1
salah maka yang dieksekusi adalah ekspresi3.
Materi 3 : Struktur Bahasa C++
1. include
Salah satu Pengarah Preprosesor (preprocessor directive) yang tersedia pada C++.
Bentuk umumnya :
# include <nama_file>
tidak diakhiri dengan tanda semicolon (;), karena bentuk tersebut bukanlah suatu bentuk pernyataan,
tetapi merupakan prepocessor directive.
2.Fungsi main ()
Program C++ terdiri dari satu atau lebih fungsi, dan di antara salah satunya harus ada fungsi main dan
hanya boleh ada satu main pada tiap program C++.
3. Komentar
Komentar tidak pernah dicompile oleh compiler. Dalam C++ terdapat 2 jenis komentar, yaitu:
Jenis 1 : /* Komentar anda diletakkan di dalam ini
Bisa mengapit lebih dari satu baris */
Jenis 2 : // Komentar anda diletakkan disini ( hanya bisa sebaris )
4.Tanda Semicolon
Tanda semicolon “ ; ” digunakan untuk mengakhiri sebuah pernyataan. Setiap pernyataan harus diakhiri
dengan sebuah tanda semicolon.
5. Mengenal Input/Output
Pernyataan cout (dibaca C out) merupakan sebuah objek di dalam C++, yang digunakan untuk
mengarahkan data ke dalam standar output (cetak pada layar). Sedangkan untuk menginputkan data,
dapat digunakan cin (dibaca C in).
D. Rangkuman
• Tipe data : bilangan bulat (integer), bilangan desimal (floating-point), logika (boolean), karakter /
string
• Operator C++ : operator assignment, operator unary, operator binary, operator ternary
D. Tugas
1. Membuat resume dari materi yang telah diterangkan.
2. Tanya jawab dan diberikan latihan soal terhadap individu.
E. Test
1. Buatkan contoh bilangan bulat (integer) dan bilangan desimal (floating-point).
2. Buatkan contoh penggunaan operator assignment dan operator binary.
3. Jelaskan tipe data bentukan.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
MODUL 3
A. Tujuan
Mahasiswa mampu memahami struktur, mendeklarasikan struktur, defenisi struktur, bentuk umum
sttruktur, penjelasan array, defenisi array, karakteristik array, penjelasan array satu dimensi, bentuk
umum array satu dimensi, inisialisasi array satu dimensi, penjelasan array dua dimensi, bentuk umum
array dua dimensi, inisialisasi array dua dimensi, penjelasan array tiga dimensi, bentuk umum array tiga
dimensi, inisialisasi array tiga dimensi, deklarasi pointer.
B. Uraian Materi
Materi 1 : Struktur
Struktur adalah koleksi dari variabel yang dinyatakan dengan sebuah nama, dengan sifat setiap variabel
dapat memiliki tipe yang berlainan. Struktur biasa dipakai untuk mengelompokkan beberapa informasi
yang berkaitan menjadi sebuah satu kesatuan.
Mendeklarasikan Struktur
Contoh pendefinisian tipe struktur adalah sebagai berikut:
struct data_tanggal
{
int tanggal;
int bulan;
int tahun;
};
yang mendefinisikan tipe struktur bernama data_tanggal, yang terdiri dari tiga buah elemen (field)
berupa : tanggal, bulan dan tahun.
Pendefnisian dan pendeklarasian struktur dapat juga ditulis sebagai berikut:
struct data_tanggal
{
int tanggal;
int bulan;
int tahun;
} tgl_lahir;
Bentuk umum dalam mendefinisikan dan mendeklarasikan struktur adalah sebagai berikut :
struct nama_tipe_struktur
{
tipe field1;
tipe field2;
.
.
tipe fieldn;
}variabel_struktur1, ... , variabel_strukturM;
Masing-masing tipe dari elemen struktur dapat berlainan. Adapun variabel_struktur1 sampai dengan
variabel_strukturM menyatakan bahwa variabel struktur yang dideklarasikan bisa lebih dari satu. Jika
ada lebih dari satu variabel, antara variable struktur dipisahkan dengan tanda koma.
Mengakses Elemen Struktur
Elemen dari struktur dapat diakses dengan menggunakan bentuk variabel_struktur.nama_field
Antara variabel_struktur dan nama_field dipisahkan dengan operator titik (disebut operator anggota
struktur). Contoh berikut merupakan instruksi untuk mengisikan data pada field tanggal
tgl_lahir.tanggal = 30;
Materi 2 : Array
Pengertian array
• Variabel larik disebut array adalah tipe terstruktur yang terdiri dari sejumlah komponen-
komponen yang sama.
• Sekelompok data yang sejenis yang disimpan didalam memori secara berurutan
• Jumlah komponen : tetap
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
Array Satu dimensi tidak lain adalah kumpulan elemen-elemen identik yang tersusun dalam satu baris.
Elemen-elemen tersebut memiliki tipe data yang sama, tetapi isi dari elemen tersebut dapat berbeda.
petunjuk indeks hanya satu.
Bentuk umum :
Keterangan :
Type Data : untuk menyatakan type data yang digunakan
Index-1: menyatakan jumlah baris
Index-2 : menyatakan jumlah isi dan baris
Index-3 : menyatakan kolom
Materi 3 : Pointer
Misalnya kita ingin membuat beberapa penunjuk ke blok penyimpan yang berisi integer.
Deklarasi pada C adalah:
int *IntegerPointer;
Tanda asterik (*) yang berada sebelum nama variable IntegerPointer menandakan ‘pointer pada suatu
int’. Jadi deklarasi diatas berarti ‘definisikan sebuah tipe yang terdiri dari pointer bertipe integer yang
bernama IntegerPointer’.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
MODUL 4
PENGURUTAN DATA (SORTING), PENCARIAN (SEARCHING)
A. Tujuan
Mahasiswa mampu memahami defensi pengurutan data (sorting), urutan proses pengurutan, kategori
pemilihan algoritma, deklarasi larik, Metode Penyisipan Langsung (Straight Insertion Sort), Metode
Penyisipan Langsung (Straight Insertion Sort), Metode Penyisipan Biner (Binary Insertion Sort), Metode
Seleksi (Selection Sort), Metode Gelembung (Bubble sort), Metode Shell (Shell Sort), Metode Quick (Quick
Sort), Metode Quick Sort Non Rekursif, Metode Quick Sort Rekursif, Metode Penggabungan (Merge Sort).
B. Uraian Materi
Materi 1 : Defenisi Pengurutan data (sorting)
Pengurutan data (sorting) didefinisikan sebagai suatu proses untuk menyusun kembali humpunan
obyek menggunakan aturan tertentu.
Menurut Microsoft Book-shelf, definisi algoritma pengurutan adalah algoritma untuk meletakkan
kumpulan elemen data ke dalam urutan tertentu berdasarkan satu atau beberapa kunci dalam tiap-tiap
elemen.
Ada dua macam urutan yang biasa digunakan dalam proses pengurutan yaitu
• urut naik (ascending) yaitu dari data yang mempunyai nilai paling kecil sampai paling besar.
• urut turun (descending) yaitu data yang mempunyai nilai paling besar sampai paling kecil.
Contoh : data bilangan 5, 2, 6 dan 4 dapat diurutkan naik menjadi 2, 4, 5, 6 atau diurutkan turun menjadi
6, 5, 4, 2. Pada data yang bertipe char, nilai data dikatakan lebih kecil atau lebih besar dari yang lain
didasarkan pada urutan relatif (collating sequence) seperti dinyatakan dalam tabel ASCII.
Keuntungan dari data yang sudah dalam keadaan terurutkan antara lain :
• Data mudah dicari (misalnya dalam buku telepon atau kamus bahasa), mudah untuk dibetulkan,
dihapus, disisipi atau digabungkan. Dalam keadaan terurutkan, mudah melakukan pengecekan
apakah ada data yang hilang.
• Melakukan kompilasi program komputer jika tabel-tabel simbol harus dibentuk.
• Mempercepat proses pencarian data yang harus dilakukan berulang kali.
Beberapa faktor yang berpengaruh pada efektifitas suatu algoritma pengurutan antara lain:
• banyak data yang diurutkan.
• kapasitas pengingat apakah mampu menyimpan semua data yang dimiliki
• tempat penyimpanan data, misalnya piringan, pita atau kartu, atau media penyimpan yang lain.
Metode pengurutan yang digunakan dapat diklasifikasikan menjadi dua kategori yaitu :
• Pengurutan internal, yaitu pengurutan dengan menggunakan larik (array). Larik
tersimpan dalam memori utama komputer
• Pengurutan eksternal, yaitu pengurutan dengan menggunakan berkas (sequential access file). Berkas
tersimpan dalam pengingat luar, misalnya cakram atau pita magnetis.
Deklarasi Larik
Pada pengurutan larik, ada beberapa aspek yang perlu dipertimbangkan, antara lain aspek menyangkut
kapasitas pengingat yang ada dan aspek waktu, yaitu waktu yang diperlukan untuk melakukan
permutasi sehingga semua elemen akhirnya menjadi terurutkan.
Deklarasi larik yang digunakan adalah larik dimensi satu (vektor) dengan elemennya bertipe integer.
Materi 2 : Metode Penyisipan Langsung (Straight Insertion Sort)
Proses pengurutan dengan metode penyisipan langsung dapat dijelaskan sebagai berikut :
Data dicek satu per satu mulai dari yang kedua sampai dengan yang terakhir. Apabila ditemukan data
yang lebih kecil daripada data sebelumnya, maka data tersebut disisipkan pada posisi yang sesuai. Akan
lebih mudah apabila membayangkan pengurutan kartu. Akan lebih mudah apabila membayangkan
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
pengurutan kartu. Pertama-tama meletakkan kartu-kartu tersebut di atas meja, kemudian melihatnya
dari kiri ke kanan. Apabila kartu di sebelah kanan lebih kecil daripada kartu di sebelah kiri, maka ambil
kartu tersebut dan sisipkan di tempat yang sesuai.
Pertama-tama adalah menentukan jarak mula-mula dari data yang akan dibandingkan, yaitu N / 2. Data
pertama dibandingkan dengan data dengan jarak N / 2. Apabila data pertama lebih besar dari data ke N
/ 2 tersebut maka kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang
sama yaitu N / 2. Demikian seterusnya sampai seluruh data dibandingkan sehingga semua data ke-j
selalu lebih kecil daripada data ke-(j + N / 2). Pada proses berikutnya, digunakan jarak (N / 2) / 2 atau N
/ 4. Data pertama dibandingkan dengan data dengan jarak N / 4. Apabila data pertama lebih besar dari
data ke N / 4 tersebut maka kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan
jarak yang sama yaitu N / 4. Demikian seterusnya sampai seluruh data
dibandingkan sehingga semua data ke-j lebih kecil daripada data ke-(j + N / 4).
Metode pencarian data dapat dilakukan dengan dua cara yaitu pencarian internal (internal searching)
dan pencarian eksternal (external searching). Pada pencarian internal, semua rekaman yang diketahui
berada dalam pengingat komputer sedangakan pada pencarian eksternal, tidak semua rekaman yang
diketahui berada dalam pengingat komputer, tetapi ada sejumlah rekaman yang tersimpan dalam
penyimpan luar misalnya pita atau cakram magnetis.
Metode pencarian data : pencarian statis (static searching) dan pencarian dinamis (dynamic
searching). Pada pencarian statis, banyaknya rekaman yang diketahui dianggap tetap, pada pencarian
dinamis, banyaknya rekaman yang diketahui bisa berubah-ubah yang disebabkan oleh penambahan
atau penghapusan suatu rekaman.
Ada dua macam teknik pencarian yaitu pencarian sekuensial dan pencarian biner. Perbedaan dari dua
teknik ini terletak pada keadaan data. Pencarian sekuensial digunakan apabila data dalam keadaan
acak atau tidak terurut. Sebaliknya, pencarian biner digunakan pada data yang sudah dalam keadaan
urut.
C. Rangkuman
1. Metode Bubble Sort sekalipun relatif lebih mudah dilakukan tetapi tidak efisien dibandingkan
dengan metode lain dalam melakukan pengurutan.
2. Metode Quick Sort dan metode Merge Sort dapat dilakukan dengan menggunakan rekursif atau
tanpa rekursif.
D. Tugas
1. Membuat resume dari materi yang telah diterangkan.
2. Tanya jawab dan diberikan latihan soal terhadap individu.
E. Test
1. Tuliskan kategori pemilihan algoritma.
2. Jelaskan algoritma quick Rekursif.
3. Jelaskan perbedaan Metode Quick Sort Non Rekursif dengan Metode Quick Sort Rekursif.
4. Tuliskan contoh Merge Sort.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
MODUL 5
A. Tujuan
Mahasiswa mampu memahami pernyataan while, bentuk umum while, pernyataan Do… While, bentuk
umum Do… While… , pernyataan For, bentuk umum For, pernyataan For Bersarang (Nested For), bentuk
umum For Bersarang (Nested For), decision (percabangan), Struktur satu kondisi (perintah IF), Struktur
satu kondisi (perintah IF), Struktur dua kondisi (perintah if – else), Struktur tiga kondisi (perintah
multiple if – else), perintah switch
B. Uraian Materi
Materi 1 : Pernyataan While
Pada pernyataan while, pengecekan terhadap loop dilakukan dibagian awal (sebelum tubuh loop).
Bentuk umum :
while (kondisi)
pernyataan;
Perulangan ini banyak digunakan bila jumlah perulangannya belum diketahui. Proses perulangan akan
terus berlanjut selama kondisinya bernilai benar (true) dan akan berhenti bila kondisinya bernilai salah.
}
}
Materi 4 : Decision (Perulangan)
Decision digunakan untuk memilih salah satu alternatif jawaban yang tepat dari pilihan yang ada.
Suatu pemilihan statemen yang akan dieksekusi dimana pemilihan tersebut didasarkan atas kondisi
tertentu. Statemen yang terdapat dalam sebuah blok percabangan akan dieksekusi jika kondisi yang
didefinisikan terpenuhi (bernilai benar) Artinya jika kondisi tidak terpenuhi (bernilai salah) maka
statemen tersebut tidak ikut dieksekusi atau akan diabaikan oleh compiler.
1. Struktur satu kondisi (perintah IF)
• digunakan untuk menyeleksi suatu kondisi tunggal.
• Bila proses yang diseleksi terpenuhi atau bernilai benar, maka pernyataan yang ada di dalam blok if
akan diproses dan dikerjakan.
Bentuk umum struktur kondisi if adalah:
if(kondisi)
2. Struktur dua kondisi (perintah if – else)
• Perintah if.....else minimal terdapat dua pernyataan.
• Jika kondisi yang diperiksa bernilai benar atau terpenuhi maka pernyataan pertama yang
dilaksanakan dan jika kondisi yang diperiksa bernilai salah maka pernyataan yang kedua yang
dilaksanakan.
Bentuk Umum
if (kondisi)
{
statemen_jika_kondisi_terpenuhi;
}
else
{
statemen_jika_kondisi_tidak_terpenuhi;
}
3. Struktur tiga kondisi (perintah multiple if – else)
Percabangan jenis ini merupakan perluasan dari struktur yang memiliki dua kondisi diatas yaitu dengan
menyisipkan satu atau lebih kondisi ke dalamnya.
Bentuk umum:
if (kondisi1)
{
statemen_jika_kondisi1_terpenuhi;
}
else if (kondisi2)
{
statemen_jika_kondisi2_terpenuhi;
}
else if (kondisi3)
{
statemen_jika_kondisi3_terpenuhi;
}
....
else
{
statemen_jika_semua_kondisi_tidak_terpenuhi;
}
4. Perintah switch
Perintah ini memiliki bentuk switch – case yang digunakan untuk pilihan berjumlah banyak. Perintah
switch tidak dianjurkan pada pilihan yang melibatkan jangkauan nilai (range) tetapi dianjurkan pada
pilihan berupa konstanta dan banyak misalnya untuk memilih menu.
Bentuk umum:
switch (pernyataan)
{
case nilai_1:
blok_pernyataan1;
break;
case nilai_2:
blok_pernyataan2;
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
break;
default:
blok_pernyataan_n;
}
Cara kerjanya:
1. switch akan mengevaluasi pilihan dan apabila isinya sama dengan nilai_1, maka blok pernyataan 1
akan dijalankan sampai menemukan perintah break untuk kemudian keluar dari blok switch.
2. Bila pilihan tidak sama isinya dengan nilai_1, maka akan dicocokkan lagi dengan nilai_2. dan apabila
isinya sama dengan nilai_2, maka blok pernyataan 2 akan dijalankan sampai menemukan perintah
break untuk kemudian keluar dari blok switch.
3. Apabila isi pilihan tidak sesuai dengan nilai_1, nilai_2 dan seterusnya maka secara otomatis yang
dijalankan adalah blok pernyataan default.
C. Rangkuman
• Satu kondisi menggunakan perintah if, dua kondisi menggunakan perintah if – else, tiga kondisi
menggunakan perintah multiple if – else).
• Perintan Decision digunakan untuk memilih salah satu alternatif jawaban yang tepat dari pilihan yang
ada.
• Perintah Looping menggunakan pernyataan While bila perulangan satu benar, Do.. While berupa
pernyataan, For untuk suatu proses yang telah diketahui jumlah perulangannya, Nested For
melibatkan lebih dari satu variabel namun yang jelas satu diantaranya akan digunakan sebagai indeks
perulangan.
D. Tugas
1. Buatlah program untuk menentukan huruf, dengan ketentuan sebagai berikut:
Jika karakter >=’A’ dan karakter <=’Z’ maka Karakter yang Anda masukkan adalah huruf besar.
Jika karakter >=’a’ dan karakter <=’z’ maka Karakter yang Anda masukkan adalah huruf kecil.
Jika karakter >=’0’ dan karakter <=’9’ maka Karakter yang Anda masukkan adalah Angka.
Jika bukan semuanya berarti Karakter yang Anda masukkan adalah bukan alphanumeric.
2. Buatlah program untuk menghitung luas dengan menggunakan menu, dengan ketentuan sebagai
berikut:
a. Menghitung Luas Bujur Sangkar.
b. Menghitung Luas Persegi Panjang.
c. Menghitung Luas Segi Tiga
d. Menghitung Luas Lingkaran.
E. Test
1. Tuliskan contoh perintah perulangan multiple if - case.
2. Tuliskan contoh perintah For bersarang.
3. Tuliskan contoh perintah switch.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
MODUL 6
FUNCTION
A. Tujuan
Mahasiswa mampu memahami defenisi Function, sifa-sifat dari Fungsi, bentuk umum dari Fungsi,Fungsi
Tanpa Nilai Balik, Fungsi dengan Nilai Balik, fungsi Rekursif.
Materi 1 : Function
Fungsi adalah satu blok kode yang dapat melakukan tugas tertentu atau satu blok instruksi yang
dieksekusi ketika dipanggil dari bagian lain dalam suatu program. Sebuah fungsi berisi sejumlah
pernyataan yang dikemas dalam sebuah nama. Nama tersebut selanjutnya dapat dipanggil berkali-kali
di beberapa tempat dalam program. Keuntungan pembuatan fungsi secara umum adalah :
• Program besar dapat dipisah menjadi program-program kecil.
• Dapat dikerjakan oleh beberapa orang sehingga koordinasi mudah.
• Kemudahan dalam mencari kesalahan-kesalahan karena alur logika jelas dan kesalahan dapat
dilokalisasi dalam suatu modul tertentu saja.
• Modifikasi program dapat dilakukan pada suatu modul tertentu saja tanpa mengganggu program
keseluruhan. Mempermudah dokumentasi.
Sifat-sifat dari fungsi yang baik adalah :
• Nilai fan-in tinggi, artinya semakin sering suatu fungsi dipanggil oleh pengguna semakin tinggi nilai
fan-in.
• Fan-out rendah, artinya semakin spesifik fungsi suatu modul akan semakin rendah nilai fan-out.
• Self-contained tinggi, artinya kemampuan untuk memenuhi kebutuhannya sendiri.
Bentuk umum sebuah fungsi adalah:
Tipe_fungsi nama_fungsi (parameter fungsi)
Deklarasi parameter
{
Tubuh fungsi
}
Materi 2 : Tipe fungsi digunakan untuk menentukan tipe keluaran fungsi
I. Fungsi Tanpa Nilai Balik
Fungsi tanpa nilai balik (return Value) digunakan untuk melakukan proses-proses yang tidak
menghasilkan nilai, seperti melakukan pengulangan, proses pengesetan nilai ataupun yang lainnya.
Fungsi semacam ini tipe kembaliannya akan diisi dengan nilai void.
Bentuk umumnya:
Void_nama_fungsi(parameter1, parameter2,..)
{
Statemen_yang_akan_dieksekusi;
...
}
2. Fungsi Dengan Nilai Balik
Fungsi dengan nilai balik yaitu fungsi yang digunakan untuk melakukan proses-proses yang
berhubungan dengan nilai. Adapun cara pendefinisiannya adalah dengan menuliskan tipe data dari nilai
yang akan dikembalikan didepan nama fungsi.
Bentuk umum:
tipe_data nama_fungsi(parameter1, parameter2,..)
{
Statemen_yang_akan_dieksekusi;
...
return nilai_balik;
}
3. Fungsi Dengan Parameter
Parameter adalah suatu variabel yang berfungsi untuk menampung nilai yang akan dikirimkan ke dalam
fungsi. Parameter itu sendiri terbagi dua macam yaitu:
• Parameter formal adalah variabel yang ada pada daftar parameter dalam definisi fungsi.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
• Parameter aktual adalah parameter (tidak selamanya menyatakan variabel) yang digunakan
dalam pemanggilan fungsi.
Materi 3 : Rekursif
Rekursif berarti suatu proses yang memanggil dirinya sendiri. Dalam rekursif sebenarnya terkandung
pengertian prosedur atau fungsi. Perbedaannya adalah bahwa rekursif bisa memanggil ke dirinya
sendiri, tetapi prosedur atau fungsi harus dipanggil lewat pemanggil prosedur atau fungsi.
Rekursif merupakan teknik pemrograman yang penting, dan beberapa bahasa pemrograman modern
mendukung keberadaan proses rekursif ini. Pemanggilan prosedur atau fungsi ke dirinya sendiri bisa
berarti proses yang berulang yang tidak bisa diketahui kapan akan berakhir. Dalam pemakaian sehari-
hari, rekursi merupakan teknik pemrograman yang berdaya guna untuk digunakan pada pekerjaan
pemrograman dengan mengekspresikannya ke dalam suku-suku dari program lain dengan
menambahkan langkah-langkah sejenis. Contoh paling sederhana dari proses rekursi adalah
menghitung nilai faktorial dari bilangan bulat. Nilai faktorial, secara rekursif dapat ditulis sebagai :
0! = 1
N! = N x (N-1)!, Untuk N > 0
yang secara notasi pemrograman bisa ditulis sebagai :
FAKTORIAL (0) = 1 1)
FAKTORIAL (N) = N * FAKTORIAL (N-1) 2)
Persamaan 2) di atas merupakan contoh hubungan rekurens (recurrence relation), yang berarti bahwa
nilai suatu fungsi dengan argumen tertentu bisa dihitung dari fungsi yang sama dengan argumen yang
lebih kecil. Persamaan 1) yang tidak bersifat rekursif, disebut nilai awal. Setiap fungsi rekursi paling
sedikit mempunyai 1 (satu) nilai awal; jika tidak, fungsi tersebut tidak bisa dihitung secara eksplisit.
C. Rangkuman
1. Fungsi adalah satu blok kode yang dapat melakukan tugas tertentu atau satu blok instruksi yang
dieksekusi ketika dipanggil dari bagian lain dalam suatu program.
2. Tipe fungsi digunakan untuk menentukan tipe keluaran fungsi, Fungsi Tanpa Nilai Balik, Fungsi
dengan Nilai Balik, fungsi dengan parameter.
D. Tugas
1. Membuat resume dari materi yang telah diterangkan.
2. Tanya jawab dan diberikan latihan soal terhadap individu.
E. Test
1. Tuliskan sifat-sifat fungsi yang baik.
2. Tuliskan contoh proses rekursif.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
MODUL 7
LINKED LIST
E. Tujuan
Mahasiswa mampu memahami tipe data pointer, deklarasi pointer, variable pointer, variabel dinamis,
pointer dan array dinamis, konsep linked list, operasi dasar dalam linked list (senarai berantai), definisi
linked list, single linked list, double linked list, representasi simpul (node), alokasi simpul, operasi pada
linked list, insert sebagai node awal (head) dari linked list, insert setelah node tertentu, insert sebelum
node tertentu, circular list.
B. Uraian Materi
Materi 1 : POINTER
Pointer adalah tipe data yang digunakan untuk menunjuk ke suatu data. Suatu variable yang bertipe
pointer (variabel pointer) tidak berisi data, melainkan berisi alamat suatu data. Di dalam komputer
setiap lokasi data mempunyai alamat yang khas. Gambar berikut contoh suatu pointer yang menunjuk
ke suatu data.
Gambar Pointer
Variabel_pointer = &variabel_data
Variabel Dinamis
Variabel dinamis adalah variabel yang bisa diciptakan ketika program dieksekusi. Menciptakan variabel
dinamis butuh variabel pointer, kuncinya yaitu operator new. Misalnya terdapat variabel pointer novel
yang bertipe pointer. Agar tercipta variabel dinamis yang akan ditunjuk oleh novel, perintahnya adalah :
Deletevariabel_pointer;
Perhatikan gambar di atas bahwa Amir sebagai data yang pertama kali dimasukkan akan berada pada
salah satu ujung (ujung kanan). Sedangkan data yang terakhir kali dimasukkan yaitu Dhanu, justru
berada dibagian kiri, yang ditunjuk oleh pointer pertama. Dengan kata lain, pointer pertama selalu
menunjuk ke data yang terakhir kali dimasukkan. Berbeda dengan stack, penghapusan data dalam
linked list bias dilakukan di mana saja. Dalam terminologi linked list, setiap data diletakkan dalam
sebuah simpul (node). Pada gambar di atas terdapat 4 buah simpul. Setiap simpul terdiri atas 2 bagian,
yaitu bagian data dan bagian penunjuk ke simpul berikutnya. Pada contoh di atas bagian data hanya
mengandung sebuah data, yaitu nama orang. Namun bagian data bisa saja mengandung beberapa data.
Misalnya bagian data terdiri atas nomor mahasiswa dan nama mahasiswa seperti contoh berikut :
Berisi nomor mahasiswa
Dan Nama mahasiswa
Untuk mengakses elemen dalam linked list, dimulai dari head dan menggunakan pointer next dari
elemen selanjutnya untuk berpindah dari elemen ke elemen berikutnya sampai elemen yang diminta
dicapai. Dengan single linke list, list dapat dilintasi hanya satu arah dari head ke tail karena masing-
masing elemen tidak terdapat link dengan elemen sebelumnya. Sehingga, apabila kita mulai dari head
dan berpindah ke beberapa elemen dan berharap dapat mengakses elemen sebelumnya, kita harus
mulai dari head. Secara konseptual, linked list merupakan deretan elemen yang berdampingan. Akan
tetapi, karena elemen-elemen tersebut dialokasikan secara dinamis (menggunakan malloc), sangat
penting untuk diingat bahwa kenyataannya, linked list akan terpencarpencar di memori Pointer dari
elemen ke elemen berarti sebagai penjamin bahwa semua elemen dapat diakses.
Gambar Elemen Pada Linked List Dihubungkan Secara Terpencar-Pencar pada Alamat Memori
Alokasi Simpul
Ketika sebuah variabel dideklarasikan, terlebih dahulu harus diinisialisasi. Demikian juga dengan
pengalokasian secara dinamis. Sehingga, fungsi untuk mengalokasikan sebuah node baru, fungsi
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
allocate_node() menggunakan malloc() untuk mendapatkan memori aktual, yang akan menginisialisasi
suatu field data. Next selalu diinisialisasi sebagai NULL. Untuk melihat kemungkinan alokasi memori
gagal, maka fungsi allocate_node menghasilkan 0, bila berhasil maka menghasilkan 1. Untuk
membebaskan node digunakan fungsi free_node. Fungsi dari alokasi node adalah sebagai berikut :
int allocate_node(int data, list *new)
{
new = (list) malloc (sizeof(node));
if(new==NULL)
return 0;
new->datalist = data;
new->next=NULL;
return 1;
}
10
Untuk inisialisasi list setelah alokasi untuk node pertama maka ditambahkan statement sebagai berikut:
head = new;
Ilustrasi dari fungsi i allocate_node() adalah sebagai berikut :
Untuk inisialisasi list setelah alokasi untuk node pertama ilustrasinya adalah sebagai berikut:
head = new;
Fungsi free_node()menggunakan memori dinamis dengan fungsi free(). free() akan menghancurkan
node yang menunjuk ke pointer yang dilewati, sehingga tempat yang ada dapat dipakai untuk lainnya.
Akan tetapi, pointer yang melewati free() tidak otomatis menjadi null, tetapi akan menunjuk ke node
yang sudah tidak ada. Karena itu pointer harus didefinisikan dengan NULL.
void free_node(list p_L)
{
free(p_L);
p_L=NULL;
}
Ilustrasi dari fungsi free_node()dapat dilihat pada gambar berikut :
free(*p_L);
after = after->next;
while (after->datalist != x);
insert->next = after->next;
after->next = insert;
do
prevbefore = before;
before = before->next;
while (before->datalist != x);
insert->next = before;
prevbefore->next = insert;
tail = tail->next;
while (tail->next != NULL);
tail->next = insert;
tail = tail->next;
}
Untuk melintas kembali melalui double linked list, kita gunakan pointer prev dari elemen yang berurutan
pada arah tail ke head. Double linked list mempunyai fleksibilitas yang lebih tinggi daripada single linked
list dalam perpindahan pada list. Bentuk ini sangat berguna ketika akan meletakkan suatu elemen pada
list dan dapat memilih dengan lebih bijaksana bagaimana memindahkannya. Sebagai contoh, salah satu
fleksibilitas dari double linked list adalah dalam hal memindahkan elemen daripada menggunakan single
linked list.
C. Rangkuman
• Linked list adalah sebuah struktur untuk menyimpan data yang bersifat dinamik
• Beberapa operasi dapat diterapkan pada linked list seperti sisip(insert), hapus(delete)
• Operasi-operasi yang ada pada linked list relatif lebih sulit jika dibandingkan dengan operasi-
operasi pada struktur yang statis.
D. Tugas
3. Membuat resume dari materi yang telah diterangkan.
4. Tanya jawab dan diberikan latihan soal terhadap individu.
E. Test
1. Buatlah linked list untuk data mahasiswa, tambahkan prosedur untuk menambah dan
menghapus data.
2. Tambahkan tampilan di output pada program di atas untuk menghitung nilai ratarata,
nrata=total/jumlah_siswa; total didapatkan dari menambahkan nilai yang didapat tiap
mahasiswa.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
MODUL 8
STACK, QUEUE
A. Tujuan
Mahasiswa mampu memahami stack (tumpukan), sifat tumpukan Last In First Out (LIFO), operasi dasar
PUSH dan POP, operasi-operasi/fungsi stack, aplikasi stack, dasar teori Queue, FIFO (First In First Out),
Implementasi Queue dengan Linked List, operasi-operasi standar queue,
B. Uraian Materi
Materi 1 : Pengertian Stack
Stack (tumpukan) adalah struktur data yang memungkinkan penyisipan dan pengambilan data
dilakukan dari satu ujung yang disebut puncak. Sesuai namanya, struktur data ini digambarkan seperti
keadaan tumpukan piring atau tumpukan buku. Cara yang paling mudah untuk meletakkan piring ke
dalam tumpukan yakni dengan menaruhnya dibagian puncak. Begitu juga kalau ingin mengambil piring.
Piring diambil dari data yangberada di puncak tumpukan. Penyimpanan data/item dimana data/item
yang diakses adalah paling akhir yang disebut top of stack. Item ditempatkan membentuk tumpukan.
Mengkonversikan bilangan system decimal ke system biner. Contoh Bilangan 19 identik dengan
bilangan biner : 10011. Algoritma untuk melakukannya adalah seperti berikut :
1. Tumpukan <---- kosong
2. While Bilangan > 0
3. Digit <---- sisa pembagian bilangan bulat dengan 2
4. Push(Tumpukan, Digit)
5. Bilangan <---- pembagian bilangan bulat dengan 2
6. End-While
7. While (Tumpukan tidak kosong)
8. Digit <---- Pop
9. Tampilkan digit
10. End-While
Mengevaluasi Ekspresi Aritmetika. Misalnya, tumpukan dipakai untuk memproses perhitungan
semacam (2+1)*3+5*2 yang melibatkan berbagai operator dengan prioritas yang berbeda. Memproses
pasangan tanda kurung dalam suatu ekspresi. Misalnya, ekspresi seperti (a(b{c|d}[]) dianggap valid,
sedangkan ekspresi (a(b{c|d] dianggap tidak valid. Menangani fungsi Rekursif. Secara internal komputer
menggunakan tumpukan ketika terjadi pemanggilan fungsi secara rekursif.
Materi 4 : Queue
Queue disebut juga antrian dimana data masuk di satu sisi dan keluar di sisi yang lain. Karena itu, queue
bersifat FIFO (First In First Out). Antrian (Queue) merupakan suatu kumpulan data yang penambahan
elemennya (masuk antrian) hanya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang/rear)
atau disebut juga enqueue yaitu apabila seseorang masuk ke dalam sebuah antrian. Jika seseorang
keluar dari antrian/penghapusan (pengambilan elemen) dilakukan lewat ujung yang lain (disebut
dengan sisi depan/front) atau disebut juga dequeue yaitu apabila seseorang keluar dari antrian. Jadi,
dalam antrian menggunakan prinsip “masuk pertama keluar pertama” atau disebut juga dengan prinsip
FIFO (first in first out). Dengan kata lain, urutan keluar akan sama dengan urutan masuknya. Contoh :
antrian mobil saat membeli karcis di pintu jalan tol, antrian di bioskop dan sebagainya.
Dasar Teori
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
Queue atau antrian adalah suatu kumpulan data yang penambahan elemennya hanya bisa dilakukan
pada suatu ujung (disebut dengan sisi belakang atau rear), dan penghapusan atau pengambilan elemen
dilakukan lewat ujung yang lain (disebut dengan sisi depan atau front). Kalau tumpukan dikenal dengan
menggunakan prinsip LIFO (Last In First Out), maka pada antrian prinsip yang digunakan adalah FIFO
(First In First Out).
Gambar di atas menunjukkan contoh penyajian antrian menggunakan array. Antrian di atas berisi 6
elemen, yaitu A, B, C, D, E dan F. Elemen A terletak di bagian depan antrian dan elemen F terletak di
bagian belakang antrian. Jika ada elemen baru yang akan masuk, maka elemen tersebut akan diletakkan
di sebelah kanan F. Dan jika ada elemen yang akan dihapus, maka A akan dihapus terlebih dahulu.
Elemen A terletak di bagian depan, kemudian disusul elemen B dan elemen yang paling akhir atau
paling belakang adalah elemen F. Misalkan ada elemen baru yang akan masuk maka akan terletak di
belakang elemen F, sehingga elemen baru akan menempati posisi yang paling belakang.
Seperti pada tumpukan atau stack di dalam antrian juga dikenal 2 operasi dasar yaitu menambah
elemen baru yang akan diletakkan di bagian belakang antrian dan menghapus elemen yang terletak di
bagian depan antrian.
Untuk memahami penggunaan antrian dalam array, kita membutuhkan deklarasi
antrian, misalnya sebagai berikut :
# define MAXN 6
Typedef enum { NOT_OK, OK } Tboolean;
Typedef struct {
Titem array [MAXN];
int first;
int last;
int number_of_items;
} Tqueue
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
Dengan deklarasi di atas, elemen antrian dinyatakan dalam tipe integer yang semuanya terdapat dalam
struktur. Variabel first menunjukkan posisi elemen pertama dalam array, dan variabel last
menunjukkan posisi elemen terakhir dalam array.
Algoritma dari penggalan program di atas adalah :
1. Tentukan elemen yang akan dimasukkan ke dalam antrian (dalam hal ini adalah 6 elemen).
2. Deklarasikan struktur untuk menampung elemen pada antrian.
3. Selesai
Untuk menambah elemen baru dan mengambil elemen dari antrian dalam antrian, diperlukan deklarasi
berikut ini :
void initialize_queue ( Tqueue *Pqueue)
{
Pqueue -> firs = 0;
Pqueue -> last = -1;
Pqueue -> number_of_items = 0;
}
Tboolean enqueue ( Tqueue *Pqueue, Titem item)
{
if (Pqueue -> number_of_items >= MAXN)
return (NOT_OK);
else {
Pqueue -> last++;
if (Pqueue -> last > MAXN -1)
Pqueue -> = 0;
Pqueue -> array[Pqueue->last] = item;
Pqueue -> number_of_items++;
return (OK);
}
}
Tboolean dequeue (Tqueue *Pqueue, Titem, item)
{
if (Pqueue -> number_of_items == 0)
return (NOT_OK);
else {
*Pitem = Pqueue -> array[Pqueue->first++];
if (Pqueue -> first > MAXN -1)
Pqueue -> first = 0;
Pqueue -> number_of_items--;
return (OK);
}
}
else
( *tailPtr ) -> nextPtr = newPtr;
*tailPtr = newPtr;
}
3. Lakukan pengecekan terhadap antrian, apakah antrian dalam kondisi kosong atau tidak. Kalau kondisi
antrian kosong, maka elemen bisa dihapus. Penggalan program berikut ini akan menunjukkan kondisi
tersebut.
int isEmpty ( QUEUENODEPTR headPtr )
{
return headPtr == NULL;
C. Rangkuman
Stack (tumpukan) adalah struktur data yang memungkinkan penyisipan dan pengambilan data
dilakukan dari satu ujung yang disebut puncak.
QUEUE merupakan struktur data dinamis, ketika program dijalankan, jumlah elemennya dapat
berubah.
Tumpukan dikenal dengan menggunakan prinsip LIFO (Last In First Out), maka pada antrian prinsip
yang digunakan adalah FIFO (First In First Out).
D. Tugas
1. Membuat resume dari materi yang telah diterangkan.
2. Tanya jawab dan diberikan latihan soal terhadap individu.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
MODUL 9
LINKED LIST
F. Tujuan
Mahasiswa mampu memahami struktur data hirarkis tree, Cara Penggambaran Tree, Terminologi tree,
karakteristik tree, karakteristik binary tree, Complete Binary Tree, Full Binary Tree, Preorder, inorder,
postorder, traversal binary tree, implementasi binary tree, AVL tree, heap tree, Struktur Data,
Konektivitas pada Undigraph, jenis graph, Graph berbobot (weighted graph) Graph , Algoritma Depth
First Search, Depth First Search (DFS) :
B. Uraian Materi
Materi 1 : Struktur Data Hirarkis : Tree
Tree merupakan salah satu struktur data yang paling penting, karena banyak aplikasi menggunakan
informasi dan data yang secara alami memiliki struktur hirarkis berguna dalam membantu
memecahkan banyak masalah algoritmis.
Aplikasi pohon biner :
a. sebagai representasi ekspressi matematika
b. aplikasi pohon biner dalam Huffman Coding.
Cara Penggambaran Tree :
• Notasi Kurung
• Diagram Venn
• Notasi Tingkat
• Notasi Garis
Terminologi :
• Tree (atau pohon) sejumlah node yang berhubungan secara hirarkis dimana suatu node pada suatu
hirarki merupakan cabang dari node dengan hirarki yang lebih tinggi dan juga memiliki cabang ke
beberapa node lainnya dengan hirarki yang lebih rendah.
• Root (atau akar)
Node dengan hirarki tertinggi dinamakan root.
• leaf (atau daun)
node yang tidak memiliki cabang.
• Internal node (atau node dalam)
node yang bukan merupakan leaf.
• edge (atau sisi atau cabang)
menyatakan hubungan hirarkis antara kedua node yang terhubungkan, biasanya digambarkan
berarah (berupa panah) untuk menunjukkan node asal edge lebih tinggi dari node tujuan dari edge.
o Level (atau tingkat) suatu node (Kadang dimulai level 0 atau 1)
o Bilangan yang menunjukan hirarki dari suatu node, root memiliki level 1, node cabang dari root
memiliki level 2, node cabang berikutnya dari node adalah level 3, dan seterusnya.
o Height (atau tinggi) suatu tree, sama dengan level dengan angka terbesar (hirarki terendah)
suatu node yang ada dalam tree atau bisa juga didefinisikan sebagai jumlah sisi terbanyak dari
root hingga suatu leaf yang ada di tree.
o Depth (atau kedalaman) suatu node : jumlah sisi dari root hingga node ybs.
o Subtree (atau subpohon), sebagian dari tree mulai dari suatu node N melingkupi node-node
yang berada dibawah hirarkinya sehingga dapat dipandang sebagai suatu tree juga yang mana
N sebagai root dari tree ini.
o Tree kosong : suatu tree yang tidak memiliki satu node pun.
o Tree dengan urutan letak geometris node-node yang merupakan cabang yang sama dari suatu
node adalah penting; biasanya urutan dari kiri ke kanan. B, C, D dan E memiliki induk (parent)
yang sama yaitu A, sehingga ke- 4 node tersebut disebut saudara (siblings)
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
o Semua node di bawah suatu node induk hanya dapat diakses melalui induknya
o Lintasan (path) sebuah node X adalah urutan akses untuk mendapatkan X yang dimulai dari
Akar. Path(M) = [A – B – G – M]
o Panjang lintasan (path length) X adalah jumlah node yang harus diakses untuk mendapatkan X;
sehingga |Path(M)| = 4. Ada juga yang menyatakan panjang lintasan sebuah node adalah jumlah
garis dari akar sampai node tersebut.
o Tinggi (height) dari sebuah pohon adalah panjang lintasan terpanjang.
Tinggi pohon di bawah ini = 4
o jika ada sebuah lintasan dari node a ke node b, maka a adalah pendahulu (ancestor) dari b dan b
disebut keturunan (descendent) dari a
o Kedalaman (depth) dari sebuah node adalah panjang lintasan dari akar ke node tersebut. Depth
(G) = 3
Karakteristik :
a. Terdapat 1 node yang unik, yang tidak memiliki predecessor, yang disebut dengan root (akar)
b. Terdapat satu atau beberapa node yang tidak memiliki successor yang disebut dengan leaf (daun)
c. Setiap node kecuali root pasti memiliki satu predecessor
d. Setiap node kecuali leaf pasti memiliki 1 atau lebih successor
(2 + 4) * 3 adalah EM
((3 + 2) * (5 – 2)) / (2 + 3) adalah EM dan seterusnya
Contoh:
Diketahui: Ekspressi Matematika ((2 + 3) * (5 – 2) + 5) * (5 + 3 * 2)
Ditanya: Gambarkan pohon ekspressi dengan cara Bootom Up
Penyelesaian:
Ekspressi tersebut terbagi dua menjadi E1 dan E2 oleh operator *; sehingga
ekspressi tersebut dapat ditulis sebagai (E1) * (E2) dimana E1 = ((2 + 3)
* (5 – 2) + 5) dan E2 = (5 + 3 * 2)
Path pencarian lokasi untuk dilakukan operasi insert dimulai dari Root Pivot Point :
Adanya node pada search path yang balancenya TallLeft (tanda -) atau TallRight (tanda +) dan terletak
paling dekat dengan node yang baru, Contoh : Jika diinsert node baru dengan nilai 5, maka pivot
pointnya di node 25
Operasi Insert :
- Kasus-1 Tidak ada pivot point dan setiap node adalah balance, maka bisa langsung diinsert sama
seperti BST
- Kasus 2
Jika ada PP tetapi subtree yang akan ditambahkan node baru memiliki height yang lebih kecil,
maka bisa langsung di insert
- Kasus 3
Jika ada PP dan subtree yang akan ditambahkan node baru memiliki height yang lebih besar,
maka tree harus degenerate supaya tetap menghasilkan AVL Tree
Regenerate :
- Single Rotation
a. Single Left Rotation
b. Single Right Rotation
- Double Rotation
a. Double Left Rotation
b. Double Right Rotation
HEAP TREE :
Definisi :
o Heap adalah Tree yang memenuhi persamaan :
R[ I ] < R[ 2*I ] dan R[ I ] < R[2*I + 1]
o Heap disebut juga Complete Binary Tree
o Minimum Heap : Jika nilai parentnya selalu lebih kecil dari pada kedua childrennya
o Maximum Heap : Jika nilai parentnya selalu lebih besar dari pada kedua Childrennya
B-Tree :
o Definisi : Tree yang setiap nodenya dapat berisi lebih dari pada satu elemen
o Jumlah elemen dalam sebuah node tergantung kepada order dari B-Tree tersebut Jumlah minimum
elemen dalam setiap node (kecuali root) adalah d, dan jumlah max adalah 2d, dimana d adalah order.
Untuk Root, jumlah minimum elemen 1, dan jumlah maksimum adalah 2d
o Jumlah minimum children dari suatu node dalam B-Tree adalah 0, dan
o jumlah Max-nya adalah jumlah elemen+1
Materi 4 : B-Tree
- Definisi :
- Tree yang setiap nodenya dapat berisi lebih dari pada satu elemen Jumlah elemen dalam sebuah
node tergantung kepada order dari B-Tree tersebut.
- Jumlah minimum elemen dalam setiap node (kecuali root) adalah d, dan jumlah max adalah 2d,
dimana d adalah order. Untuk Root, jumlah minimum elemen 1, dan jumlah maksimum adalah 2d.
- Jumlah minimum children dari suatu node dalam B-Tree adalah 0, dan jumlah Max-nya adalah
jumlah elemen+1.
- Jika target node yang akan dihapus berisi elemen lebih dari d, maka target elemen bisa langsung
dihapus tanpa perlu
- Jika target node yang akan dihapus berisi d node, penghapusan langsung akan menyebabkan
underflow
- Regenerate dilakukan dengan meminjam elemen yang berada di node kiri atau dikanan (yang
memiliki elemen lebih dari d). Parent/ Separator akan berubah
- Jika node dikiri atau dikanan yang akan dilakukan peminjaman ternyata mempunyai elemen
kurang dari d, yang mana jika dilakukan peminjaman, node tersebut akan terjadi underflow
- Regenerate akan dilakukan dengan menggabungkan node yang akan dihapus dengan node
dikiri/kanan
Materi 5 : Graph
Struktur Data Graph :
o Graph : struktur data yang berbentuk network/jaringan, hubungan antar elemen adalah many-to-
many
o Struktur Data Linear = keterhubungan sekuensial antara entitas data
o Struktur Data Tree = keterhubungan hirarkis
o Struktur Data Graph = keterhubungan tak terbatas antara entitas data.
Contoh graph : Informasi topologi jaringan dan keterhubungan antar kota-kota
o Keterhubungan dan jarak tidak langsung antara dua kota = data keterhubungan langsung dari kota-
kota lainnya yang memperantarainya.
o Penerapan struktur data linear atau hirarkis pada masalah graph dapat dilakukan tetapi kurang
efisien. Struktur data graph secara eksplisit menyatakan keterhubungan ini sehingga pencariannya
langsung (straightforward) dilakukan pada strukturnya sendiri.
Graph terdiri dari himpunan verteks (node) dan himpunan sisi (edge, arc).
Verteks menyatakan entitas-entitas data dan sisi menyatakan
keterhubungan antara verteks.
b. Graph Tak Berarah (undirected graph atau undigraph): setiap sisi {x, y} berlaku pada kedua arah:
baik x ke y maupun y ke x. Secara grafis sisi pada undigraph tidak memiliki mata panah dan secara
notasional menggunakan kurung kurawal.
Contoh Undigraph G = {V, E}
V = {A, B, C, D, E, F, G, H, I,J, K, L, M}
E = { {A,B},{A,C}, {A,D}, {A,F}, {B,C}, {B,H}, {C,E}, {C,G}, {C,H}, {C,I}, {D,E},
{D,F}, {D,G}, {D,K}, {D,L}, {E,F}, {G,I}, {G,K}, {H,I}, {I,J}, {I,M}, {J,K},
{J,M}, {L,K}, {L,M}}.
Khusus graph, undigraph bisa sebagai digraph (panah di kedua ujung edge berlawanan)
Struktur data linear maupun hirarkis adalah juga graph. Node-node pada struktur linear ataupun
hirarkis adalah verteks-verteks dalam pengertian graph dengan sisi-sisinya menyusun node-node
tersebut secara linear atau hirarkis. Struktur data linear adalah juga tree dengan pencabangan pada
setiap node hanya satu atau tidak ada.
Linear 1-way linked list (digraph), linear 2-way linked list (undigraph).
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
Contoh :
Graph ini merupakan Undirected Weighted Graph. Order dari verteks A = 4,
verteks B = 3, dst. Adjacentcy list dari D adalah = {A, E, F, G, K, L}.
Representasi Graph
Representasi Matriks Keterhubungan Langsung (Adjacency Matrix) Matriks digunakan untuk
himpunan adjacency setiap verteks. Baris berisi vertex asal adjacency, sedangkan kolom berisi vertex
tujuan adjacency. Bila sisi graph tidak mempunyai bobot, maka [x, y] adjacency disimbolkan dengan 1
dan 0 bila tidak adjacency. Bila sisi graph mempunyai bobot, maka [x, y] adjacency disimbolkan dengan
bobot sisi tersebut, dan bila tidak disimbolka ¥.
• Algoritma Johnson untuk masalah All-pairs Shortest Path pada sparse graph
Dalam beberapa masalah graph lain, suatu graph dapat memiliki bobot negatif dan kasus ini dipecahkan
oleh algoritma Bellman-Ford. Yang akan dibahas di sini adalah algoritma Dijkstra yaitu mencari lintasan
terpendek dari suatu verteks asal tertentu vs ke setiap vertek.
Struktur Data dan Algoritma_Anita Sindar, ST, M.TI 2018
DAFTAR PUSTAKA
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
Moh. Sjukani. Algoritma (Algoritma dan Struktur Data 1) dengan C, C++, dan Java. Mitra
Wacana Media, 2007