Senin, 14 Agustus 2017

Tree Pada Struktur Data

TREE

contoh Binary Search Tree pada c++ - sebuah binary search tree (bst) adalah sebuah pohon biner yang boleh kosong, dan setiap nodenya harus memiliki identifier/value. value pada semua node subpohon sebelah kiri adalah selalu lebih kecil dari value dari root, sedangkan value subpohon di sebelah kanan adalah sama atau lebih besar dari value pada root, masing – masing subpohon tersebut (kiri&kanan) itu sendiri adalah juga bst.sebuah bst, pada dasarnya adalah sebuah pohon biner (binary tree).





 Oleh karena itu, kita dapat melakukan traversal pada setiap node dengan metode inorder, preorder maupun postorder. dan jika kita melakukan traversal dengan metode inorder, pada dasarnya kita telah melakukan traversal valuenya secara terurut dari kecil ke besar, jadilah ini sebagai sorting algoritma.

struktur data bst sangat penting dalam struktur pencarian, misalkan, dalam kasus pencarian dalam sebuah list, jika list sudah dalam keadaan terurut maka proses pencarian akan sangat cepat, jika kita menggunanan list contigue dan melakukan pencarian biner. akan tetapi, jika kita ingin melakukan perubahan isi list (insert atau delete), menggunakan list contigue akan sangat lambat, karena proses insert dan delete dalam list contigue butuh memindahkan banyak elemen setiap saat. 

Mungkin kita bisa juga menggunakan linked-list, yang untuk operasi insert atau delete tinggal mengatur – atur pointer, akan tetapi pada n-linked list, kita tidak bisa melakukan pointer sembarangan setiap saat, kecuali hanya satu kali dengan kata lain hanya secara sequential. Sebaliknay binary tree memberikan jawaban sempurna atas semua permasalahan ini, dengan memanfaatkan binary tree kita dapat melakukan pencarian elemen/node value dalam kompleksitas algorimta (big O) O(n log n) langkah saja.


Traversal (Penelusuran) Pohon

Ada tiga algoritma, yaitu: Pre Order, In Order dan Post Order

Pre Order:

  1.  Proses akar
  2. Telusur Anak kiri dalam Pre Order
  3. Telusur Anak kanan dalam Pre Order


In Order:

  1. Telusur Anak kiri dalam In Order
  2. Proses
  3. Telusur Anak kanan dalam In Order


Post Order

  1. Telusur Anak kiri dalam Post Order
  2. Telusur Anak kanan dalam Post Order
  3. Proses
Read More

Contoh Program Double Linked List Non Circular dan Pengertiannya


Double Linked List Non Circular

DLLNC "Double linked list non circular" adalah Double Linked List yang memiliki 2 buah pointer yaitu pointer next dan prev.
Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya.

Pengertian: 

Double       : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL.

Ilustrasi DLLNC

Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya. Untuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULL. Selanjutnya pointer prev akan menunjuk ke node sebelumnya , dan pointer next akan menunjuk ke node selanjutnya pada list. 


Deklarasi dan node baru DLLNC


Deklarasi node
Dibuat dari struct berikut ini :
typedef struct TNode {
int data ;
TNode *next ;
Tnode * prev ;
}; 

Pembentukan node baru 
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya . 
TNode * baru ;
baru = new TNode ;
baru ->data = databaru ;
baru ->next = NULL;
baru -> prev = NULL; 


Contoh program double linked list non circular



#include <stdio.h>  
#include <stdafx.h>
#include <conio.h>
#include <stdlib.h>

typedef struct TNode{      int data;
      TNode *next;
      TNode *prev;
     } TNode;
TNode *head=NULL;
void init();
int IsEmpty();
void InsertDepan(int value);
void InsertBelakang(int value);
void DeleteDepan();
void DeleteBelakang();
void ClearAll();
void Tampil();

void main() // ---> Program Utama
{ int data;
 int key;
 do
 {
  printf("\n\n ____MENU PROGRAM____ \n\n");
  printf(" [1] Insert Depan \n");
  printf(" [2] Insert Belakang \n");
  printf(" [3] Hapus Depan \n");
  printf(" [4] Hapus Belakang \n");
  printf(" [5] Hapus Semua List \n");
  printf("\n Pilihan Anda [1-5] --> ");scanf("%d",&key);
  system("CLS");
  if(key==1)
  {
   printf("\n Masukan Data : "); scanf("%d",&data);
   InsertDepan(data);
   Tampil();
  }
  else if(key==2)
  {
   printf("\n Masukan Data : "); scanf("%d",&data);
   InsertBelakang(data);
   Tampil();
  }
  else if(key==3)
  {
   DeleteDepan();
   getch();
   Tampil();
  }
  else if(key==4)
  {
   DeleteBelakang();
   getch();
   Tampil();
  }
  else if(key==5)
  {
   ClearAll();
   printf("\n\n Semua List Sudah Di Hapus \n");
  }
  else
  {
   printf("\n Pilihan Anda Salah \n");
  }
  getch();
 }
 while(key);
}  // ---> En Program Utama

void init()  // ---> Inisiasi
{
 head = NULL;
}

int IsEmpty() // ---> Mengecekan kondisi [kosong/tidak]
{ if(head==NULL)
 return 1;
 else
 return 0;
}

void InsertDepan(int value) // ---> Menambahkan data dari depan
{ TNode *baru;
 baru = new TNode;
 baru ->data = value;
 baru ->next = NULL;
 baru ->prev = NULL;
 if(IsEmpty()==1)
 {
  head = baru;
  head ->next=NULL;
  head ->prev=NULL;
 }
 else
 {
  baru ->next=head;
  head ->prev=baru;
  head=baru;
 }
 printf(" Data Masuk --> ");
}

void InsertBelakang(int value) // ---> Menambahkan data dari belakang
{
 TNode *baru, *bantu;
 baru = new TNode;
 baru ->data = value;
 baru ->next = NULL;
 baru ->prev = NULL;
 if(IsEmpty()==1)
 {
  head = baru;
  head ->next = NULL;
  head ->prev = NULL;
 }
 else
 {
  bantu=head;
  while(bantu ->next != NULL)
  {
   bantu = bantu ->next;
  }
  bantu ->next=baru;
  baru ->prev=bantu;
 }
 printf(" Data Masuk --> ");
}

void DeleteDepan() // ---> Menghapus data dari depan
{
 TNode *hapus;
 int d;
 if(IsEmpty()==0)
 {
  if(head ->next !=NULL)
  {
   hapus = head;
   d=hapus ->data;
   head=head ->next;
   head ->prev = NULL;
   delete hapus;
  }
  else
  {
   d=head->data;
   head=NULL;
  }
  printf("\n %d Data Terhapus
\n",d);
  printf(" Maka Menjadi -->
");
 }
 else
 printf("\n Masih Kosong -->
");
}
void DeleteBelakang() // ---> Menghapus data dari belakang
{
 TNode *hapus,*bantu;
    int d;
    if (IsEmpty()==0)
 {
        if(head->next != NULL)
            bantu = head;    
while(bantu->next->next!=NULL)
   {
                bantu = bantu->next;
            }
            hapus = bantu->next;
            d = hapus->data;
            bantu->next = NULL;
            delete hapus;
        }
  else
  {
            d = head->data;
            head = NULL;
        }
        printf("\n %d terhapus
\n",d);
  printf(" Maka Menjadi -->
");
    }
 else printf("\n Masih Kosong -->
");
}

void ClearAll() // ---> Mengahapus semua data(hapus list)
{
 TNode *bantu, *hapus;
 bantu=head;
 while(bantu !=NULL)
 {
  hapus=bantu;
  bantu=bantu ->next;
  delete hapus;
 }
 head=NULL;
}
void Tampil() // ---> Menapmpilkan list
{
 TNode *bantu;
 bantu=head;
 if(IsEmpty()==0)
 {
  while(bantu !=NULL)
  {
   printf(" [%d]", bantu
->data);
   bantu=bantu ->next;
  }
  printf("\n ");
 }
 else
 printf(" Data Kosong");
}

Read More

Contoh Program Double Linked List Circular dan Cara Memahaminya



Double Linked List Circular

Pengertian secara umumnya DLLC itu Linked list yang menggunakan pointer, dimana setiap node memiliki 3 field, yaitu:

  • 1 field pointer yang menunjuk pointer berikutnya “next“,
  • 1 field menunjuk pointer sebelumnya ” prev “,
  • 1 field yang berisi data untuk node tersebut .


Double Linked List Circular pointer next dan prev nya menunjuk kedirinya sendiri secara circular. Bentuk Node DLLC

Ilustrasi Double Linked List Circular





Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya.  Untuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULL. Selanjutnya pointer prev akan menunjuk ke node sebelumnya , dan pointer next akan menunjuk ke node selanjutnya pada list.

Contoh program Double Linked List Circular :


#include <conio.h>
#include <stdio.h>
struct TNode{
char data[30];
TNode *next;
TNode *prev;
};
TNode *head, *tail;
void init(void);
int isEmpty(void);
void insertDepan(char databaru[30]);
void insertBelakang (char databaru[30]);
void inserttengah(char databaru[30], int pilihdepan, int pilihbelakang);
void tampil(void);
void hapusDepan(void);
void hapusBelakang(void);
void deletetengah(int pilih);
void clear(void);
int cari(char elemen[30]);
main()
{
////////////////////////////////
char pilih;
char elm[30];
int depan,belakang;
init();
do
{
printf("\n");
printf("\t\t===================================\n");
printf("\t\t||       CONTOH PROGRAM        ||\n");
printf("\t\t||  DOUBLE LINK LIST CIRCULAR  ||\n");
printf("\t\t===================================\n");
printf("          \t\tMENU PILIHAN :           \n");
printf("\t\t===================================\n");
printf("\t\t[1] MASUKKAN DATA DARI DEPAN\n");
printf("\t\t[2] MASUKKAN DATA DARI BELAKANG\n");
printf("\t\t[3] MASUKKAN DATA DI TENGAH\n");
printf("\t\t[4] TAMPILKAN DATA\n");
printf("\t\t[5] HAPUS DATA PALING DEPAN\n");
printf("\t\t[6] HAPUS DATA PALING BELAKANG\n");
printf("\t\t[7] HAPUS DATA DI TENGAH\n");
printf("\t\t[8] HAPUS SEMUA DATA\n");
printf("\t\t[9] CARI DATA\n");
printf("\t\t[0] KELUAR\n");
printf("\t\t===================================\n\n");
printf("\t\t===================================\n\n");
printf("\n");
printf("\t\t->->PILIHAN ANDA   :  ");
scanf("%s",&pilih);
switch(pilih)
{
case '1':clrscr();
tampil();
printf("\n");
printf("   \t\tMASUKKAN DATA DARI DEPAN\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
insertDepan(elm);
getch();
clrscr();
break;
case '2':clrscr();
tampil();
printf("\n");
printf("   \t\tMASUKKAN DATA BELAKANG\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
insertBelakang(elm);
clrscr();
break;
case '3':clrscr();
tampil();
printf("\n");
printf("   \t\tMASUKKAN DATA DARI TENGAH\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
printf("\t\t:: DATA DEPAN : ");
scanf("%i",&depan);
printf("\t\t:: DATA BELAKANG : ");
scanf("%i",&belakang);
inserttengah(elm,depan,belakang);
getch();
clrscr();
break;
case '4':clrscr();
tampil();
printf("\t\t-------------\n\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '5':clrscr();
tampil();
hapusDepan();
printf("\n");
printf("\t\t-------------\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '6':clrscr();
tampil();
hapusBelakang();
printf("\n");
printf("\t\t-------------\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '7':clrscr();
tampil();
printf("\n");
printf("   \t\tMENGHAPUS DATA DARI TENGAH\n");
printf("\t\t----------------------------\n");
printf("\t\t:: DATA NO : ");
scanf("%i",&depan);
deletetengah(depan);
getch();
clrscr();
break;
case '8':clrscr();
clear();
printf("\t\tDATA TELAH DIHAPUS SEMUA\n");
printf("\t\t-------------\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '9':clrscr();
printf("\n");
printf("  \t\t MASUKKAN DATA YANG DICARI\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
if(cari(elm)==1){
printf("\n\t\tdata  success ditemukan");
}else{
printf("\n\t\tMaaf data tidak ditemukan");
}
getch();
clrscr();
break;
case '0': break;
getch();
clrscr();
default:printf("\t\tSalah pilih...\n");
break;
}
}while(pilih!='0');
}
/////////////////////////////////
void init(void){
head = NULL;
tail = NULL;
}
/////////////////////////////////
int isEmpty(void){
if(tail == NULL) return 1;
else return 0;
}
//////////////////////////////////
void insertDepan(char databaru[30]){
TNode *baru;
int i;
baru = new TNode;
for(i=0;i<=30;i++){
baru->data[i] = databaru[i];
}
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
tail->next = tail;
tail->prev = tail;
}
else {
baru->next = head;
head->prev = baru;
head = baru;
head->prev = tail;
tail->next = head;
}
printf("\n\t\t\Data masuk\n");
printf("\t\tPress Enter to Continue..");
}
////////////////////////////////////////////////////
void insertBelakang (char databaru[30]){
TNode *baru,*bantu;
int i;
baru = new TNode;
for(i=0;i<=30;i++){
baru->data[i] = databaru[i];
}
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
tail->next = tail;
tail->prev = tail;
}
else {
tail->next = baru;
baru->prev = tail;
tail = baru;
tail->next = head;
head->prev = tail;
}
printf("\t\tData masuk\n");
printf("\t\tPress Enter to Continue..");
}
//////////////////////////////////////////////
void tampil(void){
int i=0;
if(isEmpty()==0){
do{
i++;
printf("\t\t%i. %s\n",i,head->data);
printf("\t\t===================\n");
head=head->next;
}while(head!=tail->next);
printf("\n");
} else printf("\t\t\t..Masih kosong..\n\n");
}
//////////////////////////////////////////////
void hapusDepan(void){
TNode *hapus;
char d[30];
int i;
if (isEmpty()==0){
if(head != tail){
hapus = head;
for (i=0;i<=30;i++){
d[i] = hapus->data[i];
}
head = head->next;
tail->next = head;
head->prev = tail;
delete hapus;
} else {
for (i=0;i<=30;i++){
d[i] = head->data[i];
}
head = NULL;
tail = NULL;
}
printf("\t\t%s terhapus\n",d);
} else printf("\t\tMasih kosong\n");
}
//////////////////////////////////////////
void hapusBelakang(void){
TNode *hapus;
char d[30];
int i;
if (isEmpty()==0){
if(head != tail){
hapus = tail;
for (i=0;i<=30;i++){
d[i] = hapus->data[i];
}
tail = tail->prev;
tail->next = head;
head->prev = tail;
delete hapus;
} else {
for (i=0;i<=30;i++){
d[i] = head->data[i];
}
head = NULL;
tail = NULL;
}
printf("\t\t%s terhapus\n",d);
} else printf("\t\tMasih kosong\n");
}
//////////////////////////////////////////
void clear(void){
TNode *bantu,*hapus;
if (isEmpty()==0){
bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}
}
//////////////////////////////////////////
//////////////////////////////////////
int cari(char elemen[30]){
int i=0;
int status=0;
if(isEmpty()==0){
do{
i++;
if(head->data[i]==elemen[i]){
status=1;
}else head=head->next;
}while(head!=tail->next && i<=30);
return(status);
} else printf("\t\tMasih kosong\n");
}
/////////////////////////////////////
void inserttengah(char databaru[30], int pilihdepan, int pilihbelakang){
TNode *baru,*bantu,*depan,*belakang;
char elemen[30];
int i;
int j;
baru = new TNode;
for(i=0;i<=30;i++){
baru->data[i] = databaru[i];
}
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
tail->next = tail;
tail->prev = tail;
}else{
depan = head;
belakang = head;
for(i=1;i<pilihdepan;i++){
depan=depan->next;
}
for(i=1;i<pilihbelakang;i++){
belakang=belakang->next;
}
depan->next = baru;
baru->prev = depan;
baru->next = belakang;
belakang->prev = baru;
}
printf("\t\tData masuk\n");
printf("\t\tPress Enter to Continue..");
}
////////////////////////////////////////////////////////
void deletetengah(int pilih){
TNode *hapusdepan,*hapusbelakang,*hapustengah;
char d[30];
int i,j;
if (isEmpty()==0){
if(head != tail){
hapusdepan = head;
hapusbelakang = head;
hapustengah = head;
for(i=1;i<pilih;i++){
hapusdepan=hapusdepan->next;
}
for(i=1;i<(pilih+2);i++){
hapusbelakang=hapusbelakang->next;
}
for(i=1;i<=pilih;i++){
hapustengah=hapustengah->next;
}
for(j=1;j<pilih;j++){
for (i=0;i<=30;i++){
d[i] = hapustengah->data[i];
}
hapustengah = hapustengah->next;
}
delete hapustengah;
hapusdepan->next = hapusbelakang;
hapusbelakang->prev=hapusdepan;
} else {
for (i=0;i<=30;i++){
d[i] = hapustengah->data[i];
}
head = NULL;
tail = NULL;
}
printf("\t\t%s Success terhapus\n",d);
} else printf("\t\tMasih kosong\n");
}

Read More

Pengertian Double Linked List


Double Linked List


Double Link List adalah elemen-elemen yang dihubungkan dengan dua pointer dalam satu elemen dan list dapat melintas baik di depan atau belakang.

Elemen double link list terdiri dari tiga bagian:

  • Bagian data informasi
  • Pointer next yang menunjuk ke elemen berikutnya
  • Pointer prev yang menunjuk ke elemen sebelumnya


Untuk menunjuk head dari double link list, pointer prev dari elemen pertama menunjuk NULL. Sedangkan untuk menunjuk tail, pointer next dari elemen terakhir menunjuk NULL.
Contoh Membuat TDA(Tipe Data Abstrak) dari Double Linked Circular List tersebut.

Instan :
Double Linked Circular List

Operasi :
Buat_node(char x) : membuat node baru dengan informasi x
Tambah_elemen_didepan() : menambah elemen paling depan (pointernya menunjuk
elemen pertama link list)
Tambah_elemen_dibelakang() : menambah elemen paling belakang (pointer elemen
yang baru menunjuk elemen pertama)
Hapus_elemen_() : Menghapus elemen (pointer menunjuk elemen yang akan dihapus)
Cetak () : menelusuri elemen satu demi dan menampilkan informasinya.

Ilustrasinya : 







Ada 2 jenis Double Linked List yaitu :

  •  Double Linked List Circular
  •  Double Linked List Non Circular


Read More

Contoh program single linked list non circular untuk menghapus semua list ataupun salah satu dengan menggunakan menu:


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 untuk menghapus semua list ataupun salah satu dengan menggunakan menu:


#include <constream.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct nasabah
{
 char norek[12];
 char nama[25];
 char alamat[50];
 double saldo;
};
struct simpul
{
 char norek[12];
 char nama[25];
 char alamat[50];
 double saldo;
 struct simpul *berikut;
};
struct simpul *awal=NULL, *akhir=NULL;
struct nasabah bank;
void tambah_list_dibelakang(struct nasabah info);
void isi_list();
void sisip_list(struct simpul *first,struct nasabah info,char posisi[20]);
void sisip_isi_list();
void tampil_list();
void hapus_simpul(char info);
void hapus_data();
void hapus_list();
void menu();
void main()
{
 clrscr();
 menu();
 getch();
}
void menu()
{
 int pil;
 clrscr();
 cout<<"Programmer : Shandy Johan_6311171"<<endl<<endl;
 cout<<"Pilih Transaksi  : "<<endl;
 cout<<"            1. Isi List"<<endl;
 cout<<"            2. Sisip List"<<endl;
 cout<<"            3. Tampil List"<<endl;
 cout<<"            4. Hapus Salah Satu"<<endl;
 cout<<"            5. Hapus Semua List"<<endl;
 cout<<"            6. Exit"<<endl<<endl;
 cout<<"Tentukan Pilihan : ";
 cin>>pil;
 switch (pil)
 {
  case 1:
       isi_list();
       break;
  case 2:
       sisip_isi_list();
       break;
  case 3:
       tampil_list();
       break;
  case 4:
       hapus_data();
       break;
  case 5:
       hapus_list();
       break;
  case 6:
       clrscr();
       gotoxy(21,13);cout<<"Terima Kasih Telah Menggunakan Program Ini";
       break;
 }
}
void isi_list()
{
 char jawab;
 do
 {
  clrscr();
  cout<<"No Rekening : ";
  cin>>bank.norek;
  cout<<"Nama        : ";
  cin>>bank.nama;
  cout<<"Alamat      : ";
  cin>>bank.alamat;
  cout<<"Saldo Awal  : ";
  cin>>bank.saldo;
  tambah_list_dibelakang(bank);
  cout<<"\n\nTambah Data [Y/T] : ";
  cin>>jawab;
 }
 while (toupper(jawab)!='T');
 menu();
}
void tambah_list_dibelakang(struct nasabah info)
{
 struct simpul *baru;
 baru = (struct simpul *) malloc (sizeof(struct simpul));
 strcpy (baru -> norek,info.norek);
 strcpy (baru -> nama,info.nama);
 strcpy (baru -> alamat,info.alamat);
 baru -> saldo = info.saldo;
 if (awal == NULL)
 {
  awal = baru;
 }
  else
  {
   akhir -> berikut = baru;
  }
 akhir = baru;
 akhir -> berikut = NULL;
}
void tampil_list()
{
 clrscr();
 struct simpul *baca;
 int i;
 baca = awal;
 i = 1;
 while (baca != NULL)
 {
  cout<<"Data Ke : "<<i<<endl;
  cout<<"No Rekening  : "<<baca -> norek<<endl;
  cout<<"Nama         : "<<baca -> nama<<endl;
  cout<<"Alamat       : "<<baca -> alamat<<endl;
  cout<<"Saldo Awal   : "<<baca -> saldo<<endl;
  cout<<endl;
  i++;
  baca = baca -> berikut;
 }
 getch();
 menu();
}
void hapus_list()
{
 struct simpul *hapus;
 hapus = awal;
 while (hapus != NULL)
 {
  awal = hapus -> berikut;
  free(hapus);
  hapus = awal;
 }
 menu();
}

void sisip_list(struct simpul *first, struct nasabah info, char posisi[20])
{
 struct simpul *bantu,*baru;
 baru = new simpul;
 strcpy (baru -> norek,info.norek);
 strcpy (baru -> nama,info.nama);
 strcpy (baru -> alamat,info.alamat);
 baru-> saldo = info.saldo;
 bantu = first;
 do
 {
  if (strcmp(posisi,bantu->norek)!=0)
  {
   bantu = bantu->berikut;
  }
 }
 while (bantu !=NULL & strcmp(posisi,bantu->norek)!=0);
 baru->berikut = bantu -> berikut;
 bantu -> berikut = baru;
}
void sisip_isi_list()
{
 char cari[20];
 struct nasabah ganti;
  clrscr();
  cout<<"Input Data Baru"<<endl;
  cout<<"No Rekening : ";
  cin>>ganti.norek;
  cout<<"Nama        : ";
  cin>>ganti.nama;
  cout<<"Alamat      : ";
  cin>>ganti.alamat;
  cout<<"Saldo Awal  : ";
  cin>>ganti.saldo;
  cout<<endl;
  cout<<"Data Akan Disisipkan Setelah No Rekening : ";
  gets(cari);
  sisip_list(awal,ganti,cari);
  menu();
}
void hapus_simpul(char info[20])
{
 struct simpul *bantu,*hapus;
 if (awal==NULL) { cout<<"\n Data List Kosong ";}
 else
 {
  if (strcmp(awal->norek,info)==0)
  {
   hapus=awal;
   awal=hapus->berikut;
   free(hapus);
  }
   else
   {
    bantu=awal;
    while ((strcmp(info,bantu->berikut->norek)!=0) && (bantu->berikut!=NULL))
    {
     bantu=bantu->berikut;
    }
    hapus=bantu->berikut;
    if (hapus!=NULL)
    {
     if (hapus!=akhir) { bantu->berikut=hapus->berikut;}
     else
     {
      akhir=bantu;
      akhir->berikut=NULL;
     }
     free(hapus);
    }
   }
  }
}

void hapus_data()
{
 char cari[20];
 char jawab;
 clrscr();
 cout<<"\nAda data yang akan dihapus Y/T :";cin>>jawab;
 if (toupper(jawab)=='Y')
 {
  cout<<"\nNo.Rekening yang akan dihapus :";
  gets(cari);
  hapus_simpul(cari);
  menu();
 }
}

Read More

Contoh program single linked list non circular tambah list ditengah :


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 ditengah :


#include <stdio.h>
#include <constream.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct siswa
{
 char nama[20];
 int umur;
};
struct simpul
{
 char nama[20];
 int umur;
 struct simpul *berikut;
};
struct simpul *awal=NULL,*akhir=NULL;
struct siswa mhs;
void tambah_list_belakang(struct siswa info);
void isi_list();
void sisip_list(struct simpul *first,struct siswa info,char posisi[20]);
void sisip_isi_list();
void tampil_list();
void hapus_list();
void main()
{
 clrscr();
 isi_list();
 clrscr();
 tampil_list();
 sisip_isi_list();
 tampil_list();
 hapus_list();
 getch();
}
void tambah_list_dibelakang(struct siswa info)
{
 struct simpul *baru;
 baru=(struct simpul*)malloc(sizeof(struct simpul));
 strcpy(baru->nama,info.nama);
 baru->umur=info.umur;
 if (awal==NULL)
  {
   awal=baru;
  }
 else
  {
   akhir->berikut=baru;
  }
 akhir=baru;
 akhir ->berikut=NULL;
}
void isi_list()
{
 char jawab;
 do
 {
  clrscr();
  cout<<"Nama: ";gets(mhs.nama);
  cout<<"Umur: ";cin>>mhs.umur;
  tambah_list_dibelakang(mhs);
  cout<<"\nTambah Data [Y/T]: ";
  cin>>jawab;
 }
 while (toupper(jawab)!='T');
}
void sisip_list(struct simpul *first,struct siswa info,char posisi[20])
{
struct simpul *bantu,*baru;
baru = new simpul;
strcpy(baru->nama,info.nama);
baru->umur=info.umur;
bantu=first;
do
{
if (strcmp(posisi,bantu->nama)!=0)  {bantu=bantu->berikut;}
}
while (bantu!=NULL && strcmp(posisi,bantu->nama)!=0);
baru->berikut=bantu->berikut;
bantu->berikut=baru;
}

void sisip_isi_list()
{
char cari[20];
struct siswa ganti;
cout<<"\nInput Data Baru :";
cout<<"\nNama :";gets(ganti.nama);
cout<<"\nUmur :";cin>>ganti.umur;
cout<<"\n";
cout<<"\nData Akan Disisipkan Setelah Nama: ";
gets(cari);
sisip_list(awal,ganti,cari);
}
void tampil_list()
{
 struct simpul *baca;
 int i;
 baca=awal;
 i=1;
 while(baca!=NULL)
 {
  cout<<"\nNama : "<<baca->nama;
  cout<<"\nUmur : "<<baca->umur;
  cout<<"\n";
  i++;
  baca=baca->berikut;
 }
}
void hapus_list()
{
 struct simpul *hapus;
 hapus=awal;
 while(hapus!=NULL)
 {
  awal=hapus->berikut;
  free(hapus);
  hapus=awal;
 }
}

Read More

Contoh program single linked list non circular tambah di belakang :


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 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;
 }
}

Read More

Contoh program single linked list non circular tambah list di depan


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;
            }
}

Read More

SINGLE LINKED LIST MENGGUNAKAN HEAD DAN TAIL


SINGLE LINKED LIST MENGGUNAKAN HEAD DAN TAIL 

  • Dibutuhkan dua buah variabel pointer: head dan tail 
  • Head akan selalu menunjuk pada node pertama, sedangkan tail akan selalu menunjuk pada node terakhir. 

Inisialisasi LinkedList 


TNode *head, *tail;
Fungsi Inisialisasi LinkedList
void init(){
head = NULL;
tail = NULL;

Function untuk mengetahui kosong tidaknya LinkedList 


int isEmpty(){
if(tail == NULL) return 1;
else return 0;

PENAMBAHAN DATA 
Pengkaitan node baru ke linked list di depan 
Penambahan data baru di depan akan selalu menjadi head. 

void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next=head;
tail->next=tail;
}
else {
baru->next = head;
head = baru;
tail->next = head;
}
cout<<"Data masuk\n";

Penambahan Data di belakang Pada penambahan data di belakang, data akan selalu dikaitkan dengan tail, karena tail terletak di node paling belakang. Setelah dikaitkan dengan node baru, maka node baru tersebut akan menjadi tail. 

void tambahBelakang(int databaru){ TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next=head;
tail->next=tail;
}
else
{
tail->next = baru;
tail = baru;
tail->next = head;
}
cout<<"Data masuk\n";

Kelebihan dari Single Linked List dengan Head & Tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan pointer bantu. 

Function untuk menampilkan isi linked list: 


void tampil(){ TNode *b;
b = head; if(isEmpty()==0)
{
do
{ cout<data<<" ";
b=b->next;
}
while(b!=tail->next);
cout<<<"Masih kosong\n";

Pada prinsipnya sama dengan function tampil sebelumnya. 

Function untuk menghapus data di depan 


void hapusDepan(){ TNode *hapus;
if (isEmpty()==0){ int d;
hapus = head;
d = head->data;
if(head != tail){
hapus = head;
head = head->next;
tail->next = head;
delete hapus;
}else{
head=NULL;
tail=NULL;
}
cout<<<" terhapus\n";
}
else cout<<"Masih kosong\n";

  • Function di atas akan menghapus data terdepan (pertama) yang ditunjuk oleh head pada linked list 
  • Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada head, kemudian dilakukan pergeseran ke node berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus variabel hapus dengan menggunakan perintah delete. 
  • Jika tail masih NULL maka berarti data masih kosong! 


Function untuk menghapus data di belakang: 

Dengan menggunakan Single Linked List ber-Head dan Tail, pengahapusan data di belakang akan mudah dilakukan, tidak seperti pada Single Linked List hanya ber-Head saja. 

void hapusBelakang(){ TNode *hapus,*bantu;
if (isEmpty()==0){ int d;
if(head == tail){ d = tail->data;
head = NULL;
tail = NULL;
}
else
{
bantu = head;
while(bantu->next != tail){
bantu = bantu->next;
}
hapus = tail;
tail = bantu;
d = hapus->data;
tail->next = head;
delete hapus;
}
cout<<<" terhapus\n";
}
else cout<<"Masih kosong\n";

  • Function di atas akan menghapus data terbelakang (terakhir) yang ditunjuk oleh tail pada linked list 
  • Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada tail, kemudian dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya sampai sebelum tail, sehingga tail dapat ditunjukkan ke bantu tersebut, dan bantu tersebut akan menjadi tail yang baru. Setelah itu hapus variabel hapus dengan menggunakan perintah delete. 
  • Jika tail masih NULL maka berarti data masih kosong! 


Function untuk menghapus semua elemen LinkedList 


void clear(){ TNode *bantu,*hapus;
if(isEmpty() == 0){ bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
tail = NULL;
}

  • Menggunakan pointer bantu yang digunakan untuk bergerak sepanjanglist, dan menggunakan pointer hapus yang digunakan untuk menunjuk node-node yang akan dihapus. 
  • Pada saat pointer hapus menunjuk pada node yang akan dihapus, pointer bantu akan bergerak ke node selanjutnya, dan kemudian pointer hapus akan didelete.
Read More

Single Linked List Circular



Single Linked List Circular

Single Linked List Circular adalah Single Linked List yang pointer nextnya menunjuk pada dirinya sendiri. Jika Single Linked List tersebut terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk ke node terdepannya.

Pengertian: 
Single   : artinya field pointer-nya hanya satu buah saja dan satu arah. 
Circular : artinya pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar

Ilustrasi Single Linked List Circular 

  • 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 node terdepan sehingga linked list tersebut berputar. Node terakhir akan menunjuk lagi  ke head.


PEMBUATAN SINGLE LINKED LIST CIRCULAR 

Deklarasi node Dibuat dari struct berikut ini: 

typedef struct TNode{
int data;
TNode *next;
};

Penjelasan Single Linked List Circular: 

  • Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data  bertipe integer dan field next yang bertipe pointer dari TNode 
  • Setelah pembuatan struct, buat variabel haed yang bertipe pointer dari TNode yang berguna sebagai kepala linked list.


Pembentukan node baru : Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya. 

TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru; 

SINGLE LINKED LIST CIRCULAR MENGGUNAKAN HEAD 

  • Dibutuhkan satu buah variabel pointer: head 
  • Head akan selalu menunjuk pada node pertama 


Deklarasi Pointer Penunjuk Kepala Single Linked List  Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan harus melalui node pertama dalam linked list. Deklarasinya sebagai berikut: 

TNode *head;
Fungsi Inisialisasi Single LinkedList
void init(){
head = NULL;


Function untuk mengetahui kosong tidaknya Single LinkedList :


int isEmpty(){
if(head == NULL) return 1;
else return 0;


PENAMBAHAN DATA 

Penambahan data di depan 
Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head nya. Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Untuk menghubungkan node terakhir dengan node terdepan dibutuhkan pointer bantu. 


void insertDepan(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
}
else {
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
baru->next = head;
head = baru;
bantu->next = head;
}
cout<<"Data masuk\n";


Penambahan data di belakang Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya. Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan. 


void insertBelakang (int databaru)
{
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
}
else {
bantu = head;
while(bantu->next != head){
bantu=bantu->next;
}
bantu->next = baru;
baru->next = head;
}
cout<<"Data masuk\n";

“Bagaimana dengan penambahan di tengah?” 


MENAMPILKAN DATA 

Function untuk menampilkan isi single linked list 


void tampil(){ TNode *b;
b = head;
if(isEmpty()==0)
{
do
{
cout<data<<" ";
b=b->next;
}
while(b!=head);
cout<<<"Masih kosong\n";

  • Function di atas digunakan untuk menampilkan semua isi list, di mana linked list ditelusuri satu-persatu dari awal node sampai akhir node. Penelusuran ini dilakukan dengan menggunakan suatu variabel node bantu, karena pada prinsipnya variabel node head yang menjadi tanda awal list tidak boleh berubah/berganti posisi. 
  • Penelusuran dilakukan terus sampai node terakhir ditemukan menunjuk ke head lagi. Jika belum sama dengan head, maka node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait. 
  • Jika head masih NULL berarti data masih kosong! 


PENGHAPUSAN DATA 

Function untuk menghapus data terdepan 


void hapusDepan ()
{ TNode *hapus,*bantu;
if (isEmpty()==0)
{
int d;
hapus = head; d = head->data;
if(head->next != head){
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
head = head->next;
delete hapus;
bantu->next = head;
}else{
head=NULL;
}
cout<<<" terhapus\n";
}
else cout<<"Masih kosong\n";

  • Function di atas akan menghapus data teratas (pertama) yang ditunjuk oleh head  pada linked list 
  •  Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus ditampung dahulu pada variabel hapus dan barulah kemudian menghapus variabel hapus dengan menggunakan perintah delete. 
  • Sebelum data terdepan dihapus, head harus ditunjukkan ke data sesudahnya  terlebih dahulu sehingga data setelah head lama akan menjadi head baru (data terdepan yang baru). 
  • Jika head masih NULL maka berarti data masih kosong! 


Penghapusan data di belakang: 


void hapusBelakang()
{ TNode *hapus,*bantu;
if (isEmpty()==0)
{
int d;
hapus = head;
if(head->next == head){
head = NULL;
}
else
{
bantu = head;
while(bantu->next->next != head){
bantu = bantu->next;
}
hapus = bantu->next;
d = bantu->data;
bantu->next = head;
delete hapus;
}
cout<<<" terhapus\n";
}
else
cout<<"Masih kosong\n";

  • Membutuhkan pointer bantu dan hapus. 
  • Pointer hapus digunakan untuk menunjuk node yang akan dihapus, dan pointer bantu digunakan untuk menunjuk node sebelum node yang dihapus. 
  • Pointer bantu akan digunakan untuk menunjuk ke nilai NULL. 
  • Pointer bantu akan selalu bergerak bersama dengan pointer hapus tapi letak pointer bantu harus selalu dibelakang pointer hapus. 


Function untuk menghapus semua elemen Linked List 


void clear(){ TNode *bantu,*hapus;
bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;

Read More

Pengertian Single Linked List

Single Linked List


Linked List adalah salah satu bentuk struktur data, berisi kumpulan data  (node) yang tersusun secara sekuensial, saling sambung=menyambung,  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.

Ilustrasi single LINKED LIST:




Pada gambar di atas, data terletak pada sebuah lokasi dalam sebuah memory, tempat yang disediakan memory untuk menyimpan data disebut node ? simpul, setiap node memiliki pointer ( penunjuk ) yang menunjuk ke node berikutnya sehingga terbentuk suatu untaian yang disebut single LINKED LIST. Bila dalam single LINKED LIST pointer hanya dapat bergerak ke satu arah saja, maju / mundur, kanan / kiri, sehingga pencarian datanya juga hanya satu arah saja.

Ada 2 Tipe Single Linked List yaitu:

  •   Single Linked List Circular
  •   Single Linked List Non Circular 
Read More

Pengertian Struktur Data

1.     Pengertian Struktur Data


Struktur Data adalah sebuah sebuah cara yang dilakukan untuk mengimplementasikan atau menginterpretasikan data dalam komputer agar dapat melakukan operas-operasi secara spesifik. Struktur Data secara umum adalah sebuah cara menyimpan atau merepresentasikan data di dalam komputer agar bisa dipakai secara efisien.

2.    Di dalam Struktur Data  akan membahas :


·         Array dan pointer
·         Single Linked List
·         Double Linked List
·         Tree
·         Graph


3.    Gambar Pemetaan Struktur Data




Read More

Pengertian Dan Contoh Pointer


Pengertian dan Definisi 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. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua.

Operator Pointer ada dua, yaitu :

1. Operator &

Operator & bersifat unary (hanya memerlukan satu operand saja).
Operator & menghasilkan alamat dari operandnya.

2.  Operator  *

Operator * bersifat unary (hanya memerlukan satu operand saja).
Operator * menghasilkan nilai yang berada pada sebuah alamat.

Deklarasi Pointer

Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan.
Bentuk Umum : Tipe_data *nama_pointer;

Contoh Program  dengan deklarasi Pointer:


#include <constream.h>
int *px;
char *sh;
void main()
{
 int x, y; /* x dan y bertipe int */
 int *px; /* px pointer yang menunjuk objek */
 clrscr();
 x = 87;
 px = &x; /* px berisi alamat dari x */
 y = *px; /* y berisi nilai yang ditunjuk px */
 cout<<“Alamat x =”<<&x <<\n”;
 cout<<“Isi px = \n”, px);
 cout<<“Isi x = \n”, x);
 cout<<“Nilai yang ditunjuk oleh px = \n”, *px);
 cout<<“Nilai y = \n”, y);
 getch();
}


Operasi Pointer

1. Operasi Penugasan

Suatu variable pointer seperti halnya variable yang lain, juga bisa mengalami operasi penugasan. Nilai dari suatu variable pointer dapat disalin ke variable pointer yang lain.

Contoh Program Operasi Pointer :


#include <constream.h>
void main()
{
float *x1,y, *x2;
clrscr();
y = 13.45;
x1 = &y;                      /* Alamat dari y disalin ke variabel x1 */
x2 = x1;                      /* Isi variabel x1 disalin ke variabel x2 */
cout<<"Nilai variabel y =  "<<y<< " ada di alamat "<< x1<<"\n";
cout<<"Nilai variabel y =  "<<y<< " ada di alamat "<< x2<<"\n";
               getch();
}

2. Operasi Aritmatika

Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer saja. Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan. Operasi penambahan dengan suatu nilai menunjukkan lokasi data berikutnya (index selanjutnya) dalam memori. Begitu juga operasi pengurangan.

Contoh Program Operasi Aritmatika:


#include <constream.h>
void main()
{
int nilai[3], *penunjuk;
clrscr();
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
penunjuk = &nilai[0];
cout<<"Nilai "<<*penunjuk <<" ada di alamat memori " <<penunjuk<<"\n";
cout<<"Nilai "<<*(penunjuk+1) <<" ada di alamat memori " <<penunjuk+1<<"\n";
cout<<"Nilai "<<*(penunjuk+2) <<" ada di alamat memori " <<penunjuk+2<<"\n";
getch();
}

3. Operasi Logika

Suatu pointer juga dapat dikenai operasi logika.
Contoh Program Operasi Logika:

#include<constream.h>
void main()
{
int a = 100, b = 200, *pa, *pb;
clrscr();
pa = &a;
pb = &b;
cout<<"nilai pa= "<<pa<< " nilai pb= "<<pb<<"\n";
if(pa < pb)
cout<<"pa menunjuk ke memori lebih rendah dari pb\n";
if(pa == pb)
cout<<"pa menunjuk ke memori yang sama dengan pb\n";
if(pa > pb)
cout<<"pa menunjuk ke memori lebih tinggi dari pb\n";
getch();
}

Read More

Pengertian dan Contoh Array


Definisi dan Pengertian ARRAY


Array adalah sekumpulan variable yang bertipe data sama yang dibedakan oleh indeks. Suatu Array mempunyai jumlah komponen yang banyaknya tetap. Banyaknya komponen dalam suatu larik ditunjukan oleh suatu indek untuk membedakan variabel yang satu dengan variabel yang lainnya. Dalam bahasa C, index dari array dimulai dengan 0 (zero).

Variabel array dalam Borland C++, dapat digolongkan menjadi Dua buah dimensi:
  •  Array Satu Dimensi
  • Array Dua Dimensi


1.     Array Satu Dimensi 

Sebelum digunakan, variabel array perlu dideklarasikan terlebih dahulu. Cara mendeklarasikan variabel array sama seperti deklarasi variabel yang lainnya, hanya saja diikuti oleh suatu indek yang menunjukan jumlah maksimum data yang disediakan.

Bentuk Umum pendeklarasian array :


Tipe-Data Nama_Variabel[Ukuran];

Keterangan    :
Type Data        : Untuk menyatakan type data yang digunakan.
Ukuran             : Untuk menyatakan jumlah maksimum elemen array.

Contoh penulisannya : int IPK[5];

Contoh Program Array Satu Dimensi :


#include <constream.h>
int x, nilai[3]; // variabel nilai menggunakan array
float rata;
void main()
{
 rata = 0;
 clrscr();
 cout<<"Menghitung Nilai Rata-Rata"<<endl<<endl;
 for(x=0;x<3;x++)
 {
  cout<<"Masukan Nilai : ";cin>>nilai[x];
  rata+=nilai[x];
 }
 cout<<"\nRata-Rata : "<<rata/3;
 getch();
}


2.    Array Dua Dimensi 

Array dimensi dua tersusun dalam bentuk baris dan kolom, dimana indeks pertama menunjukan baris dan indeks kedua menunjukan kolom. Array dimensi dua dapat digunakan seperti pendatan penjualan, pendataan nilai dan lain sebagainya.

Bentuk Umum pendeklarasian array :


Tipe-Data Nama_Variabel[index-1][index-2];
Keterangan    :
Type Data      : Untuk menyatakan type data yang digunakan.
Index-1          : Untuk menyatakan jumlah baris
Index-2          : Untuk menyatakan jumlah kolom

Contoh Penulisannya : int penjualan[3][3]

Inisialisasi Array

Inisialisasi adalah memberikan nilai awal terhadap suatu variabel. Bentuk pendefinisian suatu array dapat dilihat dari contoh berikut :

Tipe_data nama_array[jml_elemen] = { nilai array };
Contoh Penulisannya : float nilai [2][3]={{3,5,7},{2,4,6}}

Contoh Program Array Dua Dimensi :



#include"constream.h"
struct barang {
char kode;
char nama[10];
}data[5];
char ulang;
long nilai[5][6],b,x[3],tmp; //pada variable nilain digunakan array 2 dimensi
void main()
{
 textcolor(BLACK);
 textbackground(WHITE);
 do
 {
 clrscr();
 gotoxy(20,1);cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
 gotoxy(21,2);cout<<"DATA PENJUALAN PERALATAN RUMAH TANGGA";
 gotoxy(33,3);cout<<"TOKO FURNITURE";
 gotoxy(20,4);cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n\n";
 cout<<" ÉÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍ» \n";
 cout<<" º No º Kode º  Nama Barang  º  Harga  º Jumlah º  Total  º Diskon º  Bayar  º \n";
 cout<<" ÌÍÍÍÍÎÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍ͹ \n";
 cout<<" º 1. º      º               º         º        º         º        º         º \n";
 cout<<" º 2. º      º               º         º        º         º        º         º \n";
 cout<<" º 3. º      º               º         º        º         º        º         º \n";
 cout<<" º 4. º      º               º         º        º         º        º         º \n";
 cout<<" ÈÍÍÍÍÊÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍͼ \n\n\n";
 cout<<" ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍ»                                    \n";
 cout<<" º Barang Termahal º            º                  Kode : R=Rak Buku \n";
 cout<<" ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍ͹                         L=Lemari   \n";
 cout<<" º Barang Termurah º            º                         K=Kursi    \n";
 cout<<" ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍ͹                         M=Meja     \n";
 cout<<" º Barang Terlaris º            º                         E=Ember    \n";
 cout<<" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍͼ                         S=Sapu     \n";
 for(b=1;b<=4;b++)
 {
  ulang:
  gotoxy(10,8+b);cout<<"    ";
  gotoxy(10,8+b);cin>> data[b].kode;
  if (data[b].kode == 'R' || data[b].kode == 'r' ){nilai[b][1]=50000; gotoxy(17,8+b); cout<<"Rak Buku";}
  else if (data[b].kode == 'L' || data[b].kode == 'l' ){nilai[b][1]=90000; gotoxy(17,8+b); cout<<"Lemari";}
  else if (data[b].kode == 'K' || data[b].kode == 'k' ){nilai[b][1]=30000; gotoxy(17,8+b); cout<<"Kursi";}
  else if (data[b].kode == 'M' || data[b].kode == 'm' ){nilai[b][1]=60000; gotoxy(17,8+b); cout<<"Meja";}
  else if (data[b].kode == 'E' || data[b].kode == 'e' ){nilai[b][1]=3000; gotoxy(17,8+b); cout<<"Ember";}
  else if (data[b].kode == 'S' || data[b].kode == 's' ){nilai[b][1]=4000; gotoxy(17,8+b); cout<<"Sapu";}
  else  goto ulang;

  gotoxy(33,8+b);cout<< nilai[b][1];   //harga
  gotoxy(44,8+b);cin>> nilai[b][2];    //jumlah
  nilai[b][3]=nilai[b][1]*nilai[b][2]; //total
  gotoxy(51,8+b);cout<< nilai[b][3];
  if(nilai[b][2] >=3){nilai[b][4]=0.1*nilai[b][3];} //diskon
  else nilai[b][4]=0.05*nilai[b][3];
  gotoxy(61,8+b);cout<< nilai[b][4];
  nilai[b][5]=nilai[b][3]-nilai[b][4];  //bayar
  gotoxy(70,8+b);cout<< nilai[b][5];
 }
 //barang Termahal Termurah Terlaris
 x[0]=nilai[1][1];
 x[1]=nilai[1][1];
 x[2]=nilai[1][1];
 tmp=nilai[1][2];
 for (b=1;b<=4;b++)
 {
  if (x[0]<nilai[b][1]){x[0]=nilai[b][1];}
  if (x[1]>nilai[b][1]){x[1]=nilai[b][1];}
  if (tmp<nilai[b][2]){tmp=nilai[b][2]; x[2]=nilai[b][1];}
 }
 for(b=0;b<3;b++)
 {
  if(x[b]==50000){gotoxy(23,17+(b*2));cout<<"Rak Buku";}
  else if(x[b]==90000){gotoxy(23,17+(b*2));cout<<"Lemari";}
  else if(x[b]==30000){gotoxy(23,17+(b*2));cout<<"Kursi";}
  else if(x[b]==60000){gotoxy(23,17+(b*2));cout<<"Meja";}
  else if(x[b]==3000){gotoxy(23,17+(b*2));cout<<"Ember";}
  else if(x[b]==4000){gotoxy(23,17+(b*2));cout<<"Sapu";}
 }
 gotoxy(18,24);cout<<"APAKAH ANDA INGIN MENGULANG ? [Y/N] "; cin>>ulang;
 }while(ulang== 'Y' || ulang == 'y');
}

Read More

Minggu, 13 Agustus 2017

Contoh Tugas Analisa dan Perancangan Sistem



ANALISA DAN PERANCANGAN




    1. Analisis Sistem Berjalan

Analisis sistem berjalan, menganalisa kegiatan yang sedang berjalan di Sebuah Perguruan Tinggi
  1. Gambaran Sistem berjalan
Admin melakukan penginputan mahasiswa baru pada aplikasi . kemudian Admin menyerahkan laporan mahasiswa baru ke masing-masing KAPRODI dan kartu ujian ke bagian Tata Usaha yang nantinya akan diberikan ke masing-masing mahasiswa untuk pembayaran SPP dll.
  1. Prosedur Penginputan Mahasiswa Baru
  1. Admin Menginput data Mahasiswa Baru
  2. KAPRODI dan Tata Usaha memeriksa laporan.
  3. Lalu, KAPRODI dan Tata Usaha segera melakukan verifikasi data
  4. Setelah dilakukan verifikasi, KAPRODI dan Tata Usaha mendapatkan data mahasiswa masing-masing jurusan beserta ruang dan kelas
  5. Tata Usaha yang telah mendapatkan hasil verifikasi, langsung melakukan pencetakan kartu mahasiswa.
  1. Kelemahan Sistem Berjalan
  1. Kelemahan
  1. Belum tersedianya pengelolaan data untuk proses update (perubahan).
  2. Tampilan Kartu hanya sebatas identitas belum menampilkan bukti pembayaran.
  3. Belum tersedianya pengelolaan transaksi pembayaran SPP.
  1. Evaluasi Sistem
Sistem yang dipakai hanya sebatas penginputan data Mahasiswa Baru saja. Belum memiliki Transaksi seperti yang disebutkan diatas selain pembayaran SPP penginputan nilai belum ada.
      1. Activity Diagram Sistem Berjalan

Gambar 3.1 Activity Diagram Sistem Berjalan

    1. Perancangan Sistem Usulan

Merancang sebuah aplikasi berbasis Android Mobile. Dengan sistem usulan ini diharapkan dapat menghindari kelemahan-kelemahan dalam sistem lama.
  1. Kelebihan Sistem Usulan
  1. Membantu dalam hal penghematan waktu yang dibutuhkan untuk memecahkan masalah.
  2. Menghasilkan solusi lebih cepat serta hasilnya dapat diandalkan.
  3. Dapat menyediakan data yang lengkap di mulai dari identitas dan jika dikembangkan juga bias menyediakan data pembayaran dan nilai.
  1. Prosedur pengambilan Keputusan Sistem Usulan
  1. Setiap KAPRODI sudah diberikan fasilitas gadget berupa smartphone Android oleh perguruan tinggi.
  2. Setiap smartphone tersebut dipasang aplikasi sistem informasi penerimaan mahasiswa baru.
  3. Hasil pendataan akan mempermudah proses verifikasi data.
  4. Admin mengirim hasil pendataan mahasiswa baru kepada KAPRODI melalui media sosial di Android yang sudah dipakai oleh perguruan tinggi.
  1. Gambaran Sistem Usulan





    1. Perancangan Unified Modelling Language

      1. Use Case Diagram Usulan

Use Case Diagram digunakan untuk menjelaskan apa yang akan dilakukan oleh sistem serta aktor-aktor yang akan berhubungan dengan proses-proses yang ada pada sistem. Dalam tahap ini penulis akan membuat Use Case Diagram sistem usulan, yaitu :
        1. Use Case Diagram

Gambar 3.2 Use case Diagram
Keterangan
Actor              :
Manager
Deskripsi        :
Login
  • Manager mengisi username, password dan statusnya untuk login.
  • Jika data valid maka akan masuk ke menu utama aplikasi.
  • Jika tidak maka akan ada pemberitahuan bahwa username/password tidak ada.

Keterangan
Actor              :
Manager
Deskripsi        :
Mengelola Data Frontliner
  • Manager menginput nama-nama Frontliner yang berada di area cabang Erafone.
  • Manager dapat merubah jika sewaku-waktu ada perubahan atau penggantian frontliner di areanya.
  • Manager dapat melihat list frontliner.
Keterangan
Actor              :
Manager
Deskripsi        :
Melihat Laporan
  • Manager dapat melihat laporan penjualan bulanan yang telah di input oleh frontliner.
  • Manager dapat mendownload hasil penjualannya juga.
Keterangan
Actor              :
Manajer
Deskripsi        :
Keamanan
  • Manajer dapat mengganti password lama dengan password yang baru demi keamanan datanya.

Keterangan
Actor              :
Manajer
Deskripsi        :
View Data
  • Manajer dapat melihat data frontliner.
  • Manajer dapat melihat data barang.
  • Manajer dapat melihat ahsil rekapitulasi hasil penjualan.
Keterangan
Actor              :
Frontliner
Deskripsi        :








Login
  • Frontliner mengisi username, password dan statusnya untuk login.
  • Jika data valid maka akan masuk ke menu utama aplikasi.
  • Jika tidak maka akan ada pemberitahuan bahwa username/password tidak ada.
Keterangan
Actor              :
Frontliner
Deskripsi        :



Mengelola Data Barang
  • Frontliner menginput data barang sesuai dengan barang yang tersedia di dalam outlet.
  • Data barang bisa dirubah dan dihapus sesuai dengan perubahan atau ada barang yang sudah tidak di stok kembali.
Keterangan
Actor              :
Frontliner
Deskripsi        :


Mengelola data penjualan
  • Frontliner menginput data penjualan verdasarkan penjualan yang dia lakukan setiap harinya.
Keterangan
Actor              :
Frontliner
Deskripsi        :

Keamanan
  • Frontlinerdapat mengganti password lama dengan password yang baru demi keamanan datanya.
Keterangan
Actor              :
Frontliner

View Data
  • Frontliner dapat melihat data barang.
  • Frontliner dapat melihat data transaksi.
      1. Activity Sistem Usulan

Gambar 3.3 Activity Diagram Sistem Usulan
Gambar 3.3 merupakan gambar activity diagram dari use case login pada sistem. Gambar di atas menggambarkan bagaimana para admin melakukan aktifitas dalam menggunakan sistem rekap laporan yaitu mulai dari manajer menginput data frontliner, setelah itu memberikan password login kepada masing-masing frontliner. Lalu Frontliner dapat mengubah password untuk menjaga keamanan datanya, melakukan penjualan harian, jika pada hari itu menjual barang maka frontliner menginput data penjualan harian mereka. Jika tidak mereka tidak mengisi data penjualannya.
      1. Sequence Diagram Sistem Usulan

        1. Sequence Diagram Login Manajer

Gambar 3.4 Sequence Diagram Login Manajer

        1. Sequence Diagram Login Frontliner

Gambar 3.5 Sequence Diagram Login Frontliner
        1. Sequence Diagram Master Frontliner

Gambar 3.6 Sequence Master Frontliner
        1. Sequence Diagram Keamanan Manager

Gambar 3.7 Sequence Diagram Kemanan Manager

        1. Sequence Diagram Keamanan Frontliner

Gambar 3.8 Sequence Diagram Keamanan Frontliner
        1. Sequence Diagram Laporan

Gambar 3.9 Sequence Diagram Laporan

        1. Sequence Diagram View Data Fronliner

Gambar 3.10 Sequence Diagram View Data Frontliner
        1. Sequence Diagram View Data Manager

Gambar 3.11 Sequence Diagram View Data Manager

        1. Sequence Diagram Barang

Gambar 3.12 Sequence Diagram Barang
        1. Sequence Diagram Transaksi

Gambar 3.13 Sequence Diagram Transaksi
      1. Class Diagram

Gambar 3.14 Class Diagram

      1. Rancangan basis Data

        1. Entity Relationhip Diagram (ERD)

Entity Relationship Diagram (ERD) atau diagram-ER adalah model teknik pendekatan yang meyatakan atau menggambarkan hubungan suatu model. Didalam hubungan ini tersebut dinyatakan yang utama dari penggambaran diagram-ER adalah menunjukan objek data (entity) dan hubungan (relatioship), yang ada pada entity berikutnya. Berikut gambar dari ERD sistem usulan :
Gambar 3.15 ERD Sistem Usulan

        1. Transformasi ERD ke LRS

Dibawah ini adalah agar langkah-langkah dalam transformasi ERD (Entity Relationship Diagram) diubah kebentuk LRS (Logical Record Structure).
Gambar 3.16 Transformasi ERD ke LRS
        1. Logical Structure Records (LRS)

Gambar 3.17 LRS
        1. Spesifikasi Data

Basis data yang telah mempunyai bentuk normal selanjutnya dijelaskan dalam spesifikasi basis data yang meliputi nama file, media penyimpanan yang digunakan, isi yang disimpan, organisasi yang digunakan, primary key, panjang record, jumlah record, dan struktur file.
Spesifikasi basis data yang memberikan penjelasan secara detail tentang masing-masing basis data yang digunakan dalam sistem sebagai berikut :
  1. Nama File : Frontliner
Media : Hardisk
Isi : Data-data frontliner
Organisasi : Index Squential
Primary key : nif





Struktur file :
Tabel 3.1 Frontliner
No
Nama File
Type
Lebar
Keterangan
1
nif
int
10
nif
2
nama
varchar
30
nama
3
telepon
varchar
12
telepon
4
password
varchar
20
password
5
nik
int
10
nik

  1. Nama File : Manajer
Media : Hardisk
Isi : Data-data manajer
Organisasi : Index Squential
Primary key : nik
Struktur file :
Tabel 3.2 Manajer
No
Nama File
Type
Lebar
Keterangan
1
nik
int
10
nik
2
nama
varchar
30
nama
3
notelp
varchar
12
notelp
4
password
varchar
20
password

  1. Nama File : Barang
Media : Hardisk
Isi : Data-data barang
Organisasi : Index Squential
Primary key : idbarang




Struktur file :
Tabel 3.3 Barang
No
Nama File
Type
Lebar
Keterangan
1
idbarang
varchar
10
idbarang
2
jenis
varchar
12
jenis
3
merk
varchar
12
merk
4
harga
int
11
harga
5
tipe
varchar
20
tipe

  1. Nama File : Penjualan
Media : Hardisk
Isi : Data-data pembelian
Organisasi : Index Squential
Primary key : noinvoice
Struktur file :
Tabel 3.4 Penjualan
No
Nama File
Type
Lebar
Keterangan
1
noinvoice
varchar
15
noinvoice
2
tanggal
date
-
tanggal
3
hrg
int
11
harga
4
konsumen
varchar
30
konsumen
5
nif
int
10
nif
6
idbarang
varchar
10
idbarang

        1. Rancangan Kode


  • Nif terdiri dari angka berdasarkan nomor induk frontliner
  • Nik terdiri dari angka berdasarkan nomor induk manajer
  • Idbarang terdiri dari nomor barang yang sudah ditentukan oleh perusahaan
  • Noinvoice terdiri dari kode area erafone dan nomor urut transaksi
Read More