Share to World

Icon

everything for share

Single List Menggunakan C++

Linked List
Linked adalah koleksi obyek heterogen dengan sifat setiap obyek (kecuali obyek
terakhir) mempunyai penerus dan setiap obyek (kecuali obyek pertama) mempunyai
pendahulu. Salah satu penggunaan pointer adalah untuk membuat linked list atau
senarai berantai. Linked list sendiri dapat diartikan sebagai sekumpulan komponen yang
saling berhubungan (berantai) dengan bantuan pointer.

Contoh Penggunaan Link List dengan C++

/*
Program : Link List
Author : Wawan Hendriawan Nur A.Md.
Date : 6 Desember 2007
Description : Program Linier List using pointer, for example used for library program.
*/

#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <iomanip.h>

struct Tbuku{
int kode;
char judul[40];
char pengarang[25];
char file[20];
int jumlah_buku;
Tbuku *next;};

typedef Tbuku * pointer;
typedef pointer list_buku;

//fungsi login
//void login();

//fungsi menu
void menu(int &pil_menu);

//fungsi create list_buku
void createlist_buku(list_buku & first);

//fungsi create_element_list buku
void create_element_buku(pointer & p);

//fungsi insert buku di awal
void insert_first_buku(list_buku & first, pointer pBaru);

//fungsi insert buku di akhir
void insert_last_buku(list_buku & first, pointer pBaru);

//fungsi cari buku
void search_buku(list_buku first, int key, int & status, pointer &pCari);

//fungsi insert buku setelah buku tertentu
void insert_after_buku(list_buku & first, pointer pCari, pointer pBaru);

//fungsi delete buku di awal
void delete_first_buku(list_buku & first, pointer pHapus);

//fungsi delete buku di akhir
void delete_last_buku(list_buku & first, pointer pHapus);

//fungsi hapus buku setelah buku tertentu
void delete_after_buku(list_buku & first, pointer pCari, pointer pHapus);

//fungsi hapus buku tertentu
void delete_buku(list_buku & first, int key, int & status, pointer &pCari, pointer pHapus);

//fungsi menampilkan daftar buku
void daftar_buku(list_buku first);

main()
{ int pil_menu=0;
menu(pil_menu);
getch();
return 0;
}

void menu(int &pil_menu)
{list_buku buku,first;
pointer baru, pCari, hapus;
int kode, ada;
clrscr();
createlist_buku(buku);
while(pil_menu!=9){
clrscr();
gotoxy(26,1); cout<<“ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»”;
gotoxy(26,2); cout<<“º APLIKASI PERPUSTAKAAN º”;
gotoxy(26,3); cout<<“ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹”;
gotoxy(26,4); cout<<“º 1. Tambah Buku di Awal º”;
gotoxy(26,5); cout<<“º 2. Tambah Buku di Akhir º”;
gotoxy(26,6); cout<<“º 3. Tambah Buku setelah º”;
gotoxy(26,7); cout<<“º 4. Hapus Buku di Awal º”;
gotoxy(26,8); cout<<“º 5. Hapus Buku di Akhir º”;
gotoxy(26,9); cout<<“º 6. Hapus Buku setelah º”;
gotoxy(26,10); cout<<“º 7. Hapus Buku Tertentu º”;
gotoxy(26,11); cout<<“º 8. Daftar Buku º”;
gotoxy(26,12); cout<<“º 9. Keluar º”;
gotoxy(26,13); cout<<“ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹”;
gotoxy(26,14); cout<<“º Pilihan: º”;
gotoxy(26,15); cout<<“ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ”;
gotoxy(45,14); cin>>pil_menu;
switch(pil_menu)
{
case 1 : create_element_buku(baru);
insert_first_buku(buku, baru);
break;
case 2 : create_element_buku(baru);
insert_last_buku(buku, baru);
break;
case 3 : clrscr();
gotoxy(28,5); cout << “==============================”;
gotoxy(28,6); cout << “Masukan buku setelah buku lain”;
gotoxy(28,7); cout << “==============================”;
gotoxy(33,9); cout << “Masukan kode buku: “; cin >> kode;
search_buku(buku, kode, ada, pCari);
if (ada == 0){
gotoxy(28,7); cout << “Buku tersebut tidak ada”;
getch();
break;
}
else{
gotoxy(10,7); cout << “Buku tersebut ada, Anda akan menambahkan buku sebelum buku \”” << pCari->judul << “\””;
getch();
create_element_buku(baru);
insert_after_buku(buku, pCari, baru);
getch();
}
break;
case 4 : delete_first_buku(buku, hapus);
getch();
break;
case 5 : delete_last_buku(buku, hapus);
getch();
break;
case 6 : clrscr();
gotoxy(28,5); cout << “==============================”;
gotoxy(28,6); cout << “Hapus buku setelah buku lain”;
gotoxy(28,7); cout << “==============================”;
gotoxy(33,9); cout << “Masukan kode buku: “; cin >> kode;
search_buku(buku, kode, ada, pCari);
if (ada == 0){
gotoxy(28,7); cout << “Buku tersebut tidak ada”;
getch();
break;
}
else{
gotoxy(10,7); cout << “Buku tersebut ada, Anda akan menghapus buku sebelum buku \”” << pCari->judul << “\””;
delete_after_buku(buku, pCari, hapus);
getch();
break;
}
case 7 : clrscr();
gotoxy(28,5); cout << “===================”;
gotoxy(28,6); cout << “Hapus buku tertentu”;
gotoxy(28,7); cout << “===================”;
gotoxy(28,9); cout << “Masukan kode buku: “; cin >> kode;
search_buku(buku, kode, ada, pCari);
if (ada == 0){
gotoxy(28,7); cout << “Buku tersebut tidak ada”;
getch();
break;
}
else{
delete_buku(buku, kode, ada, pCari, hapus);
gotoxy(23,7); cout << “Buku tersebut berhasil dihapus”;
getch();
break;
}
case 8 : daftar_buku(buku);
getch();
break;
case 9 : clrscr();
gotoxy(30,15); cout << “Keluar dari aplikasi”;
}
}
getch();
}

//fungsi create list buku
void createlist_buku(list_buku & first)
{
first = NULL;
}

//fungsi create element list buku
void create_element_buku(pointer & p)
{
p = new Tbuku;
clrscr();
gotoxy(15,2); cout <<” Tambah Daftar Buku Perpustakaan “;
gotoxy(15,4); cout <<“ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»”;
gotoxy(15,5); cout <<“º º”;
gotoxy(15,6); cout <<“º Kode Buku : º”;
gotoxy(15,7); cout <<“º Judul Buku : º”;
gotoxy(15,8); cout <<“º Pengarang : º”;
gotoxy(15,9); cout <<“º Jumlah : buah º”;
gotoxy(15,10); cout <<“º º”;
gotoxy(15,11); cout <<“ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ”;
gotoxy(33,6); cin >> p->kode;
cin.ignore();
gotoxy(33,7); cin.getline(p->judul,40);
gotoxy(33,8); cin.getline(p->pengarang,25);
gotoxy(33,9);; cin >> p->jumlah_buku;
cin.ignore();
p->next = 0;
}

//fungsi insert buku first
void insert_first_buku(list_buku & first, pointer pBaru)
{
if (first ==0)
first = pBaru;
else{
pBaru->next = first;
first = pBaru;
}
}

//fungsi insert buku di akhir
void insert_last_buku(list_buku & first, pointer pBaru)
{ pointer last;
last = first;

if (last == NULL)
last = pBaru;
else if (last->next == NULL)
last->next = pBaru;
else if (first->next != NULL){
do{
last = last->next;
}while (last->next != NULL);
last->next = pBaru;
}
}

//fungsi cari buku
void search_buku(list_buku first, int key, int & status, pointer &pCari)
{
pCari = first;
status = 0;
clrscr();
while (pCari != NULL && status == 0){
if (pCari->kode == key){
status = 1;
}
else
pCari = pCari->next;
}
}

//fungsi insert buku setelah buku tertentu
void insert_after_buku(list_buku & first, pointer pCari, pointer pBaru)
{ clrscr();
if (pCari->next != NULL){
pBaru->next = pCari->next;
pCari->next = pBaru;
}
else{
pCari->next = pBaru;
}
}

//fungsi delete buku first
void delete_first_buku(list_buku & first, pointer pHapus)
{
pointer last;
clrscr();
gotoxy(35,5); cout << “=============”;
gotoxy(35,6); cout << “Hapus di awal”;
gotoxy(35,7); cout << “=============”;
if (first == NULL){
pHapus = NULL;
gotoxy(30,10);cout <<“Maaf, List Masih Kosong”;
}
else if (first != NULL){
pHapus = first;
first = first->next;
pHapus->next = NULL;
}

}

//fungsi delete buku di akhir
void delete_last_buku(list_buku & first, pointer pHapus)
{
pointer last, prev;
clrscr();
gotoxy(35,5); cout << “=============”;
gotoxy(35,6); cout << “Hapus di akhir”;
gotoxy(35,7); cout << “=============”;

if (first == NULL){
pHapus = NULL;
gotoxy(30,10);cout <<“Maaf, List Masih Kosong”;
}
else if (first->next == NULL){
pHapus = first;
first = NULL;
gotoxy(18,10); cout << “Buku berhasil dihapus, sehingga list kosong”;
}
else{
prev = NULL;
last = first;
while (last->next != NULL){
prev = last;
last = last->next;
}
pHapus = last;
prev->next = NULL;
gotoxy(23,10); cout << “Buku yang terkahir berhasil dihapus”;
}

}

//fungsi hapus buku setelah buku tertentu
void delete_after_buku(list_buku & first, pointer pCari, pointer pHapus)
{ clrscr();
if (pCari->next == NULL){
pHapus = NULL;
}
else{
pHapus = pCari->next;
pCari->next = pHapus->next;
pHapus->next = NULL;
gotoxy(5,7); cout << “Anda akan menghapus buku sebelum buku \”” << pCari->judul <<“\””;
getch();
}

}

//fungsi hapus buku tertentu
void delete_buku(list_buku & first, int key, int & status, pointer &pCari, pointer pHapus)
{ pointer last,prev;
pCari = first;
status = 0;
clrscr();

if (first == NULL){
gotoxy(30,10);cout <<“Maaf, List Masih Kosong”;
}
else if (pCari->next == NULL){
if (pCari->kode == key ){
pHapus = pCari;
pCari = NULL;
//gotoxy(23,5); cout <<“Buku ” << pCari->kode <<” berhasil dihapus”;
}
}
else if (pCari->next != NULL){
while (pCari != NULL && status == 0){
if (pCari->kode == key){
pHapus = pCari;
pCari = pCari->next;
pHapus->next = NULL;
status = 1;
//cout <<“Buku ” << pCari->judul <<” berhasil dihapus”;
}
else
pCari = pCari->next;
}
}
first = pCari;
}

//fungsi list buku
void daftar_buku(list_buku first)
{ clrscr();
int i=7,j=0;
if (first == NULL){
gotoxy(30,10);cout <<“Maaf, List Masih Kosong”;
}else{
gotoxy(1,2); cout<<” Daftar Buku Perpustakaan”;
gotoxy(1,4); cout<<“ÚÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿”;
gotoxy(1,5); cout<<“³ No ³ Kode Buku ³ Pengarang Buku ³ Judul Buku ³ Stok Buku ³”;
gotoxy(1,6);cout<<“³ÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍͳ”;
do{
gotoxy(1,i); cout<<“³”;
gotoxy(3,i); cout<<++j; gotoxy(6,i); cout<<“³”;
gotoxy(8,i); cout<< first->kode; gotoxy(18,i); cout<<“³”;
gotoxy(20,i); cout<< first->pengarang; gotoxy(39,i); cout<<“³”;
gotoxy(41,i); cout<< first->judul; gotoxy(68,i); cout<<“³”;
gotoxy(70,i); cout<< first->jumlah_buku;
gotoxy(80,i); cout<<“³”;
i++;
first = first->next;
}while (first !=0);
gotoxy(1,i);cout<<“ÀÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ”;
}
}

Penjelasan Program:
Program ini merupakan program perpustakaan terdiri dari beberapa menu seperti tetrlihat di gambar 1.1

menu program

Gambar 1.1 Menu program

Dalam program tersebut kita bisa tambah buku, diawal akhir, dan sebelum buku tertentu (dengan cara mengecek keberadaan buku tertentu tsb). Hapus data diawal, akhir, sebelum buku tertentu dan penghapusan buku tertentu yang akan kita hapus. Dan kita bisa menampilkan daftar smeua koleksi perpusatakaan.

Referensi:
1. Akmal, Panduan Kuliah Struktur Data dan Algoritma
2. Siswantoro, Hari., Dokumen Bahan Ajar Struktur Data dan Algoritma

Advertisements

Filed under: Pemrograman C++

Stack dan aplikasinya dengan C++

PENGERTIAN STACK
Secara sederhana stack bisa diartikan dengan sebagai tumpukan dari benda atau data yang seolah-olah diletakkan di atas data yang lain dimana data yang pertama kali masuk akan terakhir. Didalam suatu stack kita dapat menambah data (PUSH) dan menghapus data (POP) lewat ujung yang sama.

Secara sederhana sebuah stack bisa digambarkan sebagai tumpukan buku yang disimpan dengan cara ditumpuk keatas. Dimana buku yang pertama kali disimpan atau ditumpuk ada di paling bawah dan yang selanjutnya ditumpuk diatasnya. Dan ketika kita melakukan pengambilan buku ototmatis buku yang terkahir ditumpuk atau disimpan terakhir akan mejadi yang pertama diambil, istilah ini kemudian disebut FILO (First In Last Out) dan bertambah atau berkurangnya data melalui satu ujung yang sama yaitu ujung atas tumpukan (Top of Stack).

Dibawah ini saya berikan beberapa contoh aplikasi stack menggunakan bahasa pemrograman C++ yang saya kutip dari berbagai sumber:

///////////////////////////////////////////////////////////// // //
// Implimentation Of STACK using LINKLIST //
// Created By //
// Kaustubh Bhoyar //// // //////////////////////////////////////

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define NULL 0

main()
{ struct node{
int data,n;
struct node *link;};

int n,item;

typedef struct node node;
node *temp,*sp=NULL;
while(1){
//clrscr(); //This program is designed using VC++ Compiler if you are using the Turbo C compiler then you may use clrscr() here
printf(“Please select your choice\n1. PUSH\n2. POP\n3. Search\n4. Display\n5. Ex!t\n”);
scanf(“%d”,&n);

switch(n) {
case 1:
printf(“Enter the data to PUSH into Stack\n”);
scanf(“%d”,&item);
temp=(node *) malloc(sizeof(node));
temp->data=item;
temp->link=sp;
sp=temp;
break;
case 2:
if(sp==NULL)
{
printf(“\nSTACK underflow\n”);
getch();
}
else
{
item=sp->data;
sp=sp->link;
printf(“\nPOP Successful Removed Data Is %d”,item);
getch();
}
break;
case 3:
if(sp==NULL)
{
printf(“\nSTACK underflow\n”);
}
else
{
temp=sp;
printf(“\nEnter data to search from Stack”);
scanf(“%d”,&item);
n=0;
while(temp->data!=item)
{
if(temp->link==NULL)
goto print;
temp=temp->link;
n++;
}
print:
if(temp->data==item)
{
printf(“Data %d Found In Stack at position %d”,item,n+1);
}
else
{
printf(“Data not present in Stack”);
}
getch();
break;
case 4:
if(sp==NULL)
{
printf(“\nSTACK is empty\n”);
}
else
{
temp=sp;
printf(“\n%d”,temp->data);
while(temp->link!=NULL)
{
temp=temp->link;
printf(“\n%d”,temp->data);
}
}
getch();
break;
case 5:
exit(0);
break;
}
}
}
}

Contoh lain:

//Nama file unit tumpukan.h
# include <iostream.h>
# include <stdlib.h>
# include <conio.h>

# define alamat Elemen*

// inisialisasi data dan fungsi yang dibutuhkan
typedef char tInfo;
typedef struct Elemen{
tInfo Info;
alamat Berikut;} tElemen;

typedef struct tTumpukan{
alamat atas;} Tumpukan;

void inisialisasi(Tumpukan* T);
void Push(Tumpukan* T, tInfo info);
void Pop(Tumpukan* T, tInfo* Info);
int tumpukanKosong (Tumpukan T);

//insisialisasi tumpukan
void inisialisasi(Tumpukan* T)
{
T->atas = NULL;
T->bawah = NULL;
}

//Operasi Push
void Push(Tumpukan* T, tInfo info)
{ alamat P;
P = new Elemen;//(alamat) malloc(sizeof(alamat));
P->Info = info;

if (tumpukanKosong(*T)){
P->Info = info;
P->Berikut=NULL;
T->atas =P;
}
else{
P->Info = info;
P->Berikut = T->atas;
T->atas =P;
}
}

// Operasi Pop
void Pop(Tumpukan* T, tInfo* Info)
{ alamat P;
P = T->atas;
*Info = P->Info;
T->atas = T->atas->Berikut;
free(P);
}

// inisialisasi tumpukan kosong
int tumpukanKosong(Tumpukan Q)
{ return ((Q.atas==NULL)); }

//Nama file unit tumpukan.cpp
# include <iostream.h>
# include <stdlib.h>
# include <conio.h>
# include <tumpukan.h>

# define alamat Elemen*

// untuk menampilkan atau mencetak tumpukan
void tampilTumpukan(Tumpukan T)
{ alamat P = T.atas;
cout << “Isi stack : “;
while ((P!=NULL)) {
cout << P->Info << ” – “;
P = P->Berikut;
}
cout << “\n”;
}

// untuk mencetak menu utama
void cetakMenu(){
cout << “***CONTOH TUMPUKAN***“;
cout << “\n 1. Tambah elemen\n”;
cout << “ 2. Hapus elemen\n”;
cout << “ 3. Cetak tumpukan\n”;
cout << “ 4. Selesai\n\n”;
}

// program utama
int main()
{ Tumpukan T;
int selesai;
int pilMenu;
tInfo elm;
inisialisasi(&T);
selesai = 0;
do{
clrscr;
cetakMenu();
cout << “Menu yg dipilih : “;
cin >> pilMenu;
switch(pilMenu) {
case 1 : cout << “\nMasukkan elemen yg ditambahkan : “;
cin >> elm;
Push(&T,elm);
break;
case 2 : if (tumpukanKosong(T)){
cout << “\nTumpukan kosong kosong, tidak bisa dihapus\n”;
}
else{
Pop(&T, &elm);
cout << “\nElemen yang dihapus : ” << elm << “\n”;
}
break;

case 3 : tampilTumpukan(T);
break;
default : selesai = 1;
}
}
while ( !selesai );

return 1;
}

Referensi:

1. http://planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=5671&lngWId=3
2. http://ienx.wordpress.com/2007/05/09/stack-tumpukan/
3. http://www.hatma.info

Filed under: Pemrograman C++

Kombinasi dan Program Aplikasinya Menggunakan C++

Kombinasi adalah menggabungkan beberapa objek dari suatu grup tanpa memperhatikan urutan. Sebagai contoh suatu himpunan {1,2,3} adalah sama dengan himpunan {2,3,1} dan {3,1,2}.

Contoh: Seorang anak hanya diperbolehkan mengambil dua buah amplop dari tiga buah amplop yang disediakan yaitu amplop A, amplop B dan amplop C. Tentukan ada berapa banyak kombinasi untuk mengambil dua buah amplop dari tiga buah amplop yang disediakan?
Jawaban: Ada 3 kombinasi yaitu:
1. AB atau BA, karena pengambilan amplop A dan B sama dengan pengambilan B dan A.
2. AC atau CA.
3. BC atau CB.

Salah satu aplikasi kombinasi digunakan untuk mencari peluang suatu kejadian atau menghitung kombinasi kejadian tertentu. Kombinasi dari n dan r kita bisa notasikan nCr, dirumuskan dengan:

nCr = n faktorial/(r factorial * (n-r) faktorial)
dimana n faktorial = n! = 1 * 2 * 3 * … * n.

Misalkan dalam suatu pertemuan arisan keluarga terdapat 7 orang yang melakukan jabat tangan. Berapa jumlah jabat tangan yang dilakukan oleh 7 orang tersebut?
Jawaban:
Diketahui n=7; r=2;
Maka 7 C 2 = 7! /(2! * (7-2)!)
= 5040/(2*120)
= 21 kali jabat tangan.

Kejadian tersebut dapat kita hitung dengan mengunkan rumus kombinasi, karena pada jabat tangan tersebut tidak memperhatikan urutan jabat tangan, maksudnya jabat tangan antara Budi dan Iwan adalah sama urutannya dengan jabat tangan antar Iwan dan Budi.
Dengan bahasa pemograman C++, kita dapat membuat sebuah aplikasi yang dapat mengitung nilai Kombinasi dari dua nilai missal n dan r.

Dibawah ini saya lampirkan sebuah program dengan menggunakan bahasa pemrograman C++ untuk menghitung Combinasi, dimana program tersebut terdiri dari beberapa fungsi yaitu:
1. Fungsi untuk menghitung Faktorial, dan
2. Fungsi untuk menghitung Kombinasi.

Contoh program Kombinasi dengan C++
/*
Deskripsi : Program untuk menghitung nilai Kombinasi dari nCr
Pembuat : Wawan Hendriawan Nur
Tanggal : 15 November 2007
*/

#include <iostream.h>

int factorial(int n); //Fungsi untuk menghitung nilai faktorial
int combination(int, int); //fungsi untuk mengitung nilai kombinasi nCr

main()
{ int n,r; //dekalasi variabel
cout <<“Masukan nilai n: “; cin >> n; //input nilai n
cout <<“Masukan nilai r: “; cin >> r; //input nilai r
cout <=1;
}

//Fungsi untuk menghitung nilai Kombinasi nCr
int combination(int n, int r)
{ int f1 = factorial(n); //hitung nilai faktorial n
int f2 = factorial(r); //hitung nilai faktorial r
int f3 = factorial(n-r); //hitung nilai faktorial (n-r)
//mengembalikan nilai Kombinasi, C=(n!/(n!*(n-r)!)))
return (f1/(f2*f3));
}

Filed under: Pemrograman C++

Kalender

November 2017
M T W T F S S
« Dec    
 12345
6789101112
13141516171819
20212223242526
27282930  

Archives