Link list
Linked List adalah salah satu bentuk struktur data, berisi kumpulan data
(node) yang tersusun secara sekuensial, saling sambungmenyambung,
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:
Berikut penjelasan dari catatan harian SData saya
monggo di waos rumiyen
Wahai jiwa yang tenang syukuri apa yang ada karna hidupmu adalah anugrah yang maha kuasa dan tak selamanya kau menikmati maka tetaplah ingat apa tujuan dan kewajibanmu selama kau masih bernafas.
Senin, 26 Oktober 2015
Minggu, 25 Oktober 2015
SDATA Pertemuan ke - 5
Abstract Data Type (ADT) adalah definisi TYPE dan sekumpulan PRIMITIF (operasi dasar) terhadap TYPE tersebut. Definisi TYPE dari sebuah ADT dapat mengandung sebuah definisi ADT lain.Abstract data type (ADT) dapat didefinisikan sebagai berikut:
- Tipe penyimpanan data secara berkelompok yang mampu membungkus berbagai tipe data baik homogen maupun heterogen
- Spesifikasi dari sekumpulan data termasuk operasi yang dapat dilakukan pada data tersebut
- Sekumpulan data dan operasi terhadap data tersebut yang definisi-nya tidak bergantung pada implementasi tertentu.
ADT adalah tipe data yang dibuat oleh programmer sendiri yang memiliki suatu nama tertentu. ADT dapat berupa tipe data dasar namun diberi nama baru atau berupa kumpulan tipe data berbeda yang diberi nama baru. Untuk pembuatan ADT digunakan keyword typedef.
ADT dasar terdiri atas dua tipe:
1. ADT homogen
Mampu menampung tipe data dasar yang homogen dengan pola list berindex
[A] [B] [C] [D]
Indeks 1 2 3 4
Dalam hal ini disebut sebagai Array.
Type
ADT : Array [1..jumlah_index] of type data;
2. ADT heterogen
Mampu menampung tipe data dasar yang heterogen dengan pola record
Dalam hal ini disebut sebagai Record.
SDATA Pertemuan ke - 4
Program C++: Menghitung Nilai Faktorial
Sekarang kita akan membuat program menghitung faktorial. Suatu faktorial di difinisikan seperti berikut:
n!=n x(n-1)x(n-2)x......x 2 x 1
Sebagai contoh:
2!= 2 x 1 =2
3!= 3 x 2 x 1 =6
4!= 4 x 3 x 2 x 1 = 24
Algoritma:
1. Masukkan (n)
2. bil <-- n
2. hasil=1
3.untuk bil>=1, maka bil-1
hasil <-- hasil* bil
4. tampilkan(hasil)
n!=n x(n-1)x(n-2)x......x 2 x 1
Sebagai contoh:
2!= 2 x 1 =2
3!= 3 x 2 x 1 =6
4!= 4 x 3 x 2 x 1 = 24
Algoritma:
1. Masukkan (n)
2. bil <-- n
2. hasil=1
3.untuk bil>=1, maka bil-1
hasil <-- hasil* bil
4. tampilkan(hasil)
Contoh syntax implementasinya dalam C++
#include<iostream>
#include<conio.h
using namespace std;
int main()
{
int bil, n;
long int hasil;
cout<<"n = ";
cin>> n;
hasil=1;
for(bil=n; bil>=1;bil--)
{
hasil=hasil*bil;
}
cout<<"n!= "<<hasil<<"\n";
getch();
}
Kamis, 22 Oktober 2015
Membuat stack tunggal menjadi dua Bagian
#include <string>
#include <iostream>
using namespace std;
class stak{
public:
stak();
void baru();
void bagi1();
void bagi2();
void cetak1();
void cetak_hasil();
private:
int top;
char stackA[9];
char stackC[9];
char stackB[9];
char x;};
stak::stak(){
top=-1;
cout<<"Tugas Kelompok Stack\n\n";}
void stak::baru(){
cout<<"Stack A\n";
for (int i=0; i<6; i++){
cout<<"Masukkan stack ["<<i+1<<"] : ";
cin>>x;
top++;
stackA[top]=x;}}
void stak::bagi2(){
cout<<"\nKarakter yang di pop";
cout<<"\nStack B\n";
int i=0;
for(i=2;i>=0;i--){
x=stackA[i];
stackB[i+1]=x;
cout<<"stack ke ["<<i+1<<"] : "<< x<<endl;}}
void stak::bagi1(){
cout<<"\nKarakter yang di pop";
cout<<"\nStack C\n";
int i=0;
for(i=top;i>=3;i--){
x=stackA[i];
stackC[i-2]=x;
cout<<"stack ke ["<<i-2<<"] : "<< x<<endl;}}
void stak::cetak1(){
int i=0;
for (i= top; i>=0; i--)
cout<<"stack ke ["<<i+1<<"] : "<<stackA[i]<<endl;}
void stak::cetak_hasil(){
cout<<"\nHasil pembagian stack";
cout<<"\n\tStack B\n";
int i=0;
for (i= 3; i>=1; i--){
cout<<"stackB ke ["<<i<<"] : "<<stackB[i]<<endl;}
cout<<"\n\tStack C\n";
int j=0;
for (j= 3; j>=1; j--){
cout<<"stackC ke ["<<j<<"] : "<<stackC[j]<<endl;}}
int main (){
int input;
stak a;
a.baru();
//a.cetak1();
a.bagi1();
a.bagi2();
a.cetak_hasil();
return 0;
}
#include <iostream>
using namespace std;
class stak{
public:
stak();
void baru();
void bagi1();
void bagi2();
void cetak1();
void cetak_hasil();
private:
int top;
char stackA[9];
char stackC[9];
char stackB[9];
char x;};
stak::stak(){
top=-1;
cout<<"Tugas Kelompok Stack\n\n";}
void stak::baru(){
cout<<"Stack A\n";
for (int i=0; i<6; i++){
cout<<"Masukkan stack ["<<i+1<<"] : ";
cin>>x;
top++;
stackA[top]=x;}}
void stak::bagi2(){
cout<<"\nKarakter yang di pop";
cout<<"\nStack B\n";
int i=0;
for(i=2;i>=0;i--){
x=stackA[i];
stackB[i+1]=x;
cout<<"stack ke ["<<i+1<<"] : "<< x<<endl;}}
void stak::bagi1(){
cout<<"\nKarakter yang di pop";
cout<<"\nStack C\n";
int i=0;
for(i=top;i>=3;i--){
x=stackA[i];
stackC[i-2]=x;
cout<<"stack ke ["<<i-2<<"] : "<< x<<endl;}}
void stak::cetak1(){
int i=0;
for (i= top; i>=0; i--)
cout<<"stack ke ["<<i+1<<"] : "<<stackA[i]<<endl;}
void stak::cetak_hasil(){
cout<<"\nHasil pembagian stack";
cout<<"\n\tStack B\n";
int i=0;
for (i= 3; i>=1; i--){
cout<<"stackB ke ["<<i<<"] : "<<stackB[i]<<endl;}
cout<<"\n\tStack C\n";
int j=0;
for (j= 3; j>=1; j--){
cout<<"stackC ke ["<<j<<"] : "<<stackC[j]<<endl;}}
int main (){
int input;
stak a;
a.baru();
//a.cetak1();
a.bagi1();
a.bagi2();
a.cetak_hasil();
return 0;
}
contoh syntax C++ Stack
#include <iostream>
#define maks 5
using namespace std;
class Stack {
friend ostream& operator<<(ostream&, const Stack&);
public :
Stack();
int penuh(int);
int kosong(int);
void cetak();
void push(char);
char pop();
private :
char A[maks];
int banyak;
};
ostream& operator<<(ostream& out, const Stack& s)
{ cout << "\nIsi stack : ";
for (int i=0; i< s.banyak; i++)
out << s.A[i] << " ";
}
Stack::Stack() {
banyak = 0;
for (int i=0; i<maks; i++)
A[i] = '0';
}
int Stack::penuh(int s)
{ return s == maks ? 1 : 0; }
int Stack::kosong(int s)
{ return s == 0 ? 1 : 0; }
void Stack::cetak() {
cout << "\nIsi stack : ";
for (int i=0; i< banyak; i++)
cout << A[i] << " ";
}
void Stack::push(char x) {
cout << "\nElemen masuk : " << x;
if (penuh(banyak)) cout << "Stack penuh";
else if (A[0]=='0') {
A[0] = x;
banyak++;
}
else {
for (int i=banyak; i>=0; i--)
A[i+1] = A[i];
A[0] = x;
banyak++; }
}
char Stack::pop() {
cout << "\nPop stack, elemen yang di-pop : " << A[0];
char temp=A[0];
for (int i=0; i<banyak; i++) A[i] = A[i+1];
A[banyak] = '0';
banyak--;
return temp;
}
int main(int argc, char** argv) {
Stack stack;
for (char c='a'; c<'d'; c++) {
stack.push(c);
stack.cetak();
}
char p = stack.pop();
stack.cetak();
cout << "\n\nCetak pakai ovrloading : " << stack;
}
#define maks 5
using namespace std;
class Stack {
friend ostream& operator<<(ostream&, const Stack&);
public :
Stack();
int penuh(int);
int kosong(int);
void cetak();
void push(char);
char pop();
private :
char A[maks];
int banyak;
};
ostream& operator<<(ostream& out, const Stack& s)
{ cout << "\nIsi stack : ";
for (int i=0; i< s.banyak; i++)
out << s.A[i] << " ";
}
Stack::Stack() {
banyak = 0;
for (int i=0; i<maks; i++)
A[i] = '0';
}
int Stack::penuh(int s)
{ return s == maks ? 1 : 0; }
int Stack::kosong(int s)
{ return s == 0 ? 1 : 0; }
void Stack::cetak() {
cout << "\nIsi stack : ";
for (int i=0; i< banyak; i++)
cout << A[i] << " ";
}
void Stack::push(char x) {
cout << "\nElemen masuk : " << x;
if (penuh(banyak)) cout << "Stack penuh";
else if (A[0]=='0') {
A[0] = x;
banyak++;
}
else {
for (int i=banyak; i>=0; i--)
A[i+1] = A[i];
A[0] = x;
banyak++; }
}
char Stack::pop() {
cout << "\nPop stack, elemen yang di-pop : " << A[0];
char temp=A[0];
for (int i=0; i<banyak; i++) A[i] = A[i+1];
A[banyak] = '0';
banyak--;
return temp;
}
int main(int argc, char** argv) {
Stack stack;
for (char c='a'; c<'d'; c++) {
stack.push(c);
stack.cetak();
}
char p = stack.pop();
stack.cetak();
cout << "\n\nCetak pakai ovrloading : " << stack;
}
Rabu, 21 Oktober 2015
Contoh Syntax aplikasi Link List C++
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iomanip> //setw()
using namespace std;
struct node
{
int data;
node* next; // untuk menghubungkan dengan node lain, tipe data dibuat sama seperi aturan penggunaan pointer.
};
node* head;
node* tail;
node* curr;
node* entry;
node* del;
void inisialisasi()
{
head = NULL;
tail = NULL;
}
void input(int dt)
{
entry = (node* )malloc(sizeof(node)); //alokasi memori
entry->data = dt;
entry->next = NULL;
if(head==NULL)
{
head = entry;
tail = head;
}
else
{
tail->next = entry;
tail = entry;
}
}
void hapus()
{
int simpan;
if(head==NULL)
{
cout<<"\nlinked list kosong, penghapusan tidak bisa dilakukan"<<endl;
}
else
{
simpan = head ->data;
cout<<"\ndata yang dihapus adalah "<<simpan<<endl;
//hapus depan
del = head;
head = head->next;
delete del;
}
}
void cetak()
{
curr = head;
if(head == NULL)
cout<<"\ntidak ada data dalam linked list"<<endl;
else
{
cout<<"\nData yang ada dalam linked list adalah"<<endl;
cout<<setw(6);
while(curr!=NULL)
{
cout<<curr->data<<"->";
curr = curr->next;
}
cout<<endl;
}
}
void menu()
{
char pilih, ulang;
int data;
do
{
system("cls");
cout<<"SINGLE LINKED LIST NON CIRCULAR"<<endl;
cout<<"-------------------------------"<<endl;
cout<<"Menu : "<<endl;
cout<<"1. Input data"<<endl;
cout<<"2. Hapus data"<<endl;
cout<<"3. Cetak Data"<<endl;
cout<<"4. Exit"<<endl;
cout<<"Masukkan pilihan Anda : ";
cin>>pilih;
switch(pilih)
{
case '1' :
cout<<"\nMasukkan data : ";
cin>>data;
input(data);
break;
case '2' :
hapus();
break;
case '3' :
cetak();
break;
case '4' :
exit(0);
break;
default :
cout<<"\nPilih ulang"<<endl;
}
cout<<"\nKembali ke menu?(y/n)";
cin>>ulang;
}while(ulang=='y' || ulang=='Y');
}
int main()
{
inisialisasi();
menu();
return EXIT_SUCCESS;
}
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iomanip> //setw()
using namespace std;
struct node
{
int data;
node* next; // untuk menghubungkan dengan node lain, tipe data dibuat sama seperi aturan penggunaan pointer.
};
node* head;
node* tail;
node* curr;
node* entry;
node* del;
void inisialisasi()
{
head = NULL;
tail = NULL;
}
void input(int dt)
{
entry = (node* )malloc(sizeof(node)); //alokasi memori
entry->data = dt;
entry->next = NULL;
if(head==NULL)
{
head = entry;
tail = head;
}
else
{
tail->next = entry;
tail = entry;
}
}
void hapus()
{
int simpan;
if(head==NULL)
{
cout<<"\nlinked list kosong, penghapusan tidak bisa dilakukan"<<endl;
}
else
{
simpan = head ->data;
cout<<"\ndata yang dihapus adalah "<<simpan<<endl;
//hapus depan
del = head;
head = head->next;
delete del;
}
}
void cetak()
{
curr = head;
if(head == NULL)
cout<<"\ntidak ada data dalam linked list"<<endl;
else
{
cout<<"\nData yang ada dalam linked list adalah"<<endl;
cout<<setw(6);
while(curr!=NULL)
{
cout<<curr->data<<"->";
curr = curr->next;
}
cout<<endl;
}
}
void menu()
{
char pilih, ulang;
int data;
do
{
system("cls");
cout<<"SINGLE LINKED LIST NON CIRCULAR"<<endl;
cout<<"-------------------------------"<<endl;
cout<<"Menu : "<<endl;
cout<<"1. Input data"<<endl;
cout<<"2. Hapus data"<<endl;
cout<<"3. Cetak Data"<<endl;
cout<<"4. Exit"<<endl;
cout<<"Masukkan pilihan Anda : ";
cin>>pilih;
switch(pilih)
{
case '1' :
cout<<"\nMasukkan data : ";
cin>>data;
input(data);
break;
case '2' :
hapus();
break;
case '3' :
cetak();
break;
case '4' :
exit(0);
break;
default :
cout<<"\nPilih ulang"<<endl;
}
cout<<"\nKembali ke menu?(y/n)";
cin>>ulang;
}while(ulang=='y' || ulang=='Y');
}
int main()
{
inisialisasi();
menu();
return EXIT_SUCCESS;
}
Rabu, 07 Oktober 2015
SDATA Pertemuan - 3
pada pertemuan ke 3 kali ini membahas tentang array dan rekursi untuk mengenal dan mempelajari lebih dalam mari lihat catatan dibawah ini.
SDATA Pertemuan - 2
pada pertemuan minggu ke 2 kali ini yaitu membahas tentang struct. Struktur adalah pengelompokan variabel-variabel yang bernaung dalam satu nama yang sama. Berbeda dengan array yang berisi kumpulan variabel-variabel yang bertipe sama dalam satu nama, maka suatu struktur dapat terdiri atas variabel-variabel yang berbeda tipenya dalam satu nama struktur. Struktur biasa dipakai untuk mengelompokkan beberapa informasi yang berkaitan menjadi sebuah kesatuan .
Selasa, 06 Oktober 2015
SDATA Pertemuan - 1
pada pertemuan pertama kali ini yaitu membahas perulangan.perulangan sendiri terdiri dari 3 cara diantaranya For , While , Do While.didalam perulangan sendiri ada syarat-syarat tertentu diantaranya ; harus adanya nilai awal , ketentuan kapan akan berakhirnya , perubahan .
pertemuan kali ini akan membahas perbedaan-perbedaan yang dimiliki dari setiap macam program mari seksama kita amati perubahan yang terjadi dibawah ini
gambar diatas menyatakan perubahan di dalam perulangan itu sangat nampak namun harus teliti untuk mengubahnya karena tidak semua struktur pengcodingannya sama.
selanjutnya membahas soal procedure di bawah adalah catatan singkat mengenai procedure ;
sekian mungkin untuk minggu ini jika ada kurangnya mohon kritikan dari pembaca karena kritikan dari anda semua adalah pelajaran terbaik bagi kami.
Rabu, 03 Juni 2015
Refleksi minggu ke-12
Recording (Rekaman)
Disusun oleh satu atau lebih field. Tiap
field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang
sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram.
Rekaman disebut juga tipe terstruktur.
contoh :
Rekaman mewakili table
Kadang kita mempunyai tabel, sebagai contoh tabel presensi
mahasiswa.
No.
|
NIM
|
Nama
|
Hadir1
|
Hadir2
|
…
|
Hadir10
|
1
|
08018011
|
Marta Evendi
|
||||
2
|
08018012
|
Abu rizal
|
||||
3
|
08018013
|
Butet
|
Tabel di atas dapat direpresentasikan menjadi
Type presensi : record <
- No
: integer
- NIM
: string
- Nama
: string
- Tgl_kuliah
: array [1..10] of tanggal
Namun,
larik data akan digunakan untuk setiap entry tersebut, sehingga akan terdapat
gabungan 2 tipe terstruktur yaitu :
Larik_presensi : array [1..100] of presensi
Bila
terdapat 100 mahasiswayang mengikuti kuliah
Refleksi minggu ke-11
Array
Dua Dimensi
Misalkan
matriks A berordo 2 x 3
A= 1
2 3
-4 0 -1
Menggunakan
array, setiap elemen matriks A dapat dipetakan menjadi :
kolom
j=0
|
kolom
j=1
|
kolom
j=2
|
|
baris i=0
|
A[0][0] = 1
|
A[0][1] = -2
|
A[0][2] = 3
|
baris i=1
|
A[1][0]= -4
|
A[1][1] = 0
|
A[1][2] = -1
|
C style
#define
baris 2
#define
kolom 2
int
matriks[baris][kolom];
C++ style
class
Matriks {
private :
int baris,
kolom;
int
A[baris][kolom];
void
baca_matriks
(int
matriks[10][10], int baris, int kolom)
{
int i,j;
for (i=0; i<baris; i++)
for (j=0; j<kolom; j++)
cin >> matriks[i][j];
}
Cara mengisi data dilakukan per
baris (dengan kolom berjalan/dihabiskan lebih dulu)
Refleksi minggu ke-9 dan ke-10
Assalamu'alaikum salam sejahtera wahai saudara minggu kali ini adalah minggu ke 9 yang mana pada minggu kali ini sorting,.Sorting sendiri adalah mencari data yang di cari dalam sebuah memory. ada beberapa
metode searching antaranya :
A.Linear Search
Bahasa C++
#include <iostream.h>
#define UKURAN 100
int pencarian Linier (int array [ ] , int [ ] , int ukuran)
{ int i;
for(i=0 ; i<=ukuran-1; i++)
if(array [i] ==kunci)
return i;
return-1;
}
B.Binary Search
=> Asumsi : data sudah dalam keadaan terurut (naik) Contoh : Buku telepon, presensi kuliah, dll.
=> Kunci akan selalu dibandingkan dengan data yang berada di tengah (middle).
=> Bila sama berarti data ketemu, bila tidak, akan “dilihat” apakah data ada di sebelah “kiri” (artinya data lebih kecil dari data di tengah) atau di sebelah “kanan” (artinya data lebih besar dari data di tengah).
=> Bila data ada di sebelah kiri, dilakukan pencarian dengan cara yang sama (sementara data yang berada di sebelah kanan akan diabaikan).
=> Jadi, setiap kali pencarian, data selalu “dibelah” menjadi dua bagian (biner), sampai pada “titik tertentu” (bila sama dengan titik tengah, pencarian tidak dilakukan lagi, bila tidak, sampai pada perbandingan terakhir data juga tidak sama, berarti data tidak ditemukan pada array aray).
=> Asumsi : data sudah dalam keadaan terurut (naik) Contoh : Buku telepon, presensi kuliah, dll.
=> Kunci akan selalu dibandingkan dengan data yang berada di tengah (middle).
=> Bila sama berarti data ketemu, bila tidak, akan “dilihat” apakah data ada di sebelah “kiri” (artinya data lebih kecil dari data di tengah) atau di sebelah “kanan” (artinya data lebih besar dari data di tengah).
=> Bila data ada di sebelah kiri, dilakukan pencarian dengan cara yang sama (sementara data yang berada di sebelah kanan akan diabaikan).
=> Jadi, setiap kali pencarian, data selalu “dibelah” menjadi dua bagian (biner), sampai pada “titik tertentu” (bila sama dengan titik tengah, pencarian tidak dilakukan lagi, bila tidak, sampai pada perbandingan terakhir data juga tidak sama, berarti data tidak ditemukan pada array aray).
Bahasa
C++
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int pencarianBiner(int b[], int
kunciPencarian, int low, int high)
{ int i, middle;
while
(low <= high) {
middle = (low+high) / 2;
if (kunciPencarian == b[middle])
return middle;
else if (kunciPencarian < b[middle])
high = middle - 1;
else low = middle + 1;
}
return
-1;
}
Sorting (Pengurutan)
1.
Usaha : mengurutkan
dari data tak terurut menjadi data terurut à perlu waktu
2. Masalah : efisiensi (peningkatan kecepatan
pencarian)
3. Metode : bubble (gelembung), insertion
(penyisipan), selection (pemilihan), merge (penggabungan), quick, shell, radix,
dll.
Untuk simulasi
macam-macam sorting bisa liat disini.
Berikut beberapa
metode sorting:
A. Bubble Sort
Ilustrasi
B. Insertion Sort
Ilustrasi
C. Selection Sort
Ide :
Ilustrasi
|
Langganan:
Postingan (Atom)