Jumat, 02 Juni 2017

Linked List ( Struktur Data MOdul 10 )

            Assalamu’alaikum Wr, Wb, oke pada kesempatan kali ini saya akan membahas sebuah program yang bernama lingked listpa itu Linked list ? Linked list adalah sejumlah simpul (node) yang dikaitkan dengan simpul yang lain dengan bantuan pointer dalam suatu urutan tertentu. Suatu linked list dikatakan single linked list apabila hanya ada satu pointer yang menghubungkan setiap node (satu arah “next”).
            Oke Disini saya mempunyai beberapa contoh program lingked list, langsung saja tanpa berlama – lama kita masuk kecontoh pertama
Script Praktikum 10.1
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct nod
{
int data;
struct nod*next;
}NOD,*NODPTR;
void CiptaSenarai(NODPTR*s)
{
*s=NULL;
}
NODPTR NodBaru(int m)
{
NODPTR n;
n =(NODPTR) malloc(sizeof(NOD));
            if(n!=NULL){
            n-> data=m;
            n-> next=NULL;
}
return n;
}
void SisipSenarai(NODPTR *s, NODPTR t, NODPTR p)
{
if(p==NULL){
t -> next =*s;
*s =t;
}

else{
t->next=p->next;
p->next=t;
}
}
void CetakSenarai(NODPTR s)
{
NODPTR ps;
for(ps = s; ps!=NULL; ps=ps->next)
printf("%d -->", ps-> data);
printf("NULL\n");
}
int main()
{
NODPTR pel;
NODPTR n;
CiptaSenarai(&pel);
n=NodBaru(55);
SisipSenarai(&pel, n, NULL);
CetakSenarai(pel);
return 0;
}
Hasil Running :

Pembahasan
            Dalam program linked list tersebut menggunakan struct untuk mengakses variablenya dan nod*next itu next nya berfungsi untuk menyimpan nilai selanjutnya dan merupakan sebuah variable pointer
void CiptaSenarai(NODPTR*s)
{
*s=NULL;
}
NODPTR NodBaru(int m)
{
NODPTR n;
n =(NODPTR) malloc(sizeof(NOD));
            if(n!=NULL){
            n-> data=m;
            n-> next=NULL;
}
script itu berfungsi untuk memberitahukan bahwa variable pointer *s itu null atau 0, dan n itu mempunyai nilai dari variable data yang akan di isi. dan untuk melakukan pencetakan menggunakan for. kemungkinan dalam nilai variable data itu mempunyai beberapa nilai dalam elemennya maka menggunakan for.dan terdapat script n=NodBaru(55); itu maksudnya adalah jilai yang akan keluar berupa nilai 55 , jika 55 itu di ganti dengan 90 maka outputnya adalah 90, bisa di bilai itu adalah nilai dalam variable data
Script Praktikum 10.2
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct mahasiswa
{
int nim;
mahasiswa *next;
}*p;


void init(mahasiswa **p)
{
*p =NULL;
}
mahasiswa *alokasi(int nim)
{
mahasiswa *p;
p=(mahasiswa*)malloc(sizeof(mahasiswa));
if(p!=NULL)
{
p->next =NULL;
p->nim =nim;
}
return(p);
}

void add(mahasiswa **p, int nim)
{
*p= alokasi (nim);
printf("%d",(*p)->nim);
}

int main()
{
mahasiswa *head;
init(&head);
add(&head,56);
getch();
return 0;
}
Hasil Running :

Dalam Program Linkedlist ini hampir sama dengan program sebelumnya, dalam program in akan menampilkan sebuah nim dari mahasiswa, sama seperti sebelumnya variable next ini bergunak untuk selanjutnya atau bisa di bilang nilai selanjutnya yang akan keluar, dan variable pointer p ini berguna untuk memberitahu bahwa *p ini = null atau nol , yang akan di gunakan sebagai kondisi if else jika kondisi p itu nol maka statement ini yang akan di jalankan yaitu p->next maka hasilnya null atau nol dan jika p -> maka hasilnya nim mahasiswa dan dalam function add itu terdapat output (*p)->nim maka yang akan keluar itu nim mahasiswa , jika variablenya bukan nim misalnya next maka yang akan keluar outputnya NULL dan dalam fungsi utama terdapat pemanggilan function add, dimana dalam daftar parameternya itu (mahasiswa **p, int nim) dan kenapa bukan daftar parameter itu yang di panggil dan di ganti dengan (&head,56) masudnya adalah head itu kepala jadi nilai pertama atau nim perta yang akan keluara, dan knapa nim di ganti dengan 56 itu menunjukan nilai dari variable nim itu sendiri.

Script Latihan 10.1
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct node{
int data;
struct node*p;};
void TambahElemen (struct node **d, struct node **b, int nilai){
/*membuat struktur node baru*/
struct node*temp;
temp=(struct node *)malloc (sizeof (struct node));

/*mendefinisikan field yang terdapat pada struktur node yang baru dialokasikan*/
temp->data=nilai;
temp->p=NULL;
if(*d== NULL){
*d= temp;
}else{
(*b)->p=temp;}
*b=temp;}
void HapusElemen (struct node **d, struct node **b){
struct node*temp;
if(*d == NULL){
printf("Tidak terdapat elemen dalam queue");
}else{
temp= *d;
*d= temp->p;
free(temp);
if(*d == NULL){
*b=NULL;
}
}
}
void TampilkanNilai(struct node *d){
int nilai;
while(d != NULL){
nilai = d->data;
printf("%d\n",nilai);
d=d->p;}
}
int main(void){
struct node*depan, *belakang;
depan = belakang =NULL;
TambahElemen(&depan,&belakang,10);
TambahElemen(&depan,&belakang,20);
TambahElemen(&depan,&belakang,30);
TambahElemen(&depan,&belakang,40);
TampilkanNilai(depan);
HapusElemen(&depan,&belakang);
printf("Nilai-Nilai didalam queue");
printf("Setelah penghapusan elemen pertama:\n");
TampilkanNilai(depan);
getch();
return 0;
}
Hasil Running

Pembahasan
            Program ini merupakan sebuah antrian dan dalam program ini terdapat penghapusan antrian. Dalam program ini menggunakan function, pointer dan juga linked list( temp -> data ) itu dinamakan linked list, linked list ini berguna sebagai penghubung nilai satu dengan yang lannya.
            Jadi dalam video ini terdapat function void TambahElemen yang berfungsi untuk menambahkan nilai dalam antrian, bisa dilihat di script ( terdapat script linked list )
            Function HapusElemen berguna untuk menghapus sebuah antrian di mana dalam function ini terdapat sebuah if untuk menentukan kodisi apakah terdapat antrian atau tidak.
            Dan untuk function TampilkanNilai berfungsi untuk menampilkan antrian yang belum dihapus antriannya dan yang sudah, jadi tergantung penempatan funtion jika function ditempatkan sebelum function hapus maka antrian yang sebelum di hapus akan tampil, dan jika di letakan setelah function hapus maka antrian pun berubah dan hasilnya antian yang telah terhapus yang akan keluar.
            Dan dalam pemanggilan function tambah elemen itu daftar para meternya diganti itu hanya sebai penunjuk jadi nilai yang akan keluar itu bagan kepala dan ekor, dan kenapa dalam daftar parameter nilai di isi dengan 10 – 40 itu menunjukan bahwa nilai itu merupakan isi dari variable nilai itu
Nah itulah beberapa program Lingked List dan juga pembahasan yang dapat saya sharing kepada kalian, semoga ilmu yang saya bagikan dapat bermanfaat bagi kalian semua para pembaca, mungkin sampai disini dulu sharing tentang pemrograman khususnya program Lingked List yang bisa saya posting. Dan Jangan lupa ya jika kalian mempunyai kritik dan saran silahkan tambahkan pada kolom komentar. Terima kasih atas kunjungan kalian.



Senin, 22 Mei 2017

program QUEUE bahasa c++ [ Modul 9 Struktur Data ]

            Assalamu’alaikum Wr, Wb, oke pada kesempatan kali ini saya akan membahas sebuah program yang bernama QUEUE, QUEUE ini merupakan sebuah program antrian dan QUEUE ini bersifat FIFO yaitu ( First In First Out ) , contohnya seperti antian saat membeli tiket kereta dimana jika terdapat Orang A yang mengantri pertama maka dia pun yang akan keluar pertama.
            Oke Disini saya mempunyai beberapa contoh program stack, langsung saja tanpa berlama – lama kita masuk kecontoh pertama
Script Praktikum 9.1
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
void main()
{
int cek=0, data[8], x, hapus;
char pil;
do
{
clrscr();
cout<<" Ujian Praktikum Struktur Data Queue "<<endl;
cout<<" Zhein Arifin "<<endl;
cout<<" Universitas Kuningan "<<endl;
cout<<endl;
printf("d. Masukan Data Antrian \n");
printf("e. Hapus Data Antrin \n");
printf("n. Lihat Data Antrian \n");
printf("y. Exit Program \n");
cout<<endl;
printf(" Ketikan Huruf Dari Salah Satu Pilihan Diatas ");
pil=getche();
cout<<endl;
if (pil!='d' && pil !='e' && pil !='n' && pil!='y')
printf("\n\n salah ketik, ulangi lagi .. \n");
else
{
if(pil=='d')
{
if(cek==8)
{
printf("\n Antrian Penuh\n");
getch();
}
else
{
printf("\n MASUKKAN ANGKA->"); scanf("%i",&x);
data[cek]=x;
cek++ ;
}}
else {
if(pil=='e')
{
if(cek==0)
printf("\nMaaf Tidak Antrian Untuk Dihapus \n\n");
else
{
hapus=data[0];
for(int v=0; v<cek; v++)
data[v]=data[v+1];
data[cek-1]=NULL;
cek--;
cout<<endl;
printf("Yakin  Anda Ingin Data Ini Dihapus ?? ");
cout<<endl;
printf("\nData dengan nilai = %i akan terhapus. [Tekan Enter]",hapus);
}
getch();
}
else
{
if(pil=='n')
{
if(cek==0)
printf("\n Maaf Tidak Ada Antrian Untuk Di Tampilkan. \n\n");
else
{
printf("\n");
for(int z=0; z<cek; z++)
{
printf(" [ %i ] \n",data[z]);
}
}
getch();
}
}
}
}
}while(pil!='y');
cout<<endl;
cout<<endl;
printf(" Yakin Anda Ingin Keluar .. ?? {{{ Tekan Enter Cak }}} ");
pil=getche();
}
 Hasil Running :

Pembahasan
            Program ini adalah contoh sebuah Queue atau bisa dibilang antrian, dan dalam program ini terdapat 4 menu, yaitu menu input antrian, menu delet antrian, menu view antrian, dan dalam program ini detentukan batas maxsimal 8 antrian, dan menggunakan perulangan do karena akan dilakukan penginputan berulang - ulang jadi setia input maka datanya akan bertambah
            Menu input antrian ini menggunakan if sebagai kondisi jika antian sudah memenuhi batas nya maka akan terdapat notif antrian penuh dan jika belum penuh maka masih dapat melakukan penginputan. Untuk melakukan penginputan menggunakan variable x dan kemudian di pindahkan ke variable array karena data – tersebut akan di tampung menjadi 1, dan gante elemen array dengan cek karena nilai cek akan bertambah setiap penginputan karena terdapat script ( cek++ ) sebagai penentu indek atau nomor input.
            Menu hapus antrian juga mempunyai if untuk menentukan kondisi jika tidak terdapat antrian maka terdapat notif “ Tidak Ada Antrian Untuk Dihapus “ dan jika terdapat antrian maka akan di hapus dan scripnya itu menggunakan for untuk menghapusnya
hapus=data[0];
for( v=0; v<cek; v++)
data[v]=data[v+1];
data[cek-1]=NULL;
cek--;
hapus=data[0] itu berguna untuk menunjukan nilai yang akan dihapus , dan cek dalam for sebagai batas dri peulangan dan cek itu terdapat nilai dri no antrian yang terakhir di input dan akan masuk nilainya ke variable hapus, karena melakukan perulangan pada antrian pertama, maka antrian pertama akan terhapus dengan script cek--, jadi nilai antrian pertama akan di kurang jd 0.
            Menu view antrian juga terdapat if sebagai kondisi untuk menentukan jika terdapat antrian maka akan kelar antrian tersebut dan jika tidak ada maka akan keluar notif. Untuk output lakukan perulangan for dengan batas perulangan cek (no antrian atau indek).
Script Praktikum 9.2
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct node{
int data;
struct node*p;};
void TambahElemen (struct node **d, struct node **b, int nilai){
/*membuat struktur node baru*/
struct node*temp;
temp=(struct node *)malloc (sizeof (struct node));

/*mendefinisikan field yang terdapat pada struktur node yang baru dialokasikan*/
temp->data=nilai;
temp->p=NULL;
if(*d== NULL){
*d= temp;
}else{
(*b)->p=temp;}
*b=temp;}
void HapusElemen (struct node **d, struct node **b){
struct node*temp;
if(*d == NULL){
printf("Tidak terdapat elemen dalam queue");
}else{
temp= *d;
*d= temp->p;
free(temp);
if(*d == NULL){
*b=NULL;
}
}
}
void TampilkanNilai(struct node *d){
int nilai;
while(d != NULL){
nilai = d->data;
printf("%d\n",nilai);
d=d->p;}
}
int main(void){
struct node*depan, *belakang;
depan = belakang =NULL;
TambahElemen(&depan,&belakang,10);
TambahElemen(&depan,&belakang,20);
TambahElemen(&depan,&belakang,30);
TambahElemen(&depan,&belakang,40);
TampilkanNilai(depan);
HapusElemen(&depan,&belakang);
printf("Nilai-Nilai didalam queue");
printf("Setelah penghapusan elemen pertama:\n");
TampilkanNilai(depan);
getch();
return 0;
}

Hasil Running

Pembahasan
            Program ini merupakan sebuah antrian dan dalam program ini terdapat penghapusan antrian. Dalam program ini menggunakan function, pointer dan juga linked list( temp -> data ) itu dinamakan linked list, berhupung saya belum paham mengenai liked list maka saya tidak akan membahasnya mungkin kalian dapat mencari di google atau mungkin saya akan membahasnya di postingan selanjutnya.
            Jadi dalam video ini terdapat function void TambahElemen yang berfungsi untuk menambahkan nilai dalam antrian, bisa dilihat di script ( terdapat script linked list )
            Function HapusElemen berguna untuk menghapus sebuah antrian di mana dalam function ini terdapat sebuah if untuk menentukan kodisi apakah terdapat antrian atau tidak.
            Dan untuk function TampilkanNilai berfungsi untuk menampilkan antrian yang belum dihapus antriannya dan yang sudah, jadi tergantung penempatan funtion jika function ditempatkan sebelum function hapus maka antrian yang sebelum di hapus akan tampil, dan jika di letakan setelah function hapus maka antrian pun berubah dan hasilnya antian yang telah terhapus yang akan keluar.
            Jadi script
TambahElemen(&depan,&belakang,10);
TambahElemen(&depan,&belakang,20);
TambahElemen(&depan,&belakang,30);
TambahElemen(&depan,&belakang,40);
Berfungsi untuk mendeskripsikan sebauh nilai dari antrian dan untuk menampilkannya menggunakan scipt TampilkanNilai(depan);
Nah itulah beberapa program Queue dan juga pembahasan yang dapat saya sharing kepada kalian, semoga ilmu yang saya bagikan dapat bermanfaat bagi kalian semua para pembaca, mungkin sampai disini dulu sharing tentang pemrograman khususnya program Queue atau Antrian yang bisa saya posting. Dan Jangan lupa ya jika kalian mempunyai kritik dan saran silahkan tambahkan pada kolom komentar. Terima kasih atas kunjungan kalian.



Kamis, 18 Mei 2017

Program Stack bahasa c++

            Assalamu’alaikum Wr, Wb, oke pada kesempatan kali ini saya akan membahas sebuah program yang bernama stack, stack ini merupakan sebuah tumpukan dan stack ini bersifat LIFO yaitu ( Last In Firs Out ) , contohnya seperti tumpukan piring saat akan mengambil piring maka piring paling atas ( terakhir dimasukan ) yang akan di ambil
            Oke Disini saya mempunyai beberapa contoh program stack, langsung saja tanpa berlama – lama kita masuk kecontoh pertama
Script Praktikum 8.1
#include <iostream.h>
#include <conio.h>
#define max 5

struct Tumpukan{
 int atas;
            int data[max];
            }T;

void awal(){
 T.atas=-1;
            }

int kosong(){
 if(T.atas==-1)
             return 1;
            else
             return 0;
                        }

int penuh(){
 if(T.atas==max-1)
             return 1;
            else
             return 0;
                        }


void input(int data){
 if(kosong()==1)
             {T.atas++;
                         T.data[T.atas]=data;
                         cout<<"Data "<<T.data[T.atas]<<" masuk ke stack";}
            else if(penuh()==0)
             {T.atas++;
                         T.data[T.atas]=data;
                         cout<<"Data "<<T.data[T.atas]<<" masuk ke stack";}

            else
                         cout<<"Tumpukan penuh";
            }

void hapus(){
            if(kosong()==0){
                        cout<<"Data teratas sudah terambil";
            T.atas--;
            }
            else
            cout<<"Data kosong";
            }

void tampil(){
 if(kosong()==0)
            {for(int i=T.atas;i>=0;i--)
             {cout<<"\nTumpukan ke "<<i<<"="<<T.data[i];}
                        }
            else
            cout<<"Tumpukan kosong";
            }

void bersih(){
 T.atas=-1;

cout<<"Tumpukan kosong!";
}

void main(){
int pil,data;
awal();
do
{
clrscr();
cout<<"1. Input\n2. Hapus\n3. Tampil\n4. Bersihkan\n5. Keluar\nMasukkan pilihan :";
cin>>pil;
switch(pil)
 {case 1:cout<<"Masukkan data = ";cin>>data;
                        input(data);
                                      break;
             case 2:hapus();
                         break;
             case 3:tampil();
                         break;
             case 4:bersih();
                         break;
             case 5: cout<<"Terimakasih, tekan enter untuk keluar";
             }
getch();     }
while(pil!=5);}


Hasil Running :

Pembahasan
            Program ini adalah contoh sebuah stack yang dimana di dalamnya terdapat operasi PUSH ( memasukan data ), POP ( menghapus data yang terakhir diinputkan ) Tampil ( Menampilkan isi tumpukan) CLEAR ( menghapus semua tumpukan ) dan exit. Hal pertama yang harus dilakukan adalah memilih dari ke 5 menu tersebut di mana setiap menu terdapat statemennya masing – masing dan stantemen itu terdapat dalam function.
            Operasi PUSH atau INPUT, dalam statement PUSH terdapat perintah if(kosong()==1) jadi jika tumpukan kosok maka kita akan menginput sebuah nilai yang nantnya akan ditampung atau ditumpuk dalam variable array data. Dan kondisi else if (penuh()==0) maka akan melakukan penginputan sekali lagi krn itu sbg pemberi tahu bahwa tumpukan hampir penuh
            Operasi POP atau Hapus dalam statement ini hampir sama yaitu terdapat kondisi if(kosong()==0) maksudnya adalah jadi tumpukan yang kosong itu tersisa 0 atau dianggapnya sudah penuh, dan function kosong itu mempunyai nilai 0 jika nilai T.atas lebih dari -1, dan mempunyai nilai satu jika T.atasnya itu -1, jadi selama nilai fungsi kosongnya bernilai 0 maka stack akan bisa di hapus dan juga dengan mengurangnya T.atas. misalnya t.atas = 5 jika di hapus maka tinggal 4 data yang tersisa, dan jika t.atas sudah mempunyai nilai 0 maka akan keluar notice Tumpukan Kosong.
            Operasi Tampilan atau VIEW untuk menampilkan stack LIFO maka hanya perlu dilakukan pemanggilan beserta perulangan for dan deremen, jadi jika menggunakan oprasi decremen maka yang akan keluar itu nilai yg terakhir diinputkan dan batasan dari perulangan nya adalah T.atas krn setiap melakukan penginputan nilai T.atas akan bertambah jd nilai T.atas menunjukan jumlah data dalam tumpukam  
Script Praktikum 8.2
#include<iostream.h>
#include<conio.h>
#include<string.h>
struct
{
char data [15][100], max[15];
int i,j;
}stack;
void push()
{
stack.i++;
cout<<" Masukan Data : ";
cin>>stack.max;
strcpy(stack.data[stack.i], stack.max);
}
void pop ()
{
if(stack.i>0)
{
cout<<" Data Yang Terambil : "<<stack.data[stack.i]<<endl;
stack.i--; stack.j--;
}
else
cout<<" Tak Ada Data Yang Terambil "<<endl;
}
void view(int n)
{
if(stack.j>0)
{
for(int e=n; e>=1; e--)
cout<<stack.data[e]<<endl;
}
else
{
cout<<" Tak Ada Data Tersimpan "<<endl;
}
}
void clear()
{
stack.j=0; stack.i=0;
}
void main()
{
int n, plh;
ayo:
clrscr();
cout<<" Contoh Program Stack [Tumpukan] \n\n ";
cout<<" Maksimal Tumpukan Data : "; cin>>n;
stack.data[n];
stack.i=0;
stack.j=0;
balik:
clrscr();
cout<<"\n 1. Push \n 2. Pop \n 3. View \n 4. Clear \n 5. Qiit \n";
cout<<"\n Pilih : "; cin>>plh;
cout<<endl;
if(plh==1)
{
if(stack.j<n)
{
stack.j++;
push();
}
else
{
cout<<" Tumpukan Penuh "<<endl;
getch();
}
goto balik;
}
else if(plh==2)
{
pop();
getch(); goto balik;
}
else if(plh==3)
{
view (stack.i);
getch(); goto balik;
}
else if(plh==4)
{
clear();
getch();
goto balik;
}
else if(plh==5)
{
getch(); goto ayo;
}
else
{
cout<<" Input Yang Anda Masukan Salah !!! "<<endl;
getch(); goto ayo;
}
}
Hasil Running

Pembahasan
            Program ini sama halnya dengan program sebelunya namun terdapat beberapa yang berbeda yaitu dalam program ini kita dapat menentukan batasan perulangan input dan output atau berapa maksimal tumpukan yang dapat diinputkan, dan dalam pemilihan menunya menggunakan if else dan menggunakan perulangan go to untuk kembali ke menu pemilihan .



Study Kasus Latihan 8.1
Konsep stack dilogikakan seperti sebuah tumpukan barang yang tersusun keatas dengan ketinggian tumpukan yang telah di tentukan, untuk mengilustrasikannya program dibawah ini.
Script Study Kasus Latihan 8.1
#include<conio.h>
#include<stdio.h>
#define N 20
main()
{
int nilai[N],i,jml;
printf(" Jumlah Maksimal Tumpukan (<=20) = ");
scanf("%d",&jml);
for(i=0; i<jml; i++)
{
printf(" Data ke-%d = ", i+1);
scanf("%d",&nilai[i]);
if(i==jml-1)
{
printf("Tumpukan Penuh");
getch();
}
}
for(i=jml-1; i>=0;i--)
{
printf("\n data ke-%d = %d", i+1, nilai[i]);
}
getch();
return 0;
}
Hasil Running

Pembahasan
            Ini adalah sebuah contoh program, pertama masukan jumlah tumpukan yang dapat di tampung dan maksimal tumpukan dibawah 20, karena data yang akan diinput akan di tampung dalam array maka lakukan penginputan dengan menggunakan for dan batasanya adalah nilai yang di inputkan pertama, masukan if dengan kondisi (i==jml-1) if ini berguna untuk memberitahu jika tumpukan suda penuh. Dan kondisi if i==jml-1 itu karena dalam array indeks pertama di hitung 0 dan batasan indeks itu adalah nilai dikurangi 1 jadi jika element arraynya 5 maka indeks terakhirnya 5-1=4. Untuk output gunakan for untuk outputnya namun i nya di dekremen kan (i--) karena stack ini mempunyai sifat LIFO ( last in first out ) jadi data yang di input terakhir akan keluar pertama.
Nah itulah beberapa program Stack dan juga pembahasan yang dapat saya sharing, semoga ilmu yang saya bagikan dapat bermanfaat bagi kalian semua para pembaca, mungkin sampai disini dulu sharing tentang pemrograman khususnya program Stack yang bisa saya posting. Dan Jangan lupa ya jika kalian mempunyai kritik dan saran silahkan tambahkan pada kolom komentar. Terima kasih atas kunjungan kalian.