Tuesday, April 7, 2020

Materi IT Sebelum UTS (Semester 2)

Linked List adalah salah satu bentuk struktur data, berisi kumpulan data
(node) yang tersusun secara sekuensial, saling sambungmenyambung,
dinamis dan terbatas.
- Linked List sering disebut juga Senarai Berantai
- Linked List saling terhubung dengan bantuan variabel pointer
- Masing-masing data dalam Linked List disebut dengan node (simpul) yang
menempati alokasi memori secara dinamis dan biasanya berupa struct
yang terdiri dari beberapa field.


Single Linked List adalah sebuah LINKED LIST yang menggunakan sebuah variabel pointer saja untuk menyimpan banyak data dengan metode LINKED LIST, suatu daftar isi yang saling berhubungan.


  Single Linked List Non Circular
Pengertian:
Single : artinya field pointer-nya hanya satu buah saja dan satu arah.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Ilustrasi Linked List
- Setiap node pada linked list mempunyai field yang berisi pointer ke node
berikutnya, dan juga memiliki field yang berisi data.
- Pada akhir linked list, node terakhir akan menunjuk ke NULL yang akan
digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list

Contoh program single linked list non circular tambah list di depan :
# include<stdio.h>
# include<stdlib.h>
# include<conio.h>
# include<iostream.h>
# include<ctype.h>
# include<string.h>

struct simpul
{
            int angka;
            struct simpul*berikut;
} ;

struct simpul *awal=NULL;
int bil;

void tambah_list_didepan(int info);
void isi_list();
void tampil_list();
void hapus_list();

void main ()

{

            clrscr();
            isi_list();
            clrscr();
            tampil_list();
            hapus_list();
            getch();
}
void tambah_list_didepan(int info)
{
            struct simpul *baru;
            baru=(struct simpul *)malloc(sizeof(struct simpul));
            baru->angka=info;

            baru->berikut=awal;


            awal=baru;
}

void isi_list()
{
            char jawab;
            do
            {
            clrscr();
            cout<<"\ninput bilangan :";
            cin>>bil;
            tambah_list_didepan(bil);
            cout<<"\ntambah data Y/T :"  ;
            cin>>jawab;
            }
            while (toupper(jawab)!='T');

}
void tampil_list()
{
            struct simpul* baca;
            int i;
            baca=awal;
            i=1;

            while(baca!=NULL)

            {
                        cout<<"\nbilangan ke-"<<i<<"yang dibaca :"<<baca->angka;
                        i++;
                        baca=baca->berikut;
            }

}

void hapus_list()

{
            struct simpul*hapus;
            hapus=awal;
            while(hapus!=NULL)
            {
                        awal=hapus->berikut;
                        free(hapus);
                        hapus=awal;
            }
}

Contoh program single linked list non circular tambah di belakang :
#include< stdio.h>
#include< stdlib.h>
#include< constream.h>
#include< ctype.h>
#include< string.h>

struct siswa
{
 char nrp[8],nama[20];
 int umur;
 float ipk;
};

struct simpul
{
 char nrp[8],nama[20];
 int umur;
 float ipk;
 struct simpul *berikut;
};

struct simpul *awal = NULL, *akhir = NULL;
struct siswa mhs;

void tambah_list_dibelakang(struct siswa info);
void isi_list();
void tampil_list();
void hapus_list();

void main()
{
 clrscr();
 isi_list();
 clrscr();
 tampil_list();
 hapus_list();
 getch();
}

void tambah_list_dibelakang(struct siswa info)
{
 struct simpul *baru;

 baru = (struct simpul *) malloc(sizeof(struct simpul));
 strcpy (baru -> nrp,info.nrp);
 strcpy (baru -> nama,info.nama);
 baru -> umur = info.umur;
 baru -> ipk  = info.ipk;

 if (awal == NULL)
 {
  awal = baru;
 }
 else
 {
  akhir -> berikut = baru;
 }
 akhir = baru;
 akhir -> berikut = NULL;
}

void isi_list()
{
 char jawab;

 do
 {
  clrscr();
  cout<<"NRP   : ";cin>>mhs.nrp;
  cout<<"Nama  : ";cin>>mhs.nama;
  cout<<"Umur  : ";cin>>mhs.umur;
  cout<<"IPK   : ";cin>>mhs.ipk;
  tambah_list_dibelakang(mhs);
  cout<<"\nTambah Data [Y/T]? : ";
  cin>>jawab;

 }
 while (toupper(jawab) != 'T');
}

void tampil_list()
{
 struct simpul *baca;
 int i;

 baca = awal;
 i = 1;

 while (baca != NULL)
 {
  cout<<"Data Ke : "<<i<<endl;
  cout<<"NRP     : "<<baca -> nrp<<endl;
  cout<<"Nama    : "<<baca -> nama<<endl;
  cout<<"Umur    : "<<baca -> umur<<endl;
  cout<<"IPK     : "<<baca -> ipk<<endl;
  cout<<endl;
  i++;
  baca = baca -> berikut;
 }
}

void hapus_list()
{
 struct simpul *hapus;

 hapus = awal;
 while (hapus != NULL)
 {
  awal = hapus -> berikut;
  free (hapus);
  hapus = awal;
 }
}

Circular Linked List adalah sebuah variasi dari Linked list dimana elemen pertama menunjuk samapi elemen terakhir dan elemen terakhir kembali menunjuk ke elemen pertama. Keduanya Singly Linked List dan Doubly Linked List bias dibuat ke dalam bentuk circular linked list.

Circular Single Linked List :

Sebuah single linked list, dimana pointer terakhir dari sebuah Node tidak null melainkan dikembalikan ke Node pertama sehingga terbentuk suatu rantai yang tidak habis /  melingkar (Circular).

Doubly Linked List :

Doubly Linked List adalah sebuah variasi dari Linked list dimana bias dinavigasikan dua arah, dapat diarahkan ke Node selanjutnya ataupun mundur ke Node sebelumnya dengan mudah dibandingkan dengan Single Linked List.

Dengan catatan, Node sebelum dari Node pertama adalah null dan Node setelah dari Node terakhir juga null.

Circular Doubly Linked List :

Pada doubly linked list, pointer selanjutnya dari Node terakhir ditujukkan ke Node pertama dan pointer sebelum dari Node pertama ditujukkan ke Node terakhir yang membuat bentuk Circular / lingkaran tidak habis.

STACK
Stack dalam pemograman adalah struktur array atau daftar fungsi panggilan dan parameter yang digunakan dalam pemrograman komputer modern dan arsitektur CPU. Mirip dengan tumpukan piring di restoran prasmanan atau kantin, elemen dalam tumpukan ditambahkan atau dihapus dari bagian atas stack, dalam "terakhir di pertama, pertama keluar" atau LIFO order.

Proses menambahkan data ke tumpukan disebut sebagai "push", sementara mengambil data dari tumpukan disebut "pop." Hal ini terjadi di bagian atas stack. Penunjuk stack menunjukkan tingkat stack, menyesuaikan sebagai elemen didorong atau muncul ke tumpukan.

Ketika sebuah fungsi dipanggil, alamat dari instruksi berikutnya didorong ke stack.

Ketika fungsi keluar, alamat muncul dari tumpukan dan eksekusi berlanjut di alamat tersebut.

Contoh pemograman Stack :
#include<stdio.h>
#include<stdlib.h>
struct stack{
 int data;
 struct stack *next;
}*top;
void pushHead(int data){
 struct stack *newNode;
 newNode=(struct stack*)malloc(sizeof(struct stack));
 newNode->data=data;
 newNode->next=top;
 top=newNode;
}
void popHead(){
 struct stack *toDelete;
 if(top==NULL){
  printf("Tidak ada isi\n");
 }
 else{
  toDelete=top;
  top=top->next;
  free(toDelete);
 }
}
void printdata(){
 struct stack *temp;
 if(top==NULL){
  printf("Tidak ada isi\n");
 }
 else{
  temp=top;
  while(temp!=NULL){
   printf("%d\n",temp->data);
   temp=temp->next;
  }
 }
}
int main(int argc, char const *argv[]) {
  int kasus, data;
  do {
    printf("Stack\n");
    printf("1. Add Stack\n");
    printf("2. Remove yg terakhir dimasukkan\n");
    printf("3. Exit\n");
    printf("Choose from 1-3: ");
    scanf("%d", &kasus);
    switch (kasus) {
      case 1:
        printf("Enter stack number[0-100]: ");
        scanf("%d", &data);
        pushHead(data);
        printdata();
        break;
      case 2:
        popHead();
        printdata();
        break;
    }
  } while(kasus!=3);
  return 0;
}

QUEUE
Antrian adalah struktur data yang berguna dalam pemrograman. Hal ini mirip dengan antrian tiket di luar aula bioskop, di mana orang pertama yang memasuki antrian adalah orang pertama yang mendapatkan tiket.

Antrian mengikuti aturan First in First Out (FIFO)-item yang masuk pertama adalah item yang keluar pertama juga.

Contoh pemograman Queue:
#include<stdio.h>
#include<stdlib.h>
struct Queue {
  int data;
  struct Queue *next;
};
struct Queue *head=NULL;
struct Queue *tail=NULL;
void pushTail(int data) {
  struct Queue *newNode;
  newNode=(struct Queue*)malloc(sizeof(struct Queue));
  newNode->data=data;
  newNode->next=NULL;
  if(head==NULL&&tail==NULL) {
    head=tail=newNode;
    return;
  }
  else {
    tail->next=newNode;
    tail=newNode;
  }
}
void popHead() {
  struct Queue *toDelete;
  toDelete=head;
  if(head==tail) {
    head=tail=NULL;
  }
  else {
    head=head->next;
  }
  free(toDelete);
}
void printdata() {
  struct Queue *temp;
  if(head==NULL) {
    printf("Tidak ada isi\n");
  }
  else {
    temp=head;
    while(temp!=NULL) {
      printf("%d\n", temp->data);
      temp=temp->next;
    }
  }
}
int main(int argc, char const *argv[]) {
  int kasus, data;
  do {
    printf("Queue\n");
    printf("1. Add Queue\n");
    printf("2. Remove yang pertama dimasukkan\n");
    printf("3. Exit\n");
    printf("Choose from 1-3:");
    scanf("%d", &kasus);
    switch (kasus) {
      case 1:
        printf("Enter Queue Number[0-100]: ");
        scanf("%d", &data);
        pushTail(data);
        printdata();
        break;
      case 2:
        popHead();
        printdata();
        break;
    }
  } while(kasus!=3);
  return 0;
}

Hashing Table
Hash Table adalah sebuah data structure yang menyimpan data dalam sebuah cara assosiatif. Dalam sebuah hash table, data disimpan dalam sebuah format array, dimana setiap hasil data mempunyai nilai indexnya sendiri yang unik. Akses dari data menjadi sangat cepat jika kita mengetahui index data yang diinginkan.
Sehingga, itu menjadi sebuah data structure dimana operasi insertion dan search menjadi sangat cepat terlepas dari size sebuah data. Hash Table menggunakan sebuah array sebagai sebuah penyimpanan menengah dan menggunakan teknik hash untuk menghasilkan sebauh index dimana sebuah element akan dimasukkan atau dimana elemen tersebut diletakkan.
Binary Tree
Sebuah binary tree terdiri dari parent nodes, atau daun, setiapnya menyimpan data dan juga menyambungkan sampai pada dua anak nodes lainnya (daun) yang diperlihatkan secara spasial dibawah sebuah node pertama dengan satu ditempatkan di sebelah kiri dan satu yang lain diletakkan di sebelah kanan.
Representasi
Biasa direpresentasikan dalam bentuk sebagai berikut:
                               10
                             /    \
                            6      14
                          /  \    /  \
                         5    8  11  18
Kita membuat sebuah kelas Node terdiri dari : Data yang akan disimpan, subtree pointer kiri, subtree pointer kanan, Parameterised constructor (node) Bersama dengan dua fungsi lain:
1. Build tree.
2. Print (menetapkan akar node sebagai sebuah argumen).

No comments:

Post a Comment