Algoritma adalah: Urutan aksi-aksi yang dinyatakan dengan jelas untuk memecahkan suatu masalah dan merupakan logika dan tahapan urutan yang sistematis.
Dan selama belajar stuktur data ada banyak materi yang saya pelajari diantaranya:pointer,Array,linked list,stack,Queue,Structure dan tree. Saya akan menjelaskan satu persatu.
•Pointer
Pointer adalah: KONSEP DASAR
Pointer adalah tipe data yang digunakan untuk menyimpan alamat memori sebuah variable, BUKAN menyimpan nilai datanya.
contoh:
char, float, int, double, long, dsb operator bintang/ asterisk (*)
OPERATOR POINTER
o Operator ‘&’ : untuk mendapatkan alamat memori operand/ variable pointer.
o Operator ‘*’ : untuk mengakses nilai data operand/ variable pointer.
EXAMPLE
#include
main()
{
char *Alamat_X, X; // Alamat_X bertipe pointer char, sedang X bertipe char
X = ‘M’; // variable X diisi dengan karakter ‘M’
Alamat_X = &X; // simpan alamat variable X ke variable Alamat_X
printf(“Nilai Var X = %c ada di alamat memori %p \n”, *Alamat_X, Alamat_X);
}
•Array
Array adalah: Array adalah sekelompok data sejenis yang disimpan ke dalam variabel dengan nama yang sama, dengan memberi indeks pada variabel untuk membedakan antara yang satu dengan yang lain.
VARIABEL ARRAY
nama_variabel[indeks]
ketentuan nama variabel arrray sama dengan nama variabel biasa.
indeks menunjukkan nomor dari variabel .
DEKLARASI VARIABEL ARRAY
array: tipe nama_variabel[indeks];
Contoh : float bil[10];
deklarasi variabel array dengan nama bil yang akan menampung 10 data yang bertipe float. Indeks 10 menunjukkan variabel bil terdiri dari 10 elemen, dimana setiap elemen akan menampung sebuah data.
Indeks array dimulai dari nol(0) , sedang nomor elemen biasanya dimulai dari satu(1). Nomor elemen dapat dibuat sama dengan nomor indeks untuk mempermudah pembuatan program yaitu dengan memberi indeks satu lebih banyak dari jumlah data yang dibutuhkan, sehingga menjadi :
float bil[11]
contoh:
#include
#include
void main()
{
int i;
float data[3],rata;
cout<<"masukkan 3 buah data :\n";
//input data
for (i=0;i<3;i++)
{
cout<<"Data["<cin>>data[i];
}
cout<<"Data yang anda masukkan :\n";
//tampilkan data
for (i=0;i<3;i++)
cout<<"Data["<for (i=0;i<3;i++)
rata=rata+data[i];
rata=rata/3;
cout<<"rata rata data di atas : "<
}
•Structure
Manfaat tipe data struct secara umum adalah untuk menyimpan paket (sekumpulan) data ke dalam satu buah nama variabel saja. Kumpulan data tersebut diikat sedemikian rupa menjadi satu. Kumpulan data di dalam sebuah struct bisa mempunyai tipe data dasar yang beraneka ragam. Kumpulan data dalam sebuah struct sangat dianjurkan membentuk sebuah kesatuan makna berkaitan dengan nama struct-nya. Misal, jika struct-nya bernama segitiga maka isi struct-nya antara lain: alas, tinggi, luas dan keliling.
Contoh:
#include
#include
struct mhs{
char nama [50];
int nilai;
};
void tampil (mhs masuk);
void main()
{
mhs mahasiswa;
clrscr();
cout<<"masukan nama: ";
cin>>mahasiswa.nama;
cout<<"masukan nilai: ";
cin>>mahasiswa.nilai;
{
if (mahasiswa.nilai>=0)&&(mahasiswa.nilai<=50)
cout<
cout<
cout<
cout<
tampil(mahasiswa);
getch();
}
void tampil(mhs masuk)
{
cout<<"hasilnya: "<
•Linked list
Pengertian Linked list :
sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian
struktur berupa rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain melalui pointer. Pointer adalah alamat elemen. Penggunaan pointer untuk mengacu elemen berakibat elemen-elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di memori.
Bentuk Umum :
Infotype adalah sebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list
Next adalah address dari elemen berikutnya (suksesor)
Jika L adalah list, dan P adalah address, maka alamat elemen pertama list L dapat diacu dengan notasi :
FIRST L
Sebelum digunakan harus dideklarasikan terlebih dahulu :
Single Linked List
Pembuatan Single Linked List dapat menggunakan 2 metode:
• LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)
• FIFO (First In First Out), aplikasinya : Queue (Antrean)
Double Linked List
Salah satu kelemahan single linked list adalah pointer (penunjuk) hanya dapat bergerak satu arah saja, maju/mundur, atau kanan/kiri sehingga pencarian data pada single linked list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut, dapat menggunakan metode double linked list. Linked list ini dikenal dengan nama Linked list berpointer Ganda atau Double Linked List.
Circular Double Linked List
Merupakan double linked list yang simpul terakhirnya menunjuk ke simpul terakhirnya menunjuk ke simpul awalnya menunjuk ke simpul akhir sehingga membentuk suatu lingkaran.
Contoh:
#include
#include
int pilihan, x;
struct TNode{
int data;
TNode *next;
};
TNode *head;
void init(){
head = NULL;
}
int isEmpty(){
if(head == NULL) return 1;
else return 0;
}
void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1){
head=baru;
head->next = NULL;
}
else{
baru->next = head;
head = baru;
}
cout<<"Data masuk \n";
}
void hapusDepan(){
TNode *hapus;
int d;;
if(isEmpty()==0){
if(head->next!=NULL){
hapus = head;
d = hapus->data;
head = head->next;
delete hapus;
}else{
d = head->data;
head = NULL;
}
cout<
getch();
}
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL){
cout<
bantu=bantu->next;
}
cout<
getch();
}
void main()
{
clrscr();
init();
do
{
clrscr();
cout<<"1.InsertDpan"<
cin>>pilihan;
switch(pilihan)
{
case 1:
{
{
cout<<"Masukan data="; cin>>x;
insertDepan(x);
}
break;
}
case 2:
{
{
hapusDepan();
}
break;
}
case 3:
{
{
tampil();
}
break;
}
}
}while(pilihan !=4);
getch();
}
•STACK
Adalah: LIFO stack
jenis kontainer adaptors, khusus dirancang untuk beroperasi dalam konteks LIFO (last-in first-out), di mana elemen dimasukkan dan hanya diambil dari akhir kontainer.
#include "stdio.h"
#include "conio.h"
typedef struct STACK {
int data [50];
int atas;
}
tumpukan;
STACK tumpuk;
void main() {
clrscr();
int pilihan, baru, i;
tumpuk.atas = -1;
do
{
clrscr ();
printf("1. Push Data\n");
printf("2. Pop Data\n");
printf("3. Print Data\n\n");
printf("Silahkan Masukan Pilihan Anda : \n");
scanf("%i", &pilihan);
switch (pilihan) {
case 1: {
if(tumpuk.atas== 5-1) {
printf("Tumpukan Penuh");
getch ();
} else {
printf("Data yang akan di Push = ");
scanf("%d",&baru);
tumpuk.atas++;
tumpuk.data[tumpuk.atas]=baru;
} break; }
case 2: {
if (tumpuk.atas== -1) {
printf("Tumpukan Kosong");
getch();
} else {
printf("Data yang akan di Pop = %d", tumpuk.data[tumpuk.atas]);
tumpuk.atas--;
getch();
} break; }
case 3: {
if(tumpuk.atas==-1){
printf("Tumpukan Kosong");
getch();
} else {
printf("\nData yang ada ditumpukan adalah : \n\n");
for(i=0; i<=tumpuk.atas;i++){
printf("%d\n", tumpuk.data[i]);
} getch(); }
break; }
default : {
printf("\nTidak ada dalam pilihan");
}
}
} while(pilihan >=1 && pilihan <= 3);
getch();
}
•QUEUE
Queue adalah suatu linear list di mana operasi DELETE terjadi pada sisi depan (FRONT) dan operasi INSERT terjadi pada sisi belakang (REAR).
Jika diberikan suatu Queue Q dengan elemen-elemennya yang terdiri atas Q1, Q2, ....., QT maka queue Q dituliskan
Q = [ Q1, Q2, .........., QT ]
FRONT(Q) = Q1 REAR(Q) = QT
Selanjutnya untuk menyatakan jumlah elemen dalam suatu queue Q digunakan notasi NOEL(Q).
PRINSIP KERJA QUEUE
Prinsip kerja Queue adalah FIFO (First In First Out), di mana data yang masuk terlebih dahulu akan keluar pertama.
Contoh:
include
#include
void main()
{
int cek=0,data[10],x,hapus;
char pil;
do
{
clrscr();
cout<<"1.Tambah Antrian/Push"<
pil=getche();
cout<
if(pil=='1') //PUSH
{
if(cek==10)
cout<<"Antrian Penuh"<
{
cout<<"Masukkan nilai-->"; cin>>x;
data[cek]=x;
cek++;
}
getch();
}
else
{
if(pil=='2') //POP
{
if(cek==0)
cout<<"Antrian kosong"<
{
hapus=data[0];
for(int v=0;v
data[cek-1]=NULL;
cek--;
cout<<"Data dgn nilai="<
getch();
}
else
{
if(pil=='3') //CEK DATA
{
if(cek==0)
cout<<"Antrian kosong."<
else
{
cout<
cout<<"|";
cout<cout<<"|";
}
}
getch();
}
}
}
}while(pil='4');
}
.TREE
Tree merupakan salah satu bentuk struktur data bukan linier yang menggambarkan bentuk hierarki antara elemen-elemen. Tree biasanya terdiri dari root (akar) dan node-node (simpul-simpul) yang berada di bawah root. Struktur seperti tree sangat banyak sekali dgunakan dalam dunia nyata, misalnya: struktur organisasi suatu perusahaan, pengaturan filesystem, daftar isi sebuah buku, dan masih banyak lagi.
Ilustrasi struktur data tree:
Ilustrasi Tree
Degree (derajat) adalah jumlah edge yang keluar dan masuk dari sebuah node.
Contoh : node E memiliki in degree 1 dan out degree 2
Root (akar) adalah node yang memiliki derajat keluar >=0 dan derajat masuk = 0.
Subtree / child adalah bagian salah satu node dibawah root sampai ke bawah.
node F merupakan parent dari node J dan K
Ancestor adalah Node yang berada di atas node lain.
Descendant adalah node yang berada di bawah node lain.
Leaf (daun) adalah semua node yang derajat masuknya 1 dan derajat keluarnya 0.
Sibling adalah node yang mempunyai level yang sama dan parent yang sama.
Height (ketinggian) adalah level tertinggi dari tree ditambah 1.
Weight (bobot) adalah jumlah leaf(daun) pada tree.
BINARY TREE
Sebuah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal 2 subtree yang disebut sebagai subpohon kiri(left subtree) dan subpohon kanan (right subtree) dan kedua subtree tersebut harus terpisah, atau dengan kata lain tiap node dalam binary tree hanya boleh memiliki paling banyak 2 child.
Binary tree terdiri dari :
1.Full Binary Tree : semua node (kecuali leaf pasti memiliki 2 anak dan tiap subtree memiliki panjang path yang sama).
2.Complete Binary Tree : mirip dengan full binary tree, tetapi tiap subtree boleh memiliki panjang path yang berbeda dan tiap node (kecuali leaf memiliki 2 anak)
3.Skewed Binary Tree : binary tree yang semua nodenya (kecuali leaf) hanya memiliki satu anak.
BINARY SEARCH TREE
Binary tree dengan sifat bahwa nilai dari semua left child harus lebih kecil daripada nilai dari right child dan parentnya.
(sumber google)
Kesimpulan:Algoritma adalah rangkaian alur,diamana didlalmnya banyak terdapat cara cara untuk membuat program.dan menyeesaikan masalah,melalui banyak program program yang ada.
Kesan:Menurut saya algoritma adalah pelajaran yang cukup sulit dan membutuhkan peran logika yang sangat besar,karena pada prinsinya setiap masalah yang kita hadapi dalam algoritma sangat diperlukan logika yang tepat dan benar.
Pesan:sebaiknya algorima harus kita kuasai,karena algoritma sangat penting.dan algoritma dalam ilmu computer sangat berkaitan erat.
Dan tips buat dosen algoritma saya,Pak Dody Sanjaya.menurut saya pak Dody adalah dosen yang baik,asyik,dan santai.pak dody dapat membuat pelajaran algoritma menjadi tidak membosankan dan cara mengajarnya pun enak.dan untuk kita mendapat nilai bagus di mata kuliah pak dody cukup mudah,yaitu kita rajin masuk kuliah dan berpenampilan yang rapi..terima kasih pak dody.