Jumat, 28 Februari 2020

Belajar Data Structure



                                     
Pointer
Pengertian Pointer
Pointer/penunjuk adalah sebuah variable yang menunjuk ke alamat variable yang lain. Pointer hanya menyimpan alamat memori yang berasal dari variabel atau obyek. Kegunaan dari pointer antara lain adalah untuk menunjuk suatu memori, mendapatkan isi memori, ataupun mengubah isi memori.

Operator pada Pointer


The address operator (&)   : Berfungsi untuk mendapatkan alamat memori yang dituju.


The dereferencing operator (*): Berfungsi untuk mendapatkan nilai yang dituju.



Cara Declare Pointer


Berikut adalah cara declare pointer


Tipe data  *nama_pointer;

contoh:

                    int a;

                    int *pa;

                    pa = &a;

                    p = 10; atau *pa = 10;


Pointer to pointer


Dalam  Bahasa  C kita dapat memakai pointer yang menunjuk ke pointer yang lain. Untuk Declare pointer to pointer, kita tinggal menambahkan jumlah *.

Contoh:

                        Int a=10;

                    Int *pa, **ppa;

                    Pa=&a;

                    Ppa=&pa;

===============================================================

Array
Pengertian array
Array adalah variabel yang menyimpan kumpulan data yang memiliki tipe data yang sama. adi dapat dikatakan bahwa array merupakan kumpulan dari data-data tunggal yang dijadikan dalam 1 variabel.

Cara deklarasi & akses array
Berikut adalah cara deklarasi & akses array
Sintaks:       tipe nama[size];
Contoh:       Int angka[3];
                    Angka[0]=3;
                    Angka[1]=8;
                    Angka[2]=2;

Menyimpan nilai array
          Menyimpan nilai ke dalam array: initialize, input, assign.
1.    Initialize
Contoh: int marks[5]={3,2,6,8,9}
2.    Input
Contoh: int a, marks[10];
               For(i=0;i<10;i++)
               Scanf(“%d”, &marks[i]);
3.    Assign
Int i, arr1[10],arr2[10];
For(i=0;i<10;i++)
          Arr2[i]=arr[i];

Operasi pada array
          Berikut macam-macam operasi yang bisa dilakukan pada array:
1.    Insertion
2.    Traversal
3.    Insertion
4.    Searching
5.    Deletion
6.    Merging
7.    Sorting

=======================================================
Data Structure

Data type
Data type adalah himpunan yang dapat ditemui pada semua data. Sebagai contoh, tipe data integer mengandung object(contohnya: ,-2,-1,0,1,2….), dan operation(contohnya: +,-,*,/…..).

Structure
         Structure adalah user-defined data type yang menyimpan informasi-informasi yang berkaitan secara bersamaan. Berbeda dengan array yang hanya bisa menyimpan kumpulan tipe data yang sama, structure dapat menyimpan kumpulan tipe data yang berbeda-beda.

Cara deklarasi Structure
Berikut contoh cara deklarasi sebuah structure:
          Struct murid{
          Int umur;
          Char nama;
          Float nilai;
};

Structure assignment
Tdata a;
a.umur=18;
strcpy(a.nama,”carel”);
a.nilai=85.5;

Data structure
Data structure adalah susunan data. Berikut adalah beberapa contoh data structure: Arrays, Linked list, queue, stacks, binary trees, dan lain-lain.


===============================================================

Linked list
Pengertian linked list
Linked list adalah sekumpulan elemen yang memiliki tipe yang sama. Linked list memiliki urutan tertentu, setiap elemennya memiliki 2 bagian. Kelebihan linked list adalah karena sifatnya yang dinamis. Dalam linked list kita juga dapat melakukan insertion dan deletion. Link terbagi menjadi dua tipe yaitu single linked list, dan double linked list.

Bagian-bagian linked list
    
          Sumber: http://strukdat16061089.blogspot.com/2018/07/linked-list.html
Dari gambar di atas dapat disimpulkan  bahwa setiap node memiliki 2 field.

Memory Allocation: Dynamic
Dalam c/c++ kita dapat melakukan allocate memory secara dinamik , menggunakan “malloc”, dan menggunakan “free” untuk melakukan de-allocate.
Contoh:
int  *pa = (int *) malloc(sizeof(int));
char *pb = (char *) malloc(sizeof(char));
*pa = 205;
*pb = ‘A’;
printf( “%d %c\n”, *pa, *pb );
free(pa);
free(pb);

single linked list
untuk membuat linked list, pertama kita harus menentukan node structure-nya.

struct tnode {
                    int value;
                    struct tnode *next;
};
struct tnode *head = 0;     
Dalam code diatas dapat disimpulkan bahwa head pointer ke elemen pertama dalam linked list yang anda buat.  

Single linked list: insert          
struct tnode *node =

(struct tnode*) malloc(sizeof(struct tnode));

          node->value = x;

          node->next  = head;

          head = node;

tanda -> memiliki arti yang sama dengan:

          (*node).value=x;

          (*node).next = head;


Single linked list: delete

Ketika melakukan delete pada single linked list ada yang sebaiknya diperhatikan yaitu : jika x ada di head node, atau jika x tidak ada di head node.

Berikut adalah contohnya: qw

struct tnode *curr = head;

// jika x ada di head note

if ( head->value == x ) {

          head = head->next;

          free(curr);

}

// jika x tidak ada di head note

else {

          while ( curr->next->value != x ) curr = curr->next;

struct tnode *del = curr->next;

          curr->next = del->next;

          free(del);

};

Circular Single Linked List
Dalam circular, node terakhir mengandung pointer ke node pertama.
http://suciantinovi.blogspot.com/2014/03/linked-list-i_14.html


Doubly Linked List

          Doubly linked list adalah linked list structure dengan 2 link, yaitu ke data sebelumnya dan ke data sesudahnya.

        https://tutorialspoint.dev/data-structure/advanced-data-structures/xor-linked-list-a-memory-efficient-doubly-linked-list-set-1

struct tnode {
                    int value;
                    struct tnode *next;
                    struct tnode *prev;
          };

          struct tnode *head = 0;
          struct tnode *tail = 0;

Circular Doubly Linked List
          Circular doubly linked list sama dengan circular linked list, tetapi total di setiap node adalah 2.
sumber: https://www.geeksforgeeks.org/doubly-circular-linked-list-set-1-introduction-and-insertion/