Selasa, 01 Mei 2018

TUGAS SENARAI BERANTAI
(LINKED LIST)


1.PENGERTIAN
Senarai berantai  atau kadang-kadang disebut dengan senarai bertaut atau daftar bertaut dalam ilmu komputer merupakan sebuah struktur data yang digunakan untuk menyimpan sejumlah objek data biasanya secara terurut sehingga memungkinkan penambahan, pengurangan, dan pencarian atas elemen data yang tersimpan dalam senarai dilakukan secara lebih efektif. Pada praktiknya sebuah struktur data memiliki elemen yang digunakan untuk saling menyimpan rujukan antara satu dengan lainnya sehingga membentuk sebuah senarai abstrak, tiap-tiap elemen yang terdapat pada senarai abstrak ini seringkali disebut sebagai node. karena mekanisme rujukan yang saling terkait inilah disebut sebagai senarai berantai.

2.JENIS JENIS 
>Senarai tunggal
Bila struktur data sebuah node hanya memiliki satu tautan atas node berikutnya dalam sebuah senarai, maka senarai tersebut dinamakan sebagai senarai tunggal.
>Senarai ganda
Berbeda halnya dengan senarai tunggal, pada senarai ganda, struktur data atas tiap-tiap node memiliki rujukan pada node sebelum dan berikutnya. Sebagian algoritme membutuhkan taut ganda, contohnya sorting dan reverse traversing.
>Senarai sirkuler
Pada dua jenis senarai sebelumnya, node terakhir dalam senarai tersebut merujuk pada null yang artinya akhir dari sebuah senarai, begitu pula null sebagai rujukan node sebelumnya pada node pertama bila senarai yang dimaksudkan adalah senarai ganda. Pada senarai sirkuler, informasi rujukan pada node terakhir akan merujuk pada node pertama, dan rujukan pada node pertama akan merujuk pada node terakhir bila yang digunakan sebagai dasar implementasi adalah senarai ganda.

3.JENIS OPERASI
3.Operasi-Operasi yang ada pada Linked List :
–        Insert
Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list.
–        IsEmpty
Fungsi ini menentukan apakah linked list kosong atau tidak.
–        Find First
Fungsi ini mencari elemen pertama dari linked list
–        Find Next
Fungsi ini mencari elemen sesudah elemen yang ditunjuk now
–        Retrieve

Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu dikembalikan oleh fungsi.
–        Update
Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu.
–        Delete Now
Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalahelemen pertama dari linked list (head), head akan berpindah ke elemen berikut.
–        Delete Head
Fungsi ini menghapus elemen yang ditunjuk head. Head berpindah ke elemen sesudahnya.
–        Clear
Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda ingin mengakhiri program yang menggunakan linked list. Jika anda melakukannya, data-data yang dialokasikan ke memori pada program sebelumnya akan tetap tertinggal di dalam memori.

5. CONTOH PROGRAM
contoh program Double Linked List 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct node
{
        struct node *prev;
        int data;
        struct node *next;        
};

typedef struct node node;

node *pHead = NULL;

node *alokasiNodeBaru()
  node *pNew = NULL; 
  pNew = (node *) malloc(sizeof(node)); 
  return(pNew); 
}
void tambahAwal(node *pNew)
{
     printf("masukkan bilangan: "); scanf("%d",&pNew->data);
     
     if(pHead == NULL)
{
              pNew->prev = pHead;
              pNew->next = pHead;
              pHead = pNew;
     }
     else
    {
              //cari node yang menunjuk ke pHead
              pNew->prev = pHead;
              pNew->next = pHead;
              pHead->prev= pNew;
              pHead = pNew;   
     }
}
void cetak()
{
     node *pWalker = pHead; int i=1;
     while(pWalker!=NULL)
{
         printf("node ke-%d = %d\n",i,pWalker->data);
         i++;
         pWalker=pWalker->next;        
     }
     printf("NULL\n");
}

void tambahTengah(node *pNew)
{
     node *pWalker;
     pWalker=pHead;
     int nilai,sisip;
     printf("masukkan nilai yang ingin ditambahkan: "); scanf("%d",&pNew->data);
     cetak(); 
     printf("data disisipkan setelah nilai : "); scanf("%d",&sisip);
     while(pWalker!=NULL && pWalker->data!=sisip)
{
                         pWalker=pWalker->next; 
}
                       
     if(pWalker==NULL) {printf("\ndata tidak ditemukan"); getch();
}
     else 
{
           pNew->next=pWalker->next;
           pWalker->next->prev=pNew;
           pWalker->next=pNew;
           pNew->prev=pWalker;
           }
}
void tambahAkhir(node *pNew)
{
     node *pEnd;
     pEnd=pHead;
     printf("masukkan nilai yang ingin ditambahkan: "); scanf("%d",&pNew->data);   
     while(pEnd->next!=NULL)
{
                         pEnd=pEnd->next; 
}
     pEnd->next=pNew;
     pNew->prev=pEnd;
     pNew->next=NULL;        
}
void hapusAwal()
{
     node *pHapus;
     pHapus=pHead;
     pHead=pHead->next;
     pHead->prev=NULL;
     free(pHapus);

void hapusTengah()
{
     node *pCari;int hapus;
     pCari=pHead;
     cetak();
     printf("masukkan bilangan yang ingin dihapus: "); scanf("%d",&hapus);
     while(pCari!=NULL && pCari->data!=hapus)
{
                               pCari=pCari->next;
                               }                      
    pCari->prev->next=pCari->next;
    pCari->next->prev=pCari->prev;
     free(pCari);
}
void hapusAkhir()
{
     node *pEnd;
     pEnd=pHead;
     while(pEnd->next!=NULL)
{
                              pEnd=pEnd->next;
                              }
     pEnd->prev->next=NULL;
     free(pEnd); 
}   
 int main(int argc, char *argv[])
 {
    node *pNew; int pilih,bil;
    do{system("cls");
    printf("----------MENU-----------");
    printf("\n1.tambah awal");
    printf("\n2.tambah tengah");
    printf("\n3.tambah akhir");
    printf("\n4.hapus awal ");
    printf("\n5.hapus tengah");
    printf("\n6.hapus akhir");
    printf("\n7.cetak");
    printf("\n9.exit");
    printf("\npilihan : ");scanf("%d",&pilih);
    if(pilih==1){pNew=alokasiNodeBaru();
                 tambahAwal(pNew); 
                 }
    else if(pilih==2){pNew=alokasiNodeBaru();
                 tambahTengah(pNew);
                 }
    else if(pilih==3){pNew=alokasiNodeBaru();
                 tambahAkhir(pNew);
                 }
    else if(pilih==4){hapusAwal();
}
    else if(pilih==5){hapusTengah();
}
    else if(pilih==6){hapusAkhir();
}
    else if(pilih==7){cetak();getch();
}                         
}
  while(pilih!=9);
  
  printf("\n");
  system("PAUSE");    
  return 0;
}





















Selasa, 06 Maret 2018

TUGAS 2 STRUKTUR DATA HALAMAN 144

1. Seorang progammer yang baik harus mengetahui cara pembuatan program yang bagus. Berikan        penjelasan tentang program yang bagus seperti apa!
Jawab : Program yang baik program yang bisa digunakan secara efesien dan efektif yang dpat                           digunakan  membantu pekerjaan secara efektif dan mudah menggunakannya
             Program dikatakan bagus apabila:
             - Program berjalan secara benar
             - Program mudah dibaca dan di mengerti
             - Program mudah di debug
             - Program mudah dilakukan modifikasi
  
             Sebuah program juga harus menghasilkan output yang benar serta berjalan secara efisien

2. Struktur data merupakan suatu cara untuk menyimpan dan mengatur sebuah data supaya dapat
    digunakan secara efektif dan efesien . Sebutkan dan jelaskan jenis jenis struktur data secara umum
Jawab : Secara Umum, struktur data dikelompokan menjadi dua kategori, yaitu struktur data primitif
             (primitive) atau sederhana dan non-primitif(non-primitive) atau majemuk.
             Struktur data primitif adalah  struktur data yang didukung (bawaan) oleh bahasa
             pemrograman. sedangkan struktur data non-primitif adalah struktur data yang dibangun
             menggunakan struktur data primitif.

3. Jelaskan beberapa aplikasi perangkat lunak komputer yang menggunakan struktur data sebagai
    dasar pengembangannya
Jawab : Ios, Android, Windows. kenapa ios lebih smooth dari OS yang lain padahal menggunakan
             RAM(Random Access Memory) yang lebih kecil? Karena pada struktur data nya di buat
             dengan Baik dan lebih Bagus dari perangkat struktur data yang lainnnya

4. Abstract Data Type(ADT) merupakan cara untuk melihat struktur data, dengan fokus pada apa
    yang dilakukan dan mengabaikan proses yang terdapat didalamnya saat menjalankan
    eksekusi . Buatlah algoritma yang menganalogikan abstraksi perangkat elektronik.
Jawab :   Nama tipe data
                tipe_jam

               Domain
               setiap nilai tipe_jam adalah waktu dalam format jam, menit, & detik
              operasi didalamnya
             *Menetapkan waktu
             *Menghasilkan nilai balik berupa waktu
             *Menampilkan waktu
             *Melakukan increment waktu dalam detik
             *Melakukan increment waktu dalam menit
             *Melakukan increment waktu dalam jam
             *Membandingkan dua waktu untuk menguji ekuilitas

5. Berikan penjelasan dan bandingkan beberapa pendekatan yang dapat digunakan untuk merancang
    sebuah algoritma.
Jawab : Terdapat dua pendekatan umum yang bisa digunakan dalam merancang algoritma, yaitu
             pendekatan perancangan secara top-down, dan pendekatan secara bottom- up.
             Pendekatan secara top-down dimulai dengan cara membagi algoritma yang kompleks
             menjadi satu atau lebih dari satu modul. Terbagi menjadi beberapa sub-modul, dan proses
             ini di lakukan berulang-ulang hingga kompleksitas modul yang diinginkan terpenuhi.
             pendekatan perancangan secara bottom-up merupakan kebalikan dari pendekatan  top-down.
             Dimana dalam pendekatan ini dimulai dengan pembuatan modul panggil dasar, kemudian
             dilanjutkan ke perancangan modul tingkat tinggi.

6. Sebuah program dapat memiliki lebih dari satu algoritma. Rancang algoritma untuk program
    kalkulator yang dapat melakukan operasi penjumlahan dan pengurangan.
Jawab :  start
                     angka<==Masukan
                     Hitung jumlah operasi penjumlahan = n+n
                    Tampilkan<==Hasil
              end
          
              start
                  angka<==Masukan
                  Hitung jumlah operasi pengurangan = n-n
                  Tampilkan<==Hasil
               end
7. Ukurlah komplesitas algoritma yang anda rancang menggunakan notasi big O!
Jawab :
            fungsi pangkat akan selalu diselesaikan dalam 2 + y langkah. Melihat bagiamana y akan mempengaruhi jumlah langkah eksekusi, mari kita lihat seberapa banyak pengaruh y terhadap jumlah langkah eksekusi kode: 
YProses PerhitunganJumlah Langkah
12 + 13
102 + 1012
1002 + 100102
10002 + 10001002
100002 + 1000010002

Senin, 26 Februari 2018

STRUKTUR DATA

A.   Pengertian

Struktur  Data  adalah  tata cara untuk melakukan penyimpanan, penyusunan, dan pengaturan data agar data dapat digunakan secara efisien. Dalam bahasa pemrograman struktur data  adalah  tata letak kolom-kolom data, baik yang terlihat oleh pengguna maupun yang tidak terlihat oleh pengguna, yang tidak terlihat tersebut hanya digunakan dalam proseses program saja.

B.   Kegunaan

1.)  Memudahkan dalam memahami dan memecahkan masalah  algoritma
2.)  Meningkatkan  efisiensi  memori  saat  program  komputer  sedang  bekerja
3.)  Proses reservasi memori yang tidak perlu akan diminimalisasi

C.   Jenis-jenis

1.    Struktur data sederhana , meliputi:
a.    Array (Larik)
Larik adalah struktur data statik yang menyimpan sekumpulan elemen yang  bertipe sama, misalnya tipe sederhana, tipe terstruktur dan lain-lain. Setiap  elemen  dapat diakses langsung melalui indeksnya. Indeks larik harus berupa  tipe data yang berurutan dan banyaknya elemen larik harus diketahui dahulu sebelum program dieksekusi.

b.    Record (catatan)
Catatan adalah kumpulan data yang terdiri dari beberapa field (isian) dengan berbagai macam tipe data.

2.    Struktur data majemuk, meliputi:
a.    Linear

Queue (Antrian)
Queue (Antrian) adalah list linear yang dikenali elemen pertama (head) dan elemen terakhirnya (tail). Aturan penyisipan selalu dilakukan setelah elemen terakhir, dan aturan penghapusan selalu dilakukan pada elemen pertama. Antar elemen satu dengan yang lain dapat diakses melalui informasinext.




Stack (Tumpukan)
Stack (Tumpukan) adalah list linear yang dikenali elemen puncaknya (top). Aturan penyisipan selalu dilakukan diatas top, dan aturan penghapusan selalu dilakukan pada top. Elemen yang di tambahkan paling terakhir itulah elemen yang akan dihapus. Elemen stack tersusun secara LIFO (Last In First out).

List dan Multi-List (Daftar)
List dan Multi-List (Daftar) adalah sekumpulan list linear dengan elemen yang bertype sama dan memiliki urutan tertentu. Setiap elemennya memiliki 2 bagian.

b.    Non Linear
Binary tree (Pohon Biner)
Binary tree (Pohon Biner) adalah himpunan terbatas yang mungkin kosong atau terdiri dari sebuah simpul yang disebut akar dan dua buah himpunan lain yang disjoint yang disebut sub pohon kiri (left) dan sub pohon kanan (right). Karakteristik pohon biner adalah setiap simpul paling banyak hanya memiliki dua buah anak dan mungkin tidak punya anak.

Graph (Graf)
Graph (Graf) adalah struktur data yang paling umum. Struktur graph memungkinkan keterhubungan tak terbatas antara entitas-entitas data.


Referensi : http://lutfianaridahani.blogspot.co.id/2017/02/normal-0-false-false-false-en-us-x-none.html