Anda di halaman 1dari 27

SINGLE LINKED LIST

DOUBLE LINKED LIST

Latihan 1 :
//double linked list non circular
//vs 2012 express [RS]
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <iomanip>
using namespace std;

typedef struct node


{
long data;
node* next; //tipe data bertipe sama untuk menunjuk ke node lain
node* prev;
};

//buat variabel node


node* head;
node* tail;
node* print;
node* del;
node* entry;

void inisialisasi()
{
head = NULL;
tail = NULL;
}

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

void input(int *dta)


{
entry = new node;
entry->data = *dta;
entry->next = NULL;
entry->prev = NULL;
if(isEmpty()==1)
{
head = entry;
head->next = NULL;
head->prev = NULL;
tail=head;
}
else
{
tail->next = entry;
entry->prev = tail;
tail = entry;
}
}

//penghapusan data di belakang melalui head


void hapus()
{
int simpan;
if(head!=NULL) //jika hanya kondisi ini saja maka akan terjadi error karena disana ada syntax head-
>prev = NULL
{
if(head->next != NULL)
{
del=head;
simpan = head->data;
cout<<"\n"<<simpan<<" telah dihapus"<<endl;
head = head->next;
head->prev = NULL;
delete del;
}
else
{
simpan = head->data;
cout<<"\n"<<simpan<<" telah dihapus"<<endl;
head = NULL;
}

}
else
cout<<"\nLinked List kosong penghapusan tidak dapat dilakukan"<<endl;
}

void cetak()
{
print = head;
if(head!=NULL)
{
while(print!=NULL)
{
cout<<"\n\t"<<print->data;
print = print->next;
}
}
else
cout<<"\nTidak ada data dalam linked list"<<endl;

}
void menu()
{
char pilih, ulang;
int data;
do
{
system("CLS");
menu :
cout<<"DOUBLE LINKED LIST NON CIRCULAR"<<endl;
cout<<"-------------------------------"<<endl;
cout<<"Menu: ";
cout<<"\n1. Entry Data";
cout<<"\n2. Hapus Data";
cout<<"\n3. Cetak Data";
cout<<"\n4. Keluar";
cout<<"\nMasukkan pilihan Anda : ";
cin>>pilih;

switch(pilih)
{
case '1' :
cout<<"\nMasukkan Data : ";
cin>>data;

input(&data);
cout<<"\n"<<data<<" telah ditambahkan"<<endl;
break;
case '2' :
hapus();
break;
case '3' :
cetak();
break;
case '4' :
cout<<"\nTerima kasih telah menggunakan program ini"<<endl;
exit(0);
break;
default :
cout<<"\nPilih ulang"<<endl;
goto menu;
}
cout<<"\nKembali ke menu? (y/n)";
cin>>ulang;
}while(ulang=='y' || ulang =='Y');
}

int main()
{
inisialisasi();
menu();
return 0;
}

Latihan 2 :

Contoh Program
Berikut contoh implementasi double link list untuk menambahkan data didepan ,
belanga dan membaca data maju.
Source code

#pragma hdrstop
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#pragma argsused

using namespace std;

typedef char data;


typedef struct strSimpul
{
data masukkan;
struct strSimpul *kanan;
struct strSimpul *kiri;
}Simpul;

typedef struct strSeneraiGanda


{
Simpul *awal;
Simpul *akhir;
}SeneraiGanda;

void buat (SeneraiGanda *q)


{
q->awal=NULL;
q->akhir=NULL;
}

void Tambah_Depan(SeneraiGanda *q, data elemen)


{
Simpul *baru=new Simpul();
baru->masukkan=elemen;
if (q->awal==NULL && q->akhir==NULL)
{
q->awal=baru;
q->akhir=baru;
baru->kanan=NULL;
baru->kiri=NULL;
}
else
{
q->awal->kiri=baru;
baru->kanan=q->awal;
q->awal=baru;
q->awal->kiri=NULL;
}
}

void Baca_Maju(SeneraiGanda *q)


{
Simpul *bantu=new Simpul();
bantu=q->awal;
while (bantu!=NULL)
{
cout<<bantu->masukkan<<" ";
bantu=bantu->kanan;
}
cout<<endl;
}

main()
{
SeneraiGanda *SnrGd=new SeneraiGanda();
buat (SnrGd);
data hasil;
char pilih='1';
while (pilih=='1' || pilih=='2' || pilih=='3')
{
cout<<"Pilih menu"<<endl;
cout<<"1. Tambah Depan"<<endl;
cout<<"2. Tambah Belakang"<<endl;
cout<<"3. Baca Maju"<<endl;
cout<<"4. Selesai"<<endl;
cout<<"Pilihan = ";cin>>pilih;
switch(pilih)
{
case '1':
{
cout<<"Masukkan datanya : ";
cin>>hasil;
Tambah_Depan(SnrGd, hasil);
system("cls");
} break;
case '2':
{
system("cls");
Baca_Maju(SnrGd);
} break;
default :
{
cout<<"Selesai. Tekan enter";
} break;

}
}
getch();
delete (SnrGd);
}

Tugas : Buatlah latihan untuk tambah di belakang

Latihan 3 :
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;

int pil; void pilih();


void buat_baru();
void tambah_belakang();
void tambah_depan();
void hapus_belakang();
void hapus_depan();
void tampil();

struct node
{
char nama [20];
int umur;
float tinggi;
node *prev, *next;
};

node *baru, *head=NULL, *tail=NULL,*hapus,*bantu;

int main()
{
do
{
cout<<"MENU DOUBLE LINKEDLIST"<<endl;
cout<<"1. Tambah Depan"<<endl;
cout<<"2. Tambah Belakang"<<endl;
cout<<"3. Hapus Depan"<<endl;
cout<<"4. Hapus Belakang"<<endl;
cout<<"5. Tampilkan"<<endl;
cout<<"6. Selesai"<<endl;
cout<<"Pilihan Anda : ";
cin>>pil;
pilih();
}
while(pil!=6);
}

void pilih()
{
if(pil==1)
tambah_depan();
else if(pil==2)
tambah_belakang();
else if(pil==3)
hapus_depan();
else if(pil==4)
hapus_belakang();
else if(pil==5)
tampil();
else
cout<<"selesai";
}

void buat_baru()
{
baru = new(node);
cout<<"input nama : ";cin>>baru->nama;
cout<<"input umur : ";cin>>baru->umur;
cout<<"input tinggi : ";cin>>baru->tinggi;
baru->prev=NULL;
baru->next=NULL;
}

void tambah_belakang()
{
buat_baru();
if(head==NULL)
{
head=baru;
tail=baru;
}
else
{
tail->next=baru;
baru->prev=tail;
tail=baru;
}
cout<<endl<<endl;
tampil();
}

void tambah_depan()
{
buat_baru();
if(head==NULL)
{
head=baru;
tail=baru;
}
else
{
baru->next=head;
head->prev=baru;
head=baru;
}
cout<<endl<<endl;
tampil();
}

void hapus_depan()
{
if (head==NULL)
cout<<"Kosong";
else if (head->next==NULL)
{
hapus=head;
head=NULL;
tail=NULL;
delete hapus;
}
else
{
hapus=head;
head=hapus->next;
head->prev=NULL;
delete hapus;
}
cout<<endl<<endl;
tampil();
}

void hapus_belakang()
{
if (head==NULL)
cout<<"Kosong";
else if (head->next==NULL)
{
hapus=head;
head=NULL;
tail=NULL;
delete hapus;
}
else
{
hapus=tail;
tail=hapus->prev;
tail->next=NULL;
delete hapus;
}
cout<<endl<<endl;
tampil();
}

void tampil()
{
if (head==NULL)
cout<<"Kosong";
else
{
bantu=head;
while(bantu!=NULL)
{
cout<<" nama : "<<bantu->nama;
cout<<" umur : "<<bantu->umur;
cout<<" tinggi : "<<bantu->tinggi<<endl;
bantu=bantu->next;
}
}
getch(); }

BUBBLE SORT

Latihan 1 :
#include <stdio.h>
//inisialisasi array angka sebanyak 15 data
int angka[]={7,7,4,6,8,2,5,9,4,5,3,1,1,7,8};
//fungsi bubble sort ascending
void bubbleSortAsc(){
//mengulang sebanyak 14 kali sebanyak n-1 data
for(int i=0; i<15-1; i++){
for(int j=0; j<15-1; j++){
//jika angka index x+1 lebih kecil dari angka index x
if(angka[j+1]<angka[j]){
//tampung angka index x ke temp
int temp=angka[j];
//ubah angka index x menjadi angka index x+1
angka[j]=angka[j+1];
//ubah angka index x+1 menjadi angka temp
angka[j+1]=temp;
}
}
}
}

void bubbleSortDesc(){
//mengulang sebanyak 14 kali sebanyak n-1 data
for(int i=0; i<15-1; i++){
for(int j=0; j<15-1; j++){
//jika angka index x+1 lebih besar dari angka index x
if(angka[j+1]>angka[j]){
//tampung angka index x ke temp
int temp=angka[j];
//ubah angka index x menjadi angka index x+1
angka[j]=angka[j+1];
//ubah angka index x+1 menjadi angka temp
angka[j+1]=temp;
}
}
}
}

int main(){
printf("Sebelum Sorting : \n");
for(int i=0; i<15; i++){
printf("%d ", angka[i]);
}
bubbleSortAsc();
printf("\n\nSetelah Sorting Ascending : \n");
for(int i=0; i<15; i++){
printf("%d ", angka[i]);
}
bubbleSortDesc();
printf("\n\nSetelah Sorting Descending : \n");
for(int i=0; i<15; i++){
printf("%d ", angka[i]);
}
getchar();
return 0;
}

LATIHAN 2 : PROGRAM ALGORITMA BUBBLE SORT BAHASA C SOURCE


CODE :
#include <stdio.h>
void bubbleSort(int arr[], int n){
int i, j, tmp;
for(i = 0; i < n; i++){
for(j=0; j < n-i-1; j ++){
if(arr[j] > arr[j+1]){
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
int main() {
int array[100], n, i, j;
printf("Masukkan banyak elemen: ");
scanf("%d", &n);
printf("Masukkan nilai: \n");
for(i = 0; i < n; i++){
scanf("%d", &array[i]);
}
bubbleSort(array, n);
printf("Hasil pengurutan sebagai berikut:\n");
for(i = 0; i < n; i++){
printf("%d ", array[i]);
}
printf("\n");
}
 

Simpan source code dengan nama file bubblesort.c, tetapi sesuaikan aja dengan nama file yang
dinginkan dan jangan lupa harus berektensi .c
PENJELASAN :
Penjelasan source algoritma bubble sort di bahasa C setiap barisnya :
 baris 3 : mendeklarasikan fungsi void bubbleSort dengan menerima inputan arr dan n
yang bertipe integer.
 baris 4 : mendeklarasikan variable i dan j untuk perulangan dan tmp untuk variable
penukaran sementara.
 baris 5-6 : melakukakan perulangan sebanyak n dan perulangan sebanyak nilai variable n
dikurang i dan dikurang satu.
 baris 7-11 : cek kondisi jika nilai variable arr pada index ke j lebih besar dari nilai varible
arr pada index ke j+1 maka melakukan penukaran nilai variable
 baris 17 : mendeklarasi variable array, n, i dan j bertipe integer.
 baris 18-19 : melakukan input nilai dari user untuk variable n yang digunakan sebagai
jumlah data.
 baris 21-25 : melakukan input nilai dari user untuk variable array dari setiap data.
 baris 27 : memanggil fungsi bubbleSort dengan memasukkan variable array dan n.
 baris 29-33 : menampilkan hasil pengurutan bubbleSort.

Latihan 3 :
Berikut adalah notasi algortima bubble sort.

///prosedur bubble sort


procedure bubble(data[] <--array of int, jml <-- int)
{
judul : prosedur bubble sort ascending
kamus :
i,j,temp=0 <-- int
deskripsi :
i=0;
while(i<jml-1)do
{
j=0;
while(j<jml-i-1)do
{
///terjadinya proses swap
if(data[j+1]<data[j])then
{
temp=data[j+1];
data[j+1]=data[j];
data[j]=temp;
}
j=j+1;
}
i=i+1;
}
}
///prossedur untuk menginput data
procedure input(data[] <-- array of int, jml <-- int)
{
judul : prosedur untuk menginputkan data
kamus :
i <-- int
deskripsi :
i=0;
while(i<jml)do
{
input <-- data[i]
i=i+1;
}
}
///prosedur untuk outputkan data
procedure output(data[] <-- array of int, jml <-- int)
{
judul : prosedur untuk mengoutputkan data
kamus :
i <-- int
deskripsi :
i=0;
while(i<jml)do
{
output "data[i]"
i=i+1
}
}
///fungsi main
judul : mengurutkan data menggunakan bubble sort secara ascending
kamus :
procedure bubble(data[] <--array of int, jml <-- int)
procedure input(data[] <-- array of int, jml <-- int)
procedure output(data[] <-- array of int, jml <-- int)
data[50] <-- array of int
jumlah <-- int
deskripsi :
input <-- jumlah
input <-- input(data,jumlah)//pemanggilan prosedur input
//data sebelum diurutkan
output(data,jumlah)//pemanggilan prosedur output tanpa memanggil prosedur bubble
//data sesudah diurutkan
bubble(data,jumlah)//pemanggilan prosedur bubble
output(data,jumlah)//pemanggilan prosedur output

Jika di konversikan ke dalam bahasa C maka akan seperti di bawah ini.

#include <stdio.h>
#include <stdlib.h>
//deklarasi fungsi
void input(int data[], int jumlah);
void output(int data[], int jumlah);
void bubble(int data[], int jumlah);

int main()
{
printf("Sorting Ascending\n");
int data[50];
int jml;

printf("Input jumlah batas data: ");


scanf("%d",&jml);
input(data,jml); //pemaggilan prosedur input
printf("\nsebelum:\n");
output(data,jml); //pemanggilan prosedur output
printf("\nsesudah:\n");
bubble(data,jml); //pemanggilan prosedur bubble untuk mensorting
output(data,jml); //pemanggilan prosedur output setelah di sorting

puts("");
return 0;
}
//prosedur input
void input(int data[], int jumlah)
{
int i;
i=0;
while(i<jumlah){
printf("data [%d]= ",i+1);
scanf("%d",&data[i]);
i=i+1;
}
}
//prosedur output
void output(int data[], int jumlah)
{
int i=0;
while(i<jumlah){
printf("%d ", data[i]);
i=i+1;
}
}
//prosedur bubble
void bubble(int data[], int jumlah)
{
int i,j,temp=0;
i=0;
while(i<jumlah-1){
j=0;
while(j<jumlah-i-1){
if(data[j+1]<data[j]){
temp=data[j+1];
data[j+1]=data[j];
data[j]=temp;
}
j=j+1;
}
i=i+1;
}
}

Soal :
Buatlah program yang menghasilkan seperti gambit ini :

Ket : tahapan ini hanya gambaran secara logika, yang harus tampil di layar adalah data
sebelum terurut dan yang sesudah

Anda mungkin juga menyukai