ALGORITMA & STRUKTUR DATA C Programming MATERI UAS ALGORITMA & STRUKTUR DATA C Programming
ARRAY/LARIK Array adalah kumpulan dari nilai-nilai data yang bertipe sama dalam urutan tertentu yang menggunakan nama yang sama. Nilai-nilai data itu disebut dengan elemen. Letak atau urutan dari suatu elemen array ditunjukkan oleh suatu index/subscript. Untuk bahasa C, elemen pertama dari suatu array dimulai dari indeks nol. Suatu array dapat ber-dimensi satu atau lebih.
ARRAY 1 DIMENSI tipe_data nama_variabel[n]; Bentuk umum deklarasi array 1 dimensi: tipe_data nama_variabel[n]; Dimana n adalah jumlah elemen atau ukuran array Contoh: int x[3]={5,3,7}; Artinya Array x bertipe integer, mempunyai 3 elemen yaitu x[0], x[1] dan x[2] x[0] bernilai 5, x[1] bernilai 3, x[2] bernilai 7
Beda array dengan varibel biasa: Sebuah larik/array dapat mempunyai sejumlah nilai, sedang sebuah varibel biasa hanya dihubungkan dengan sebuah nilai saja Dengan array Dengan variabel biasa
ARRAY 2 DIMENSI Mempunyai elemen BARIS & KOLOM Dapat dipakai untuk representasi sebuah MATRIK Struktur data untuk rekapitulasi informasi berdasar baris dan kolom TABEL, misal: penjualan barang Memakai NESTED LOOPING dalam operasinya
ARRAY 2 DIMENSI Bentuk umum penulisan tipe_data variabel[i] [j]; Dimana i dan j adalah ukuran dari array. i menunjukkan jml baris, j menunjukkan jml kolom Jumlah data yang bisa disimpan oleh array 2 dimensi adalah i x j. Contoh: int x[2][4]={8,5,9,8,8,2,1,0}; merepresentsikan matriks dengan 2 baris dan 4 kolom x= 8 5 9 8 8 2 1 0
Array Berdimensi Banyak Bentuk umum deklarasi array dimensi satu: tipe_data nama_var[i][j]..[n]; dimana i, j, n adalah ukuran dari array. Contoh deklarasi: int nilai[4][2][7][21];
Array Tak Berukuran Array dapat dideklarasikan tanpa memberi ukuran (jumlah data dalam array). Dengan syarat: Harus langsung diinisialisasi. Hanya elemen pertama yang boleh tidak berukuran. Contoh: int x[] = {32, 45, 67,21}; int x[][2]={{9,7},{4,2},{8,3}};
STRING
STRING String merupakan bentuk data yang digunakan untuk menampung dan memanipulasi data teks. Pada C, string bukan merupakan satu tipe data tersendiri, melainkan merupakan array dari karakter. Contoh: char mystring[35]; char myname[] = “Hello World”;
Konstanta String Konstanta string ditulis dengan diawali dan diakhiri tanda petik ganda. Contoh: #define abjad “ABeCe” #define judul “Stringku”
Penggunaan Memory Komposisi penyimpanan string dalam memori: Setiap karakter akan menempati memori sebesar 1 byte Byte terakhir otomatis akan berisi karakter NULL (\0)
Variable String Variabel string adalah variabel yang dipakai utuk menyimpan nilai string. Variabel string sebenarnya merupakan variabel array bertipe data char. string = array of char Contoh: char nama[35]; char alamat[60];
Inisialisasi Variabel String Seperti halnya variabel tipe lain, suatu variabel string dapat diinisialisasi dengan elemen terakhirnya berupa karakter NULL. Contoh: char name[]={‘J',’o',‘y',’\0’}; char name[]= “Joy”; Penugasan atau pemberian nilai ke variabel string seperti dibawah ini tidak diperkenankan name = “RINI”;
Array String suatu string dapat dibentuk dari array karakter berdimensi satu Dengan cara yang sama, berarti array string dimensi satu dapat dibentuk dari array karakter dimensi dua. Array string dimensi dua dapat dibentuk dari array karakter dimensi tiga dan seterusnya.
Array String Contoh berikut menunjukkan deklarasi suatu Array string dimensi satu yang dibentuk dari array karakter dimensi dua. (perhatikan bahwa deklarasi ini menggunakan tipe char) #include <stdio.h> main() { int i,j; char Hari[7][10]={"Minggu","Senin","Selasa","Rabu","Kamis","Jum'at","Sabtu"}; for(i=0;i<7;i++) { for(j=0;j<10;j++) printf("%c",Hari[i][j]); printf("\n"); }
Output String Untuk menampilkan isi variabel string ke layar monitor bisa menggunakan perintah puts() atau printf(). Fungsi puts() akan menampilkan isi dari var_string dan secara otomatis menambahkan karakter '\n' di akhir string Sedangkan fungsi printf() akan menampilkan isi variabel string tanpa memberikan tambahan '\n‘. Contoh: puts(nama); printf (“%s”, nama);
Input String Untuk memberikan nilai string dari keyboard dapat menggunakan perintah gets() atau scanf(). Contoh: gets(nama); scanf(“%s”, nama); Keterangan: nama adalah variabel bertipe array of char. Didepan nama tidak perlu ada tanda & (operator alamat). Kalau memakai scanf(), data string masukan tidak boleh mengandung spasi.
Contoh #1 #include <stdio.h> main() { char nama[35], kota[15]; printf("Masukkan nama Anda : "); gets(nama); printf("Masukkan kota Anda: "); scanf("%s", kota); printf("\nHallo "); puts(nama); printf("Rumahmu %s ya...\n“,kota); printf("Bye.. Bye..\n"); }
Mengakses String Variabel string merupakan bentuk khusus dari array bertipe char Elemen dari variabel string dapat diakses seperti halnya pengaksesan elemen pada array. Contoh: printf(“%c”, nama[2]);
Fungsi-Fungsi Pada String strcpy(): untuk menyalin nilai string. strlen(): untuk mengetahui panjang nilai string. strcmp(): untuk membandingkan dua nilai string. strcat(): untuk menggabung nilai string. strchr(): untuk mencari nilai karakter dalam string.
Contoh #2 #include <stdio.h> main() { char str01[] = "Piala"; char str02[] = "Pialang"; char str03[20]; printf("Panjang str01 = %d karakter.\n", strlen(str01)); strcpy(str03, "Ini string ke 3"); printf("Isi dari str03 = %s.\n", str03); printf("str01 VS str02 = %d\n", strcmp(str01, str02)); strcat(str01, str02); printf("Isi str01 sekarang = %s.\n", str01); }
POINTER Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua.
Deklarasi Variabel dan Pointer deklarasi variabel dalam bahasa C / C++ adalah sebagai berikut: tipe_data nama_variabel Bentuk umum deklarasi pointer adalah : tipe_data *nama_pointer
Dengan pointer kita dapat mengetahui nomor – nomor memory dan sekaligus memanipulasi isi dari variabel yang “ditunjuk” oleh pointer. Agar suatu variabel pointer dapat menunjuk ke variabel lain, variabel pointer ini harus diisi dengan alamat dari variabel yang hendak ditunjuk. Sintaksis proses penunjukan pointer ke variabel lain adalah: tipe_data1 nama_variabel_biasa; tipe_data2 *nama_variabel_pointer; nama_variabel_pointer=&nama_variabel_biasa;
Mengakses Variabel Dengan Pointer Dalam bahasa C / C++ kita bisa mengakses variabel dengan dua cara yaitu : Secara langsung Syntax yang digunakan adalah : tipe_data nama_variabel; tipe_data nama_variabel = nilai variabel; Secara tidak langsung dengan menggunakan pointer Karena pointer adalah variabel yang menunjuk variabel lain, maka kita dapat mengakses variabel lain dengan memanipulasi nilai yang ruangan memory-nya ditunjuk oleh pointer tersebut. Dalam bahasan pointer ada dua operator yang memegang kunci operasi pada pointer, yaitu operator & dan operator *.
Operator & Operator & merupakan operator alamat. Pada saat pendeklarasian variabel, user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of".
Operator * Operator * merupakan operator reference. Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by".
Dalam teknis penggunaan pointer, pengaksesan variabel dilakukan dengan cara menggunakan kedua operator tersebut. Jika kita ingin melihat alamat dari variabel yang ditunjuk kita gunakan operator &. Sedangkan untuk mengetahui nilai variabel yang ditunjuk kita gunakan operator *.
Contoh Program 1. Dasar pointer
2. mengakses nilai variable secara langsung dan secara tidak langsung
LINKED LIST Linked list (one way list) adalah suatu kumpulan elemen data (yang disebut sebagai node) dimana urutannya ditentukan oleh suatu pointer. Setiap elemen (node) dari suatu linked list terdiri atas dua bagian, yaitu : INFO, berisi informasi tentang elemen data yang bersangkutan. NEXT (link field/next pointer field), berisi alamat dari elemen (node) selanjutnya yang dituju.
Berikut ini sebuah contoh linked list yang terdiri atas 4 node :
Pada node ke-4 field NEXT-nya berisi NULL, artinya node ke-4 tsb Pada node ke-4 field NEXT-nya berisi NULL, artinya node ke-4 tsb. adalah node terakhir. Node-node dalam linked list tidak harus selalu digambarkan paralel seperti pada gambar diatas. Linked list pada contoh diatas dapat pula digambarkan seperti berikut ini :
OPERASI DASAR PADA LINKED LIST. Ada beberapa aturan yang didefinisikan pada operasi didalam linked list, yaitu : - Jika P adalah suatu variabel pointer, maka nilainya adalah alamat atau lokasi dari variabel lain yang dituju. - Operasi yang didefinisikan pada suatu variabel pointer adalah : 1. Test apakah sama dengan NULL. 2. Test untuk kesamaan dengan variabel pointer lain. 3. Menetapkan sama dengan NULL. 4. Menetapkan menuju ke node lain.
Notasi yang didefinisikan sehubungan dengan operasi diatas adalah : 1. NODE(P), artinya node yang ditunjuk oleh pointer P. 2. INFO(P), artinya nilai INFO dari node yang ditunjuk pointer P. 3. NEXT(P), artinya hubungan (link) selanjutnya dari node yang ditunjuk oleh pointer P.
Sebagai contoh, perhatikan linked list dibawah ini : NODE(P) = node yang ditunjuk oleh P yaitu node pertama. INFO(P) = A NEXT(P) = node ke-dua INFO(NEXT(NEXT(P))) = C
Linier Linked List Setiap node yang mempunyai pointer dimana menunjuk ke simpul berikutnya sehingga membentuk suatu rantaian / untaian, dengan demikian hanya diperlukan sebuah variable pointer. Pembuatan single linked list dapat menggunakan 2 metode yaitu: 1. LIFO (LAST IN FIRST OUT) adalah suatu metode pembuatan linked list dimana data yang masuk paling akhir adalah data yang paling pertama keluar. 2. FIFO (FIRST IN FIRST OUT) adalah suatu metode pembuatan llinked list dimana data yang masuk paling awal adalah data yang paling pertama keluar juga.
Contoh Program 1.
Hasil nya:
Penggalan program diatas merupakan salah satu contoh penggunaan fungsi linked list. Program diatas merupakan program pembuatan simpul menggunkan linked list.
2. #include <stdio. h> #include <stdlib 2. #include <stdio.h> #include <stdlib.h> struct DATA { int number; struct DATA *next; }; int cari(struct DATA *pList, int num); void simpan(struct DATA *pList, int num); void tampil(struct DATA *pList); void hapus(struct DATA *pList, int num);
int main(void) { int num = 0; int i = 1; int r = 0; struct DATA int main(void) { int num = 0; int i = 1; int r = 0; struct DATA *pList; pList = (struct DATA *)malloc(sizeof(struct DATA)); pList->number = 0; pList->next = NULL; while(i != 0) { printf("\n-- Manajamen data NIM Mahasiswa --\n");
printf("1 > Simpan\n"); printf("2 > Hapus\n"); printf("3 > Cari\n"); printf("4 > Tampil\n"); printf("0 > Exit\n"); printf("\nPilih menu ? "); scanf("%d", &i); switch(i) { case 0: default: printf("Terima Kasih..\n"); i = 0; break;
case 1: printf("== Simpan == \n"); printf("Masukan NIM : "); scanf("%d", &num); simpan(pList, num); break; case 2: printf("== Hapus ==\n"); printf("NIM yang di hapus: "); hapus(pList, num); case 3: printf("== Cari ==\n"); printf("Masukan NIM untuk di cari: ");
if((r = cari(pList, num)) == -1) printf("NIM `%d' tidak ditemukan\n", num); else printf("NIM `%d' barapa di posisi `%d'\n", num, r); break; case 4: printf("== Display ==\n"); tampil(pList); } free(pList); system("pause"); return(0);
void tampil(struct DATA. pList) { while(pList->next void tampil(struct DATA *pList) { while(pList->next != NULL) { printf("%d \n", pList->number); pList = pList->next; } void simpan(struct DATA *pList, int num) { while(pList->next != NULL) pList->next = (struct DATA *)malloc(sizeof(struct DATA)); pList->next->number = num; pList->next->next = NULL;
void hapus(struct DATA. pList, int num) { struct DATA void hapus(struct DATA *pList, int num) { struct DATA *temp; temp = (struct DATA *)malloc(sizeof(struct DATA)); if(pList->number == num) { temp = pList->next; free(pList); pList = temp; } else { while(pList->next->number != num) pList = pList->next; temp = pList->next->next; free(pList->next); pList->next = temp; }
int cari(struct DATA *pList, int num) { int r = -1; int i = 1; while(pList->next != NULL) { if(pList->next->number == num) return i; else i++; pList = pList->next; } return r;
Hasil nya: