stack merupakan sebuah konsep dimana kita hanya bisa mengakses data yang terakhir masuk seperti halnya dalam sebuah tumpukan. sebuah stack di inisialisasikan dengan top sebagai ujung masuknya item dan juga keluarnya item.
Dalam stack terdapat operasi push unuk memasukkan data dan juga pop untuk mengeluarkan data. berikut operasi push dan juga pop
void push(char x)
{
stack[top+1]=x;
top++;
}
void pop()
{
temp=stack[top];
stack[top]=NULL;
top--;
}
bAhagiAnYa kUliAh di iNfoRmAtiKa
Jumat, 25 Juni 2010
pembahasan linked list
konsep dasar linked list hampir sama dengan array. jika kita menggunakan indeks dalam array, maka dalam linked list kita akan menggunakan pointer. Pointer akan digunakan untuk menunjuk alamat lain sebuah data dalam linked list hingga terbentuk sebuah rantai data. sebuah linked list disusun dari struct, contoh
typedef struct simpul {
char nama[20];
float nilai;
struct simpul *next_simpul;
} simpulku;
di atas terdapat sebuah struct yang berisi nama,nilai, dan simpul *next yang merupakan sebuah pointer yang akan menunjuk ke simpul berikutnya, berikut gambaran sebuah linked list

dalam linked list juga terdapat head yang menunjuk ke simpul paling awal dan tail yang menunjuk simpul terakhir
typedef struct simpul {
char nama[20];
float nilai;
struct simpul *next_simpul;
} simpulku;
di atas terdapat sebuah struct yang berisi nama,nilai, dan simpul *next yang merupakan sebuah pointer yang akan menunjuk ke simpul berikutnya, berikut gambaran sebuah linked list
dalam linked list juga terdapat head yang menunjuk ke simpul paling awal dan tail yang menunjuk simpul terakhir
pembahasan searching
searching merupakan algoritma untuk mencari data dari kumpulan beberapa data. Ada macam2 algoritma searching, misalnya sequential searching dan binery searching.
1. Sequential searching
sequntial serching merupakan algoritma pencarian yang mencari secara sequential atau berurutan. Tiap2 index akan dicek dan jika data telah sama dengan data yang dicari maka pencarian akan dihentikan.
berikut algoritmanya
for (i = 0; i < n; i++)
if (key == data[i])
return (i); //return the index
return (-1); //key not found
n merupakan jumlah keseluruhan data. Data akan dicari secara berurutan sampai batas ke n. Di dalam looping terdapat fungsi if untuk mengecek apakah data tersebut sama. Jika sama maka fungsi akan mengenbalikan nilai i yang berarti data telah ditemukan
2. Binery searching
binery searching merupakan algoritma pencarian data dimana program akan mempersempit rung lingkup pencarian sampai hanya tersisa data yang dicari ataupun data tidak ditemukan. berikut algoritmanya
low = 0;
high = n – 1;
while (low <= high)
{ middle = (low + high)/2;
if (key == data[middle]
return(middle);
if (key < data[middle]
high = middle – 1;
else
low = middle + 1;
}
return(-1);
low merupakan variabel untuk indeks awal dan high untuk indeks terakhir. sedangkan middle merupakan indeks tengah yang di dapat dari penjumlahan low dan high dibagi 2.
berikutnya akan dicek apakah data yang dicari lebih besar dari data pada indeks middle atau lebih kecil atau juga sama. jika lebih besar maka low atau batas bawah akan dimulai dari middle + 1 dan jika lebih kecil maka high atau batas atas akan berakhir di middle -1. Proses ini akan terus berulang samapi data ditemukan ataupun data tidak ditemukan. ada 1 hal yang sangat penting dalam binery seearching yaitu data yang dicari sudah harus urut
1. Sequential searching
sequntial serching merupakan algoritma pencarian yang mencari secara sequential atau berurutan. Tiap2 index akan dicek dan jika data telah sama dengan data yang dicari maka pencarian akan dihentikan.
berikut algoritmanya
for (i = 0; i < n; i++)
if (key == data[i])
return (i); //return the index
return (-1); //key not found
n merupakan jumlah keseluruhan data. Data akan dicari secara berurutan sampai batas ke n. Di dalam looping terdapat fungsi if untuk mengecek apakah data tersebut sama. Jika sama maka fungsi akan mengenbalikan nilai i yang berarti data telah ditemukan
2. Binery searching
binery searching merupakan algoritma pencarian data dimana program akan mempersempit rung lingkup pencarian sampai hanya tersisa data yang dicari ataupun data tidak ditemukan. berikut algoritmanya
low = 0;
high = n – 1;
while (low <= high)
{ middle = (low + high)/2;
if (key == data[middle]
return(middle);
if (key < data[middle]
high = middle – 1;
else
low = middle + 1;
}
return(-1);
low merupakan variabel untuk indeks awal dan high untuk indeks terakhir. sedangkan middle merupakan indeks tengah yang di dapat dari penjumlahan low dan high dibagi 2.
berikutnya akan dicek apakah data yang dicari lebih besar dari data pada indeks middle atau lebih kecil atau juga sama. jika lebih besar maka low atau batas bawah akan dimulai dari middle + 1 dan jika lebih kecil maka high atau batas atas akan berakhir di middle -1. Proses ini akan terus berulang samapi data ditemukan ataupun data tidak ditemukan. ada 1 hal yang sangat penting dalam binery seearching yaitu data yang dicari sudah harus urut
source code sorting bubble
#include "stdio.h"
void bubble(char a[],char n)
{
char ss;
for(int i=0;i < n;i++)
{
for(int j=0;j < n-1-i;j++)
if(a[j] > a[j+1])
{
ss=a[j];
a[j]=a[j+1];
a[j+1]=ss;
}
}
for(int y=0;y < n;y++)
{
printf("%c",a[y]);
}
printf("\n\n");
}
void main()
{
char a[100];
int n=0;
printf("Masukkan angka=");
scanf("%s",&a);
for(int i=0;i <= 100;i++)
{
if(a[i]>1)n++;
}
bubble(a,n);
}
void bubble(char a[],char n)
{
char ss;
for(int i=0;i < n;i++)
{
for(int j=0;j < n-1-i;j++)
if(a[j] > a[j+1])
{
ss=a[j];
a[j]=a[j+1];
a[j+1]=ss;
}
}
for(int y=0;y < n;y++)
{
printf("%c",a[y]);
}
printf("\n\n");
}
void main()
{
char a[100];
int n=0;
printf("Masukkan angka=");
scanf("%s",&a);
for(int i=0;i <= 100;i++)
{
if(a[i]>1)n++;
}
bubble(a,n);
}
source code searching bnary
#include"stdio.h"
int npm[20];
int xx;
int key;
void SO(int a)
{
for(int i=0;i < a-1;i++)
for(int j=0;j < a-i-1;j++)
if(npm[j] > npm[j+1])
{
xx=npm[j];
npm[j]=npm[j+1];
npm[j+1]=xx;
}
}
int cari(int r)
{
int a=0;
int z=r;
int m;
int nilai=0;
while(a<=z && nilai==0)
{
m=(a+z)/2;
if(key == npm[m])
nilai=1;
else
if(key < npm[m])
z=m-1;
else
a=m+1;
}
if(nilai==1) return 1;
else
return 0;
}
void main()
{
int n;
int hasil;
printf("Brapa data yang ingin di masukkan=");
scanf("%d",&n);
for(int i=0;i < n;i++)
{
printf("\n\nAngka ke-%d=",i+1);
scanf("%d",&npm[i]);
}
for(int y=0;y < n;y++)
{
printf("%d,",npm[y]);
}
SO(n);
printf("\nMasukkan angka yang di cari=");
scanf("%d",&key);
hasil=cari(n);
if(hasil==1)
{printf("Data di temukan\n\n");}
else if(hasil==0)
{ printf("Data TIDAK di temukan\n\n");}
}
int npm[20];
int xx;
int key;
void SO(int a)
{
for(int i=0;i < a-1;i++)
for(int j=0;j < a-i-1;j++)
if(npm[j] > npm[j+1])
{
xx=npm[j];
npm[j]=npm[j+1];
npm[j+1]=xx;
}
}
int cari(int r)
{
int a=0;
int z=r;
int m;
int nilai=0;
while(a<=z && nilai==0)
{
m=(a+z)/2;
if(key == npm[m])
nilai=1;
else
if(key < npm[m])
z=m-1;
else
a=m+1;
}
if(nilai==1) return 1;
else
return 0;
}
void main()
{
int n;
int hasil;
printf("Brapa data yang ingin di masukkan=");
scanf("%d",&n);
for(int i=0;i < n;i++)
{
printf("\n\nAngka ke-%d=",i+1);
scanf("%d",&npm[i]);
}
for(int y=0;y < n;y++)
{
printf("%d,",npm[y]);
}
SO(n);
printf("\nMasukkan angka yang di cari=");
scanf("%d",&key);
hasil=cari(n);
if(hasil==1)
{printf("Data di temukan\n\n");}
else if(hasil==0)
{ printf("Data TIDAK di temukan\n\n");}
}
source code searching bnary
#include"stdio.h"
int npm[20];
int xx;
int key;
void SO(int a)
{
for(int i=0;i < a-1;i++)
for(int j=0;j < a-i-1;j++)
if(npm[j] > npm[j+1])
{
xx=npm[j];
npm[j]=npm[j+1];
npm[j+1]=xx;
}
}
int cari(int r)
{
int a=0;
int z=r;
int m;
int nilai=0;
while(a<=z && nilai==0)
{
m=(a+z)/2;
if(key==npm[m])
nilai=1;
else
if(key z=m-1;
else
a=m+1;
}
if(nilai==1) return 1;
else
return 0;
}
void main()
{
int n;
int hasil;
printf("Brapa data yang ingin di masukkan=");
scanf("%d",&n);
for(int i=0;i {
printf("\n\nAngka ke-%d=",i+1);
scanf("%d",&npm[i]);
}
for(int y=0;y {
printf("%d,",npm[y]);
}
SO(n);
printf("\nMasukkan angka yang di cari=");
scanf("%d",&key);
hasil=cari(n);
if(hasil==1)
{printf("Data di temukan\n\n");}
else if(hasil==0)
{ printf("Data TIDAK di temukan\n\n");}
}
int npm[20];
int xx;
int key;
void SO(int a)
{
for(int i=0;i < a-1;i++)
for(int j=0;j < a-i-1;j++)
if(npm[j] > npm[j+1])
{
xx=npm[j];
npm[j]=npm[j+1];
npm[j+1]=xx;
}
}
int cari(int r)
{
int a=0;
int z=r;
int m;
int nilai=0;
while(a<=z && nilai==0)
{
m=(a+z)/2;
if(key==npm[m])
nilai=1;
else
if(key
else
a=m+1;
}
if(nilai==1) return 1;
else
return 0;
}
void main()
{
int n;
int hasil;
printf("Brapa data yang ingin di masukkan=");
scanf("%d",&n);
for(int i=0;i
printf("\n\nAngka ke-%d=",i+1);
scanf("%d",&npm[i]);
}
for(int y=0;y
printf("%d,",npm[y]);
}
SO(n);
printf("\nMasukkan angka yang di cari=");
scanf("%d",&key);
hasil=cari(n);
if(hasil==1)
{printf("Data di temukan\n\n");}
else if(hasil==0)
{ printf("Data TIDAK di temukan\n\n");}
}
source code data karyawan dengan linked list
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"
struct node//struct
{
int nip;
char nama[20];//array
int gaji;
int umur;
struct node *next;//linked list
struct node *prev;
};
typedef struct node *simpul;
struct node simpulx[100];
struct node smpn;
simpul data, head=NULL, tail=NULL, temp;
int pilih;
int plh;
int tmpl;
int doble=0;
int n;
int jmlh=0;
int hpus;
void urut()
{
int i=0;
temp=head;
while(temp!=NULL)
{
simpulx[i].nip=temp->nip;
strcpy(simpulx[i].nama,temp->nama);
simpulx[i].gaji=temp->gaji;
simpulx[i].umur=temp->umur;
i++;
temp=temp->next;
}
for(int r=0;r < jmlh-1;r++)
for(int t=0;t < jmlh-1-r;t++)
{
if(simpulx[t].nip > simpulx[t+1].nip)//sorting untuk menampilkan secara urut
{
smpn=simpulx[t];
simpulx[t]=simpulx[t+1];
simpulx[t+1]=smpn;
}
}
printf("||NIP\t\t||Nama\t\t||Gaji\t\t||umur\t||");
for(int j=0;j<=100;j++)
{
printf("\n||%d\t||%s\t||%d\t||%d\t||",simpulx[j].nip,simpulx[j].nama,simpulx[j].gaji,simpulx[j].umur);
if(simpulx[j+1].nip<1)break;//cek apakah simpul berikutnya kosong, jika kosong looping di hentikan dg keyword 'break'
}
printf("\n\ntekan ENTER");
getch();
}
void nip()
{
printf("Masukkan nip yang di tampilkan=");
scanf("%d",&tmpl);
temp=head;
while(temp!=NULL && temp->nip!=tmpl)//searcing untuk mencari data yang akan di tampilkan
{
temp=temp->next;
}
if(temp!=NULL && temp->nip==tmpl)
{
printf("||NIP\t\t||Nama\t\t||Gaji\t\t||umur\t||");
printf("\n||%d\t||%s\t||%d\t||%d\t||",temp->nip,temp->nama,temp->gaji,temp->umur);
}else
{
printf("data tdk ditemukan");
}printf("\n\ntekan ENTER");getch();
}
void hapus()
{
simpul prev=NULL;
printf("Masukkan nip yang di hapus=");
scanf("%d",&hpus);
temp=head;
while(temp!=NULL && temp->nip!=hpus)//searching untuk mencari data yang di hapus
{
prev=temp;
temp=temp->next;
}
if(temp!=NULL && temp->nip==hpus)
{
if(temp->next != NULL && temp->prev != NULL)
{
prev->next = temp->next;
(temp->next)->prev=prev;
}
else if (temp->next == NULL)
{
prev->next = NULL;
}
else if (temp == head && head->next == NULL)
{
head = NULL;
}
else if (temp == head && head->next != NULL)
{
(head->next)->prev=NULL;
head = head->next;
}
free(temp); jmlh--;
printf("\ndata di hapus");
}else
{
printf("data tdk ditemukan");
}printf("\n\ntekan ENTER");getch();system("cls");
}
void insert()
{
data = (simpul) malloc(sizeof (struct node));
printf("NIP=");
scanf("%d",&n);
temp=head;
while(temp!=NULL)
{
if(temp->nip==n)doble=1;
temp=temp->next;
}
if(doble==0)
{
data->nip=n;
printf("\nNama=");
scanf("%s",&data->nama);
printf("\nGaji=");
scanf("%d",&data->gaji);
printf("\nUmur=");
scanf("%d",&data->umur);
data->next=NULL;
data->prev=NULL;
jmlh++;
if(head==NULL && tail==NULL)
{
head=data;
tail=data;
}else
{
data->prev=tail;
tail->next=data;
tail=data;
}
}else
{
printf("NIP sudah terdaftar");
}printf("\n\ntekan ENTER");
getch();
system("cls");
}
void view()
{
printf("1.tampil seluruh secara urut");
printf("\n2.tampil berdasarkan NIP");
printf("\nMasukkan pilihan=");
scanf("%d",&plh);
switch(plh)
{
case 1: urut();
break;
case 2: nip();
break;
default: printf("\nSALAH!!!");
}system("cls");
}
void main()
{
while(pilih!=4)
{
printf("1.insert data");
printf("\n2.hapus data");
printf("\n3.tampilkan");
printf("\n4.EXIT");
printf("\nMasukkan pilihan=");
scanf("%d",&pilih);
system("cls");
switch(pilih)
{
case 1: insert();
break;
case 2: hapus();
break;
case 3: view();
break;
case 4: printf("\nterima kasih\n\n");
break;
default: printf("\n\n SALAH!!\n");
}
}
}
#include "stdlib.h"
#include "conio.h"
#include "string.h"
struct node//struct
{
int nip;
char nama[20];//array
int gaji;
int umur;
struct node *next;//linked list
struct node *prev;
};
typedef struct node *simpul;
struct node simpulx[100];
struct node smpn;
simpul data, head=NULL, tail=NULL, temp;
int pilih;
int plh;
int tmpl;
int doble=0;
int n;
int jmlh=0;
int hpus;
void urut()
{
int i=0;
temp=head;
while(temp!=NULL)
{
simpulx[i].nip=temp->nip;
strcpy(simpulx[i].nama,temp->nama);
simpulx[i].gaji=temp->gaji;
simpulx[i].umur=temp->umur;
i++;
temp=temp->next;
}
for(int r=0;r < jmlh-1;r++)
for(int t=0;t < jmlh-1-r;t++)
{
if(simpulx[t].nip > simpulx[t+1].nip)//sorting untuk menampilkan secara urut
{
smpn=simpulx[t];
simpulx[t]=simpulx[t+1];
simpulx[t+1]=smpn;
}
}
printf("||NIP\t\t||Nama\t\t||Gaji\t\t||umur\t||");
for(int j=0;j<=100;j++)
{
printf("\n||%d\t||%s\t||%d\t||%d\t||",simpulx[j].nip,simpulx[j].nama,simpulx[j].gaji,simpulx[j].umur);
if(simpulx[j+1].nip<1)break;//cek apakah simpul berikutnya kosong, jika kosong looping di hentikan dg keyword 'break'
}
printf("\n\ntekan ENTER");
getch();
}
void nip()
{
printf("Masukkan nip yang di tampilkan=");
scanf("%d",&tmpl);
temp=head;
while(temp!=NULL && temp->nip!=tmpl)//searcing untuk mencari data yang akan di tampilkan
{
temp=temp->next;
}
if(temp!=NULL && temp->nip==tmpl)
{
printf("||NIP\t\t||Nama\t\t||Gaji\t\t||umur\t||");
printf("\n||%d\t||%s\t||%d\t||%d\t||",temp->nip,temp->nama,temp->gaji,temp->umur);
}else
{
printf("data tdk ditemukan");
}printf("\n\ntekan ENTER");getch();
}
void hapus()
{
simpul prev=NULL;
printf("Masukkan nip yang di hapus=");
scanf("%d",&hpus);
temp=head;
while(temp!=NULL && temp->nip!=hpus)//searching untuk mencari data yang di hapus
{
prev=temp;
temp=temp->next;
}
if(temp!=NULL && temp->nip==hpus)
{
if(temp->next != NULL && temp->prev != NULL)
{
prev->next = temp->next;
(temp->next)->prev=prev;
}
else if (temp->next == NULL)
{
prev->next = NULL;
}
else if (temp == head && head->next == NULL)
{
head = NULL;
}
else if (temp == head && head->next != NULL)
{
(head->next)->prev=NULL;
head = head->next;
}
free(temp); jmlh--;
printf("\ndata di hapus");
}else
{
printf("data tdk ditemukan");
}printf("\n\ntekan ENTER");getch();system("cls");
}
void insert()
{
data = (simpul) malloc(sizeof (struct node));
printf("NIP=");
scanf("%d",&n);
temp=head;
while(temp!=NULL)
{
if(temp->nip==n)doble=1;
temp=temp->next;
}
if(doble==0)
{
data->nip=n;
printf("\nNama=");
scanf("%s",&data->nama);
printf("\nGaji=");
scanf("%d",&data->gaji);
printf("\nUmur=");
scanf("%d",&data->umur);
data->next=NULL;
data->prev=NULL;
jmlh++;
if(head==NULL && tail==NULL)
{
head=data;
tail=data;
}else
{
data->prev=tail;
tail->next=data;
tail=data;
}
}else
{
printf("NIP sudah terdaftar");
}printf("\n\ntekan ENTER");
getch();
system("cls");
}
void view()
{
printf("1.tampil seluruh secara urut");
printf("\n2.tampil berdasarkan NIP");
printf("\nMasukkan pilihan=");
scanf("%d",&plh);
switch(plh)
{
case 1: urut();
break;
case 2: nip();
break;
default: printf("\nSALAH!!!");
}system("cls");
}
void main()
{
while(pilih!=4)
{
printf("1.insert data");
printf("\n2.hapus data");
printf("\n3.tampilkan");
printf("\n4.EXIT");
printf("\nMasukkan pilihan=");
scanf("%d",&pilih);
system("cls");
switch(pilih)
{
case 1: insert();
break;
case 2: hapus();
break;
case 3: view();
break;
case 4: printf("\nterima kasih\n\n");
break;
default: printf("\n\n SALAH!!\n");
}
}
}
Langganan:
Komentar (Atom)