2. Nrp: 6311259
3. Alamat: Kp.cikurutug Rt02/11 Desa Campakamekar padalarang
Kbb. Bandung Barat
4. Kelas saat ini: 1 Ti-7
5. Nama Matakuliah: Teori Strucktur Data
6. Nama Dosen : Dadan Nurdin Bagenda
7. Nama Kampus : Politekni KomputerNiaga & Stimik Lpkia -Bandung
1 A .Struktu Data
Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer agar
bisa dipakai secara efisien .
Sedangkan data adalah representasi dari fakta dunianyata.
Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam
bentuk tulisan, suara, gambar, sinyal atau simbol.
Secara garis besar type data dapat dikategorikan
menjadi :
1. Type data sederhana
a. Type data sederhana tunggal, misalnya
Integer, real, boolean dan karakter
b. Type data sederhana majemuk, misalnya String
2. Struktur Data, meliputi
a. Struktur data sederhana, misalnya array dan record
b. Struktur data majemuk, yang terdiri dariLinier : Stack, Queue, serta List dan Multilist
Non Linier : Pohon Biner dan Graph
Pemakaian struktur data yang tepat di dalam
proses pemrograman akan menghasilkan
algoritma yang lebih jelas dan tepat,
sehingga menjadikan program secara
keseluruhan lebih efisien dan sederhana.
Struktur data yang ″standar″ yang biasanya
digunakan dibidang informatika adalah :
- List linier (Linked List) dan variasinya
- Multilist
- Stack (Tumpukan)
- Queue (Antrian)
- Tree ( Pohon )
- Graph ( Graf )
2. Gambar pemetaan
3. ARRAY
A. Pengertian Array
Array adalah suatu variabel yang terdiri dari sekumpulan data dimana data-data tersebut mempunyai tipe data yang sama.
Setiap data disimpan dalam alamat memori yang berbeda-beda dan disebut dengan elemen array.
Setiap elemen mempunyai nilai indek sesuai dengan urutannya. Melalui indek inilah kita dapat mengakses data-data tersebut.
Indek dari elemen array ini, baik dalam bahasa C++ maupun Java dimulai dari 0, bukan 1 seperti dalam bahasa Pascal.
Array dideklarasikan dengan tanda [ ] (bracket), baik dalam bahasa C++ dan Java.
Bentuk umum dari tipe data array adalah :
tipe_data nama_array[jumlah_elemen] Jika ingin mendeklarasikan sebuah array dengan tipe data integer dengan nama a dan jumlah elemen array-nya 10 maka.
kodenya adalah : int a[10];
Dalam bahasa Java pendeklarasian array lebih variarif. Selain dengan kode seperti di atas, Java juga dapat mendeklarasikan
array dalam bentuk : int[ ] a;
Kemudian setelah mendeklarasikan array, baik dengan kode yang pertama maupun yang kedua, Java harus menciptakan (membuat) objek terlebih dahulu sebelum array dapat digunakan karena dalam Java
array merupakan sebuah Class.
Cara menciptakan objek array dalam Java adalah :
a = new int[10];
Dalam Java pendeklarasian array dan pembuatan objek array dapat dilakukan alam satu sintak, yaitu :
int[ ] a = new int[10]; atau int a[ ] = new int[10];
Baik C++ maupun Java, untuk mengakses elemen array, misalnya elemen ke-10 dari array dan kemudian menampung nilainya dalam sebuah variabel x, maka sintaknya adalah :
x=a[9];
Untuk memasukkan data ke dalam array, sintak yang digunakan adalah :
a[nomor_elemen] = data;
a[0] = 5;
a[1] = 6;
a[2] = 7;
dan seterusnya.
Agar lebih efisien dan efektif, maka pemasukan data dalam array dapat menggunakan perulangan seperti berikut ini :
for (i=0; i<jumlah_data; i++) {
cout << “a[“ << i << “] = “;
cin >> a[i];
}
Untuk Java sintak-nya adalah :
for (i=0; i<jumlah_data; i++) {
System.out.print(“a[“ + i + “] = “);
Scanner input = new
Scanner(System.in);
int data=input.nextInt();
a[i] = data;
}
Berikut contoh program program lengkap dalam bahasa C++ dan Pemogramannya adalah :
/* Array Satu Dimensi */
#include <stdio.h>
#include <constream.h>
#include <dos.h>
struct Penumpang {
char nm[25];
}data[3];
void main ()
{
textcolor (LIGHTGREEN);
clrscr();
int a,x,b;
//char nm[25];
int kode[3];
long harga[3];
do{
cout<<"\n__________ \n ";
cout<<" MENU UTAMA \n ";
cout<<"\n__________ \n ";
cout<<endl;
cout<<"1. Isi Data \n ";
cout<<" \n ";
cout<<endl;
cout<<"2. Cetak Data \n ";
cout<<" \n ";
cout<<endl;
cout<<"3. Keluar \n ";
cout<<" \n ";
cout<<endl;
cout<<"PILIH [1/2/3] : ";cin>>a;
clrscr();
switch(a)
{
case 1:{
clrscr();
cout<<"Data yang akan dimasukkan : ";cin>>b;
for (x=0; x<b; x++)
{
cout<<"Data Ke-"<<x+1<<endl;
cout<<endl;
cout<<"Masukkan Kode : ";cin>>kode[x];
cout<<endl;
cout<<"Masukkan Nama Penumpang : ";cin>>data[x].nm;
cout<<endl;
cout<<"Masukkan Harga Tiket : ";cin>>harga[x];
cout<<endl;
// cout<<"Do You Want to Continue, then Press Enter";
// getch();
// clrscr();
}
break;
}
case 2:{
cout<<"__________________________________________________________ \n ";
cout<<"No \t"<<"Kode Tiket \t"<<"Nama Penumpang \t"<<"Harga Tiket\n ";
cout<<"__________________________________________________________ \n ";
cout<<endl;
for (x=0; x<b; x++)
{
cout<<" "<<x+1<<"\t\t"<<kode[x]<<"\t\t"<<data[x].nm<<"\t\t\t"<<harga[x]<<endl<<"\n";
}
break;
}
}
}while(a!=3);
getch();
}
Gambar display array 1 dimensi di jalankan
Sesudah muncul layar di atas lalu pilih No.1 untuk isi data
Sesudah di inputkan 3 data seperti di atas maka tekan enter untuk memulai selanjutnya ?
Sesudah tekan enter maka akan muncul untuk menginput selanjutnya pilih No.2 untuk cetak data yang sudah di inputkan tadi maka akan muncul seperti dibawah ini.
Jika sudah dicetak maka pilih No.3 untuk keluar.
Dan Ini contoh Array 2 dimensi :
Gambar display array 1 dimensi di jalankan
Sesudah muncul layar di atas lalu pilih No.1 untuk isi data
Sesudah di inputkan 3 data seperti di atas maka tekan enter untuk memulai selanjutnya ?
Sesudah tekan enter maka akan muncul untuk menginput selanjutnya pilih No.2 untuk cetak data yang sudah di inputkan tadi maka akan muncul seperti dibawah ini.
Jika sudah dicetak maka pilih No.3 untuk keluar.
Dan Ini contoh Array 2 dimensi :
/* Array Dua Dimensi */
#include "iostream.h"
#include "conio.h"
#include "stdio.h"
#include "dos.h"
int pilih ;
int x ;
class pegawai
{
private:
char nrp[10] ;
char nama[25] ;
char jawab ;
int kol,brs ;
int total[30] ;
int akun,eng,ngetik,palgo,tik,papl,talgo;
int nilai[40][50];
public:
//*********************************************************************************************************************************
void input_nilai()
{
clrscr();
gotoxy(31,1) ;cout<<" ";
gotoxy(31,2) ;cout<<" DATA NILAI ";
gotoxy(31,3) ;cout<<" MAHASISWA ";
gotoxy(31,4) ;cout<<" ";
gotoxy(5,5);cout<<" NRP : ";
gotoxy(5,6);cout<<" NAMA : ";
//5678901234567890123456789012345678901234567890123456789012345678901234567890
gotoxy(2,8) ;cout<<"ÉÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍËÍÍÍÍÍÍÍËÍÍÍÍÍÍÍ» ";
gotoxy(2,9) ;cout<<"º SKS º MATA KULIAH º QUIZ º UTS º UAS º Rata2 º ";
gotoxy(2,10) ;cout<<"ÌÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÎÍÍÍÍÍÍ͹ ";
gotoxy(2,11) ;cout<<"º 2 º AKUNTANSI º º º º º ";
gotoxy(2,12) ;cout<<"º 2 º ENGLISH º º º º º ";
gotoxy(2,13) ;cout<<"º 1 º MENGETIK º º º º º ";
gotoxy(2,14) ;cout<<"º 2 º P.ALGORITMA º º º º º ";
gotoxy(2,15) ;cout<<"º 2 º P.T.I º º º º º ";
gotoxy(2,16) ;cout<<"º 2 º P. APLIKASI º º º º º ";
gotoxy(2,17) ;cout<<"º 2 º T ALGORITMA º º º º º ";
gotoxy(2,18) ;cout<<"ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÊÍÍÍÍÍÍͼ ";
gotoxy(20,5) ;cin>>nrp;
gotoxy(20,6) ;gets(nama);
for (brs=1;brs<=7;brs++)
{
for(kol=1;kol<=4;kol++)
{
gotoxy((kol*8)+26,brs+10);
if(kol==4)
{nilai[kol][brs]=(nilai[1][brs]+nilai[2][brs]+nilai[3][brs])/3;
cout<<nilai[kol][brs];
}
else
cin>>nilai[kol][brs];
}
}
gotoxy(2,23);cout<<"PRESS ANY KEY TO CONTINUE.....";
}//void input_nilai
//********************************************************************************************************************
void output_nilai()
{
clrscr();
gotoxy(31,2) ;cout<<" ";
gotoxy(31,3) ;cout<<" DATA NILAI ";
gotoxy(31,4) ;cout<<" MAHASISWA ";
gotoxy(31,5) ;cout<<" ";
gotoxy(5,8);cout<<" NRP : ";
gotoxy(5,9);cout<<" NAMA : ";
//56789012345678901234567890123456789012345678901234567890123456789012345
gotoxy(2,8) ;cout<<"ÉÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍËÍÍÍÍÍÍÍËÍÍÍÍÍÍÍ» ";
gotoxy(2,9) ;cout<<"º SKS º MATA KULIAH º QUIZ º UTS º UAS º Rata2 º ";
gotoxy(2,10) ;cout<<"ÌÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÎÍÍÍÍÍÍ͹ ";
gotoxy(2,11) ;cout<<"º 2 º AKUNTANSI º º º º º ";
gotoxy(2,12) ;cout<<"º 2 º ENGLISH º º º º º ";
gotoxy(2,13) ;cout<<"º 1 º MENGETIK º º º º º ";
gotoxy(2,14) ;cout<<"º 2 º P.ALGORITMA º º º º º ";
gotoxy(2,15) ;cout<<"º 2 º P.T.I º º º º º ";
gotoxy(2,16) ;cout<<"º 2 º P. APLIKASI º º º º º ";
gotoxy(2,17) ;cout<<"º 2 º T ALGORITMA º º º º º ";
gotoxy(2,18) ;cout<<"ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÊÍÍÍÍÍÍͼ ";
for (brs=1;brs<=7;brs++)
{
for(kol=1;kol<=4;kol++)
{
gotoxy((kol*8)+26,brs+10);
if(kol==4)
{nilai[kol][brs]=(nilai[1][brs]+nilai[2][brs]+nilai[3][brs])/3;
cout<<nilai[kol][brs];
}
else
cout<<nilai[kol][brs];
}
}
gotoxy(2,23);cout<<"PRESS ANY KEY TO CONTINUE.....";
}//void output_nilai
//********************************************************************************************************************
};//class
void main()
{
clrscr();
pegawai data;//variable class
textcolor(LIGHTCYAN);
sound(2000);
delay(1000);
nosound();
gotoxy(28,21) ;cout<<"ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»";
gotoxy(28,22) ;cout<<"º º";
gotoxy(28,23) ;cout<<"ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ";
for(x=0;x<=24;x++)
{
gotoxy(29+x,22);cout<<"Û";delay(150);
}
gotoxy(29,25) ;cout<<"OPENING PROGRAM";
for(x=0;x<=10;x++)
{
gotoxy(44,25) ;cout<<"";delay(100);
}
clrscr();
do
{
clrscr();
gotoxy(20,12);cout<<"ÉÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»";
gotoxy(20,13);cout<<"º NO º PILIHAN º";
gotoxy(20,14);cout<<"ÌÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹";
gotoxy(20,15);cout<<"º 1 º INPUT NILAI MAHASISWA º";
gotoxy(20,16);cout<<"º 2 º OUTPUT NILAI MAHASISWA º";
gotoxy(20,17);cout<<"º 3 º EXIT º";
gotoxy(20,18);cout<<"ÈÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ";
gotoxy(20,19);cout<<"PILIH : ";cin>>pilih;
switch(pilih)
{
case 1:
{
clrscr();
data.input_nilai();//void outputdata
getch();
break;
}
case 2:
{
clrscr();
data.output_nilai();
getch();
break;
}
}//switch
}while(pilih!=3);
getch();
}//void main
Gambar display array 2 dimensi di jalankan
Sesudah muncul gambar seoerti diatas lalu pilih No.1 untuk meng input nilai mahasiswa
Sesudah memilih No.1 untuk penginputan data lalu masukan nama dan nrp untuk melihat rata- rata dari nilai QUIZ.UTS.UAS.
Sudah beres melihat rata-rata dari gambar di atas lalu tekan enter dan pilih no.2 untuk mencetak / output nilai mahasiswa
B. Pointer
Sudah beres melihat rata-rata dari gambar di atas lalu tekan enter dan pilih no.2 untuk mencetak / output nilai mahasiswa
B. Pointer
Suatu pointer (variable penunjuk)
adalah suatu variable yang berisi dengan alamat lokasi, yaitu suatu memori
tertentu. Bahasa C menyediakan 2 buah operator untuk operasi pointer yaitu
operator ‘*’ dan operator ‘&’.
Identifier suatu
array equivalent dengan alamat dari elemen pertama, pointer equivalent dengan
alamat elemen pertama yang ditunjuk. Perhatikan deklarasi berikut :
int numbers [20];
int *p;
p dan numbers equivalent, dan memiliki sifat
(properties) yang sama. Perbedaanya, user dapat menentukan nilai lain untuk
pointer p. dimana numbers akan selalu menunjuk nilai yang sama seperti yang
telah didefiniskan. P, merupakan variable pointer, numbers adalah constant
pointer. Karena walaupun instruksi di atas benar, tetapi tidak untuk instruksi
di bawah ini :
numbers = p;
Karena numbers
adalah array (constant pointer), dan tidak ada nilai yang dapat diberikan untuk
identifier constant (constant identifier).
Operasi
penambahan pointer merupakan suatu peningkatan nilai pointer yang menunjukkan
lokasi nilai data berikutnya di memory. Misalkan variael pointer x menun jukkan alamat memori
1000, maka operasi penambahan x+1 menunjukkan alamat 1000+sizeof(x).
contoh Pointer
/* pointer */
void main()
{
int x,y,z;
int*px;
clrscr();
x = 87;
px = &x;
y = *px;
z=50;
printf ("alamt z\ = %p\n",&z);
printf ("alamt x = %p\n",&x);
printf ("isi px =%p\n",px);
printf("isi z =%i\n",z);
printf("isi x =%i\n",x);
printf("nilai yang di tunjukan oleh px = %i\n", *px);
printf("nilai z =%i\n",y);
printf("nilai y =%i\n",z);
getch();
}
Gambar display pointer di jalankan
Jika anda mengisi Z=87
Dan jika mengisi X=50
maka akan muncul dilayar akan muncul perpindahan nilai seperti
nilai Z=50
dan nilai X=87
3 A. Double Link List Circular "DLLC"
1 field menunjuk pointer sebelumnya " prev ",
Double Linked List Circular pointer next dan prev nya menunjuk kedirinya sendiri secara circular. Bentuk Node DLLCDouble Linked List Circular pointer next dan prev nya
Double : artinya field pointer- nya terdiri dari dua buah dan dua arah , yaitu prev dan next Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Circular : artinya pointer next dan prev-nya menunjuk ke dirinya sendiri
Double Link List Circular menggunakan head Menggunakan 1 pointer head (*first)
Head selalu menunjuk node pertama Double Link List Circular menggunakan head Menggunakan 1 pointer head (*first) Head selalu menunjuk node pertama
Untuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULL
#include <conio.h>
#include <stdio.h>
struct TNode{
char data[30];
TNode *next;
TNode *prev;
};
TNode *head, *tail;
void init(void);
int isEmpty(void);
void insertDepan(char databaru[30]);
void insertBelakang (char databaru[30]);
void inserttengah(char databaru[30], int pilihdepan, int pilihbelakang);
void tampil(void);
void hapusDepan(void);
void hapusBelakang(void);
void deletetengah(int pilih);
void clear(void);
int cari(char elemen[30]);
main()
{
////////////////////////////////
char pilih;
char elm[30];
int depan,belakang;
init();
do
{
printf("\n");
printf("\t\t===================================\n");
printf("\t\t|| CONTOH PROGRAM ||\n");
printf("\t\t|| DOUBLE LINK LIST CIRCULAR ||\n");
printf("\t\t===================================\n");
printf(" \t\tMENU PILIHAN : \n");
printf("\t\t===================================\n");
printf("\t\t[1] MASUKKAN DATA DARI DEPAN\n");
printf("\t\t[2] MASUKKAN DATA DARI BELAKANG\n");
printf("\t\t[3] MASUKKAN DATA DI TENGAH\n");
printf("\t\t[4] TAMPILKAN DATA\n");
printf("\t\t[5] HAPUS DATA PALING DEPAN\n");
printf("\t\t[6] HAPUS DATA PALING BELAKANG\n");
printf("\t\t[7] HAPUS DATA DI TENGAH\n");
printf("\t\t[8] HAPUS SEMUA DATA\n");
printf("\t\t[9] CARI DATA\n");
printf("\t\t[0] KELUAR\n");
printf("\t\t===================================\n\n");
printf("\t\t===================================\n\n");
printf("\n");
printf("\t\t->->PILIHAN ANDA : ");
scanf("%s",&pilih);
switch(pilih)
{
case '1':clrscr();
tampil();
printf("\n");
printf(" \t\tMASUKKAN DATA DARI DEPAN\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
insertDepan(elm);
getch();
clrscr();
break;
case '2':clrscr();
tampil();
printf("\n");
printf(" \t\tMASUKKAN DATA BELAKANG\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
insertBelakang(elm);
clrscr();
break;
case '3':clrscr();
tampil();
printf("\n");
printf(" \t\tMASUKKAN DATA DARI TENGAH\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
printf("\t\t:: DATA DEPAN : ");
scanf("%i",&depan);
printf("\t\t:: DATA BELAKANG : ");
scanf("%i",&belakang);
inserttengah(elm,depan,belakang);
getch();
clrscr();
break;
case '4':clrscr();
tampil();
printf("\t\t-------------\n\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '5':clrscr();
tampil();
hapusDepan();
printf("\n");
printf("\t\t-------------\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '6':clrscr();
tampil();
hapusBelakang();
printf("\n");
printf("\t\t-------------\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '7':clrscr();
tampil();
printf("\n");
printf(" \t\tMENGHAPUS DATA DARI TENGAH\n");
printf("\t\t----------------------------\n");
printf("\t\t:: DATA NO : ");
scanf("%i",&depan);
deletetengah(depan);
getch();
clrscr();
break;
case '8':clrscr();
clear();
printf("\t\tDATA TELAH DIHAPUS SEMUA\n");
printf("\t\t-------------\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '9':clrscr();
printf("\n");
printf(" \t\t MASUKKAN DATA YANG DICARI\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
if(cari(elm)==1){
printf("\n\t\tdata success ditemukan");
}else{
printf("\n\t\tMaaf data tidak ditemukan");
}
getch();
clrscr();
break;
case '0': break;
getch();
clrscr();
default:printf("\t\tSalah pilih...\n");
break;
}
}while(pilih!='0');
}
/////////////////////////////////
void init(void){
head = NULL;
tail = NULL;
}
/////////////////////////////////
int isEmpty(void){
if(tail == NULL) return 1;
else return 0;
}
//////////////////////////////////
void insertDepan(char databaru[30]){
TNode *baru;
int i;
baru = new TNode;
for(i=0;i<=30;i++){
baru->data[i] = databaru[i];
}
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
tail->next = tail;
tail->prev = tail;
}
else {
baru->next = head;
head->prev = baru;
head = baru;
head->prev = tail;
tail->next = head;
}
printf("\n\t\t\Data masuk\n");
printf("\t\tPress Enter to Continue..");
}
////////////////////////////////////////////////////
void insertBelakang (char databaru[30]){
TNode *baru,*bantu;
int i;
baru = new TNode;
for(i=0;i<=30;i++){
baru->data[i] = databaru[i];
}
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
tail->next = tail;
tail->prev = tail;
}
else {
tail->next = baru;
baru->prev = tail;
tail = baru;
tail->next = head;
head->prev = tail;
}
printf("\t\tData masuk\n");
printf("\t\tPress Enter to Continue..");
}
//////////////////////////////////////////////
void tampil(void){
int i=0;
if(isEmpty()==0){
do{
i++;
printf("\t\t%i. %s\n",i,head->data);
printf("\t\t===================\n");
head=head->next;
}while(head!=tail->next);
printf("\n");
} else printf("\t\t\t..Masih kosong..\n\n");
}
//////////////////////////////////////////////
void hapusDepan(void){
TNode *hapus;
char d[30];
int i;
if (isEmpty()==0){
if(head != tail){
hapus = head;
for (i=0;i<=30;i++){
d[i] = hapus->data[i];
}
head = head->next;
tail->next = head;
head->prev = tail;
delete hapus;
} else {
for (i=0;i<=30;i++){
d[i] = head->data[i];
}
head = NULL;
tail = NULL;
}
printf("\t\t%s terhapus\n",d);
} else printf("\t\tMasih kosong\n");
}
//////////////////////////////////////////
void hapusBelakang(void){
TNode *hapus;
char d[30];
int i;
if (isEmpty()==0){
if(head != tail){
hapus = tail;
for (i=0;i<=30;i++){
d[i] = hapus->data[i];
}
tail = tail->prev;
tail->next = head;
head->prev = tail;
delete hapus;
} else {
for (i=0;i<=30;i++){
d[i] = head->data[i];
}
head = NULL;
tail = NULL;
}
printf("\t\t%s terhapus\n",d);
} else printf("\t\tMasih kosong\n");
}
//////////////////////////////////////////
void clear(void){
TNode *bantu,*hapus;
if (isEmpty()==0){
bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}
}
//////////////////////////////////////////
int cari(char elemen[30]){
int i=0;
int status=0;
if(isEmpty()==0){
do{
i++;
if(head->data[i]==elemen[i]){
status=1;
}else head=head->next;
}while(head!=tail->next && i<=30);
return(status);
} else printf("\t\tMasih kosong\n");
}
/////////////////////////////////////
void inserttengah(char databaru[30], int pilihdepan, int pilihbelakang){
TNode *baru,*bantu,*depan,*belakang;
char elemen[30];
int i;
int j;
baru = new TNode;
for(i=0;i<=30;i++){
baru->data[i] = databaru[i];
}
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
tail->next = tail;
tail->prev = tail;
}else{
depan = head;
belakang = head;
for(i=1;i<pilihdepan;i++){
depan=depan->next;
}
for(i=1;i<pilihbelakang;i++){
belakang=belakang->next;
}
depan->next = baru;
baru->prev = depan;
baru->next = belakang;
belakang->prev = baru;
}
printf("\t\tData masuk\n");
printf("\t\tPress Enter to Continue..");
}
////////////////////////////////////////////////////////
void deletetengah(int pilih){
TNode *hapusdepan,*hapusbelakang,*hapustengah;
char d[30];
int i,j;
if (isEmpty()==0){
if(head != tail){
hapusdepan = head;
hapusbelakang = head;
hapustengah = head;
for(i=1;i<pilih;i++){
hapusdepan=hapusdepan->next;
}
for(i=1;i<(pilih+2);i++){
hapusbelakang=hapusbelakang->next;
}
for(i=1;i<=pilih;i++){
hapustengah=hapustengah->next;
}
for(j=1;j<pilih;j++){
for (i=0;i<=30;i++){
d[i] = hapustengah->data[i];
}
hapustengah = hapustengah->next;
}
delete hapustengah;
hapusdepan->next = hapusbelakang;
hapusbelakang->prev=hapusdepan;
} else {
for (i=0;i<=30;i++){
d[i] = hapustengah->data[i];
}
head = NULL;
tail = NULL;
}
printf("\t\t%s Success terhapus\n",d);
} else printf("\t\tMasih kosong\n");
}
B. Double Linked List Non Circular ( DLLNC )
Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya.
contoh Pointer
/* pointer */
#include"conio.h"
#include"stdio.h"void main()
{
int x,y,z;
int*px;
clrscr();
x = 87;
px = &x;
y = *px;
z=50;
printf ("alamt z\ = %p\n",&z);
printf ("alamt x = %p\n",&x);
printf ("isi px =%p\n",px);
printf("isi z =%i\n",z);
printf("isi x =%i\n",x);
printf("nilai yang di tunjukan oleh px = %i\n", *px);
printf("nilai z =%i\n",y);
printf("nilai y =%i\n",z);
getch();
}
Gambar display pointer di jalankan
Jika anda mengisi Z=87
Dan jika mengisi X=50
maka akan muncul dilayar akan muncul perpindahan nilai seperti
nilai Z=50
dan nilai X=87
3 A. Double Link List Circular "DLLC"
Pengertian secara umumnya DLLC itu Linked list yang menggunakan pointer, dimana setiap node memiliki 3 field, yaitu:
1 field menunjuk pointer sebelumnya " prev ",
1 field pointer yang menunjuk pointer berikutnya "next",
1 field yang berisi data untuk node tersebut .
Double Linked List Circular pointer next dan prev nya menunjuk kedirinya sendiri secara circular. Bentuk Node DLLCDouble Linked List Circular pointer next dan prev nya
menunjuk kedirinya sendiri secara circular. Bentuk Node DLLC
Circular : artinya pointer next dan prev-nya menunjuk ke dirinya sendiri
Double Link List Circular menggunakan head Menggunakan 1 pointer head (*first)
Head selalu menunjuk node pertama Double Link List Circular menggunakan head Menggunakan 1 pointer head (*first) Head selalu menunjuk node pertama
Untuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULL
Selanjutnya pointer prev akan menunjuk ke node sebelumnya , dan pointer next akan menunjuk ke node selanjutnya pada list.
int data ;
TNode *next ;
Tnode * prev ;
};
baru = new TNode ;
baru ->data = databaru ;
baru ->next = NULL;
baru -> prev = NULL
Contoh program double circular
Contoh program double circular
#include <conio.h>
#include <stdio.h>
struct TNode{
char data[30];
TNode *next;
TNode *prev;
};
TNode *head, *tail;
void init(void);
int isEmpty(void);
void insertDepan(char databaru[30]);
void insertBelakang (char databaru[30]);
void inserttengah(char databaru[30], int pilihdepan, int pilihbelakang);
void tampil(void);
void hapusDepan(void);
void hapusBelakang(void);
void deletetengah(int pilih);
void clear(void);
int cari(char elemen[30]);
main()
{
////////////////////////////////
char pilih;
char elm[30];
int depan,belakang;
init();
do
{
printf("\n");
printf("\t\t===================================\n");
printf("\t\t|| CONTOH PROGRAM ||\n");
printf("\t\t|| DOUBLE LINK LIST CIRCULAR ||\n");
printf("\t\t===================================\n");
printf(" \t\tMENU PILIHAN : \n");
printf("\t\t===================================\n");
printf("\t\t[1] MASUKKAN DATA DARI DEPAN\n");
printf("\t\t[2] MASUKKAN DATA DARI BELAKANG\n");
printf("\t\t[3] MASUKKAN DATA DI TENGAH\n");
printf("\t\t[4] TAMPILKAN DATA\n");
printf("\t\t[5] HAPUS DATA PALING DEPAN\n");
printf("\t\t[6] HAPUS DATA PALING BELAKANG\n");
printf("\t\t[7] HAPUS DATA DI TENGAH\n");
printf("\t\t[8] HAPUS SEMUA DATA\n");
printf("\t\t[9] CARI DATA\n");
printf("\t\t[0] KELUAR\n");
printf("\t\t===================================\n\n");
printf("\t\t===================================\n\n");
printf("\n");
printf("\t\t->->PILIHAN ANDA : ");
scanf("%s",&pilih);
switch(pilih)
{
case '1':clrscr();
tampil();
printf("\n");
printf(" \t\tMASUKKAN DATA DARI DEPAN\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
insertDepan(elm);
getch();
clrscr();
break;
case '2':clrscr();
tampil();
printf("\n");
printf(" \t\tMASUKKAN DATA BELAKANG\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
insertBelakang(elm);
clrscr();
break;
case '3':clrscr();
tampil();
printf("\n");
printf(" \t\tMASUKKAN DATA DARI TENGAH\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
printf("\t\t:: DATA DEPAN : ");
scanf("%i",&depan);
printf("\t\t:: DATA BELAKANG : ");
scanf("%i",&belakang);
inserttengah(elm,depan,belakang);
getch();
clrscr();
break;
case '4':clrscr();
tampil();
printf("\t\t-------------\n\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '5':clrscr();
tampil();
hapusDepan();
printf("\n");
printf("\t\t-------------\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '6':clrscr();
tampil();
hapusBelakang();
printf("\n");
printf("\t\t-------------\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '7':clrscr();
tampil();
printf("\n");
printf(" \t\tMENGHAPUS DATA DARI TENGAH\n");
printf("\t\t----------------------------\n");
printf("\t\t:: DATA NO : ");
scanf("%i",&depan);
deletetengah(depan);
getch();
clrscr();
break;
case '8':clrscr();
clear();
printf("\t\tDATA TELAH DIHAPUS SEMUA\n");
printf("\t\t-------------\n");
printf("\t\tPress Enter to Continue..");
getch();
clrscr();
break;
case '9':clrscr();
printf("\n");
printf(" \t\t MASUKKAN DATA YANG DICARI\n");
printf("\t\t----------------------------\n");
printf("\t\t:: MASUKKAN DATA : ");
scanf("%s",&elm);
if(cari(elm)==1){
printf("\n\t\tdata success ditemukan");
}else{
printf("\n\t\tMaaf data tidak ditemukan");
}
getch();
clrscr();
break;
case '0': break;
getch();
clrscr();
default:printf("\t\tSalah pilih...\n");
break;
}
}while(pilih!='0');
}
/////////////////////////////////
void init(void){
head = NULL;
tail = NULL;
}
/////////////////////////////////
int isEmpty(void){
if(tail == NULL) return 1;
else return 0;
}
//////////////////////////////////
void insertDepan(char databaru[30]){
TNode *baru;
int i;
baru = new TNode;
for(i=0;i<=30;i++){
baru->data[i] = databaru[i];
}
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
tail->next = tail;
tail->prev = tail;
}
else {
baru->next = head;
head->prev = baru;
head = baru;
head->prev = tail;
tail->next = head;
}
printf("\n\t\t\Data masuk\n");
printf("\t\tPress Enter to Continue..");
}
////////////////////////////////////////////////////
void insertBelakang (char databaru[30]){
TNode *baru,*bantu;
int i;
baru = new TNode;
for(i=0;i<=30;i++){
baru->data[i] = databaru[i];
}
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
tail->next = tail;
tail->prev = tail;
}
else {
tail->next = baru;
baru->prev = tail;
tail = baru;
tail->next = head;
head->prev = tail;
}
printf("\t\tData masuk\n");
printf("\t\tPress Enter to Continue..");
}
//////////////////////////////////////////////
void tampil(void){
int i=0;
if(isEmpty()==0){
do{
i++;
printf("\t\t%i. %s\n",i,head->data);
printf("\t\t===================\n");
head=head->next;
}while(head!=tail->next);
printf("\n");
} else printf("\t\t\t..Masih kosong..\n\n");
}
//////////////////////////////////////////////
void hapusDepan(void){
TNode *hapus;
char d[30];
int i;
if (isEmpty()==0){
if(head != tail){
hapus = head;
for (i=0;i<=30;i++){
d[i] = hapus->data[i];
}
head = head->next;
tail->next = head;
head->prev = tail;
delete hapus;
} else {
for (i=0;i<=30;i++){
d[i] = head->data[i];
}
head = NULL;
tail = NULL;
}
printf("\t\t%s terhapus\n",d);
} else printf("\t\tMasih kosong\n");
}
//////////////////////////////////////////
void hapusBelakang(void){
TNode *hapus;
char d[30];
int i;
if (isEmpty()==0){
if(head != tail){
hapus = tail;
for (i=0;i<=30;i++){
d[i] = hapus->data[i];
}
tail = tail->prev;
tail->next = head;
head->prev = tail;
delete hapus;
} else {
for (i=0;i<=30;i++){
d[i] = head->data[i];
}
head = NULL;
tail = NULL;
}
printf("\t\t%s terhapus\n",d);
} else printf("\t\tMasih kosong\n");
}
//////////////////////////////////////////
void clear(void){
TNode *bantu,*hapus;
if (isEmpty()==0){
bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}
}
//////////////////////////////////////////
int cari(char elemen[30]){
int i=0;
int status=0;
if(isEmpty()==0){
do{
i++;
if(head->data[i]==elemen[i]){
status=1;
}else head=head->next;
}while(head!=tail->next && i<=30);
return(status);
} else printf("\t\tMasih kosong\n");
}
/////////////////////////////////////
void inserttengah(char databaru[30], int pilihdepan, int pilihbelakang){
TNode *baru,*bantu,*depan,*belakang;
char elemen[30];
int i;
int j;
baru = new TNode;
for(i=0;i<=30;i++){
baru->data[i] = databaru[i];
}
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
tail=baru;
head->next = head;
head->prev = head;
tail->next = tail;
tail->prev = tail;
}else{
depan = head;
belakang = head;
for(i=1;i<pilihdepan;i++){
depan=depan->next;
}
for(i=1;i<pilihbelakang;i++){
belakang=belakang->next;
}
depan->next = baru;
baru->prev = depan;
baru->next = belakang;
belakang->prev = baru;
}
printf("\t\tData masuk\n");
printf("\t\tPress Enter to Continue..");
}
////////////////////////////////////////////////////////
void deletetengah(int pilih){
TNode *hapusdepan,*hapusbelakang,*hapustengah;
char d[30];
int i,j;
if (isEmpty()==0){
if(head != tail){
hapusdepan = head;
hapusbelakang = head;
hapustengah = head;
for(i=1;i<pilih;i++){
hapusdepan=hapusdepan->next;
}
for(i=1;i<(pilih+2);i++){
hapusbelakang=hapusbelakang->next;
}
for(i=1;i<=pilih;i++){
hapustengah=hapustengah->next;
}
for(j=1;j<pilih;j++){
for (i=0;i<=30;i++){
d[i] = hapustengah->data[i];
}
hapustengah = hapustengah->next;
}
delete hapustengah;
hapusdepan->next = hapusbelakang;
hapusbelakang->prev=hapusdepan;
} else {
for (i=0;i<=30;i++){
d[i] = hapustengah->data[i];
}
head = NULL;
tail = NULL;
}
printf("\t\t%s Success terhapus\n",d);
} else printf("\t\tMasih kosong\n");
}
B. Double Linked List Non Circular ( DLLNC )
Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya.
Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL. Pengertian:
Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL. Pengertian:
Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Deklarasi dan node baru DLLNC
Deklarasi node
Dibuat dari struct berikut ini :
typedef struct TNode {
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya .
TNode * baru ;
#include<stdlib.h>
struct node
{
struct node *prev,*next;
int data;
};
void create_list(struct node *list,int n)
{
struct node *n1,*n2;
int i;
n1=list;
printf("enter the data for the 1 node:");
scanf("%d",&list->data);
for(i=1;i<n;i++)
{
list->next=(struct node *)malloc(sizeof(struct node));
if(list->next==NULL)
{
printf("malloc not done");
exit(0);
}
n2=list;
list=list->next;
list->prev=n2;
printf("enter the data for the %d node",i+1);
scanf("%d",&list->data);
}
list->next=n1;
n1->prev=list;
}
void print_list(struct node *list)
{
struct node *temp;
temp=list;
if(list->next=temp)
{
printf("%d",list->data);
}
if(list->next!=temp)
{
printf("%d",list->data);
if(list->next->next==temp)
printf("%d",list->next->data);
else
print_list(list->next);
}
}
int main()
{
int n;
struct node *head;
head=(struct node *)malloc(sizeof(struct node));
if(head==NULL)
{
printf("space unallocated");
exit (0);
}
printf("enter the no of nodes:");
scanf("%d",&n);
create_list(head,n);
print_list(head);
return 0;
}
DLLNC "Double linked list non circular" adalah Double Linked List yang memiliki 2 buah pointer yaitu pointernext dan prev.
Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya
Untuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULL
Selanjutnya pointer prev akan menunjuk ke node sebelumnya , dan pointer next akan menunjuk ke node selanjutnya pada list.
Deklarasi dan node baru DLLNC
Deklarasi node
Dibuat dari struct berikut ini :
typedef struct TNode {
int data ;
TNode *next ;
Tnode * prev ;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya .
TNode * baru ;
baru = new TNode ;
baru ->data = databaru ;
baru ->next = NULL;
baru -> prev = NULL;
Selanjutnya pointer prev akan menunjuk ke node sebelumnya , dan pointer next akan menunjuk ke node selanjutnya pada list.
Deklarasi dan node baru DLLNC
Deklarasi node
Dibuat dari struct berikut ini :
typedef struct TNode {
int data ;
TNode *next ;
Tnode * prev ;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya .
TNode * baru ;
baru = new TNode ;
baru ->data = databaru ;
baru ->next = NULL;
baru -> prev = NULL;
C. SINGLE LINKED LIST (NON CIRCULAR)
LINKED LIST
Dalam pemakaian sehari - hari istilah linked list (senarai berantai) adalah kumpulan linear sebuah data contoh senarai berantai adalah data yang berisi daftar belanjaan, yang berupa barang pertama, kedua,, ketiga dan seterusnya, untuk hari berikutnya maka daftar terdebut bisa berubah sesuai barang yang harus dibeli lagi atau barang yang tidak perlu dibeli lagi. Daftar belanjaan semula bisa ditambah 3 barang lain dan menghapus dua barang (dgn mencoret) yang tidak perlu dibeli lagi.
Setiap simpul dalam suatu linked list terbagi menjasi 2 bagian yaitu :
1. Medan Informasi
Berisi informasi yang akan disimpan dan diolah
2 Medan Penyambung
Berisi alamat berikutnya. Bernilai 0, jika link tersebut tidak menunjuk ke data (Simpul)
lainya. Penunjuk ini disebut penunjuk nol.
Linked list juga mengandung sebuah variabel penunjuk list, yamg biasanya diberi nama START (AWAL) yang berisi alamat dari simpul pertama dalam list.
BENTUK NODE SINGLE LINKLED LIST NON CIRCULAR
Single : field pointer-nya hanya satu arah, pada akhir not pointer-nya menunjuk NULL
Linked List : Node - node tersebut saling terhubung satu sama lain
setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. Mode terakhir akan menunjuk NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.
SINGLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD
Dibutuhkan satu buah variabel pointer : head yang akan selaku menunjuk pada node pertama
Deklarasi Pointer Penunjuk Head Single Linked List sebagai berikut :
TNode*head
Menambah Node Di Depan
Penambahan node baru akan dikaitan di node paling depan, namun pada daat pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara : node head ditunjukan ke node baru tersebut
Prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap sekaku menjadi data terdepan.
Menambah Node Di Belakang
Penambahan dilakukan di belakang, namin pada saat pertama kali, node langsung ditunjuk oleh head, membutuhkan pointer bantu untuk mengetahui node terbelakang kemudian dikaitkan dengan node baru, perlu digunakan perulangan.
Menghapus Node Di Depan
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunaan suatu pointer lain (hapus) yang digunakan untuk menunjuk node yang akan dihapus, barulah kemusian menghapus pointer menggunakan perintah delete. Sebelum data terdepan terhapus, terlebih dahulu head harus menunhuk ke alamat berikutnya agar list tidak putus, jika head masih NULL berarti data masih kosong.
Menghapus Node Di Belakang
Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus, Pointer bantu untuk menunjuk node sebelum node yang akan dihapus yang akan menjadi node yang terakhir. Pointer bantu digunakan untuk menunjuk ke nilai NULL selalu bergerak sampai sebelum node yang akan dihapus kemudian pointer hapus diletakan setelah pointer bantu. Selanjutnya pointer hapus akan menunjuk ke NULL.
SINGLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAS DAN TAIL
Dibutuhkan dua variabel pointer head dan tail. Head selalu menunjuk ke node pertama, sedangkan tail selalu menunjuk ke node terakhir
Kelebihan dari single liked list dengan heag dan tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan pointer bantu.
Menghapus Node Di Depan (Dengan Head dan Tail)
Penghapusan node tidak boleh dilakukan jika keadaan node sadang ditunjuk oleh pointer, maka harus dilakukan penunjukan terlebih dahulu dengan pointer hapus pada head, kemudian dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus pointer hapus dengan menggunakan perintak delete. Jika tail masih NULL maka berarti list masih kosong.
Menghapus Node Di Belakang(Dengan Head Dan Tail)
Penghapusan tidak boleh dilakukan jika keasaan node dedang ditunjuk oleh pointer, maka harus dilakukan penunjukan terlebih dahulu dengan mengginakan variabel hapus pada tail. JIka Tail masih NULL maka berarti list masih kosong. Dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya dampai debelim tail, sehingga tail dapat ditunjukan ke bantu, dan bantu tersebut akan nenjadi tail yang baru. Setelah itu hapus pointer hapus dengan menggunakan menggunakn perintah delete.
Contoh program single linked list (Non circular)
A .Tambah list belakang
tambah list
#include <iostream.h>
#include <conio.h>
typedef struct TNode {
int data;
TNode *next;
};
TNode *head;
void init(){
head=NULL;
}
int IsEmpty(){
if(head==NULL)
return 1;
else
return 0;
}
void insertdepan(int n){
TNode *baru;
baru=new TNode;
baru->data=n;
baru->next=NULL;
if(IsEmpty()==1){
head=baru;
head->next=NULL;
}
else {
baru->next=head;
head=baru;
}
cout<<"Data Terisi";
}
void insertbelakang(int n){
TNode *baru,*bantu;
baru=new TNode;
baru->data=n;
baru->next=NULL;
if(IsEmpty()==1){
head=baru;
head->next=NULL;
}
else {
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next;
}
bantu->next=baru;
}
cout<<"Data Terisi";
}
void tampil(){
TNode *bantu;
bantu=head;
if(IsEmpty()==0){
while(bantu!=NULL){
cout<<bantu->data<<endl;
bantu=bantu->next;
}
}
else
cout<<"Masih Kosong"<<endl;
}
void hapusdepan(){
TNode *hapus;
int d;
if(IsEmpty()==0){
if(head!=NULL){
hapus=head;
d=hapus->data;
head=hapus->next;
delete hapus;
}
cout<<d<<" Terhapus"<<endl;
}
else
cout<<"Masih Kosong"<<endl;
}
main(){
int pil;
do{
clrscr();
int n;
cout<<"1.Insert Depan"<<endl;
cout<<"2.Insert Belakang"<<endl;
cout<<"3.Display"<<endl;
cout<<"4.Delete"<<endl;
cout<<"5.Exit"<<endl;
cout<<"Masukan Pilihan Anda :";pil=getch();
switch(pil){
case 1: clrscr();
cout<<"Masukan data :";cin>>n;
IsEmpty();
insertdepan(n);
break;
case 2: clrscr();
cout<<"Masukan data :";cin>>n;
IsEmpty();
insertbelakang(n);
break;
case 3: clrscr();
IsEmpty();
tampil();
break;
case 4: clrscr();
IsEmpty();
hapusdepan();
break;
}
getch();
}while(pil!=5);
return 0;
}
B. Hapus lingked list
#include"constream.h"
#include"stdio.h"
#include"stdlib.h"
#include"ctype.h"
#include"string.h"
struct siswa
{
char nrp[8],nama[30];
};
struct simpul
{
char nrp[8],nama[30];
struct simpul *berikut;
};
struct simpul *awal=NULL,*akhir=NULL;
struct siswa mhs;
void tambah_list_belakang(struct siswa info);
void hapus_simpul(int info);
void hapus_data();
void isi_list();
void sisip_list(struct simpul *first,struct siswa info,char posisi[20]);
void sisip_isi_list();
void tampil_list();
void tampil_list2();
void hapus_semua();
void menu();
void main()
{
clrscr();
menu();
getch();
}
void menu()
{
int pil;
clrscr();
cout<<"\nProgrammer : Yuda ramdani";
cout<<"\n\nPilih Transaksi : ";
cout<<"\n\t\t1. Isi List";
cout<<"\n\t\t2. Sisip List";
cout<<"\n\t\t3. Tampil List";
cout<<"\n\t\t4. Hapus data";
cout<<"\n\t\t5. hapus semua";
cout<<"\n\t\t6. Keluar";
cout<<"\n\nTentukan Pilihan : ";
cin>>pil;
switch(pil)
{
case 1 : isi_list();
break;
case 2 : clrscr();
sisip_isi_list();
break;
case 3 : tampil_list();
break;
case 4 : hapus_data();
break;
case 5 : hapus_semua();
break;
case 6 : clrscr();
cout<<"\nTerima Kasih";
getch();
}
}
void tambah_list_dibelakang(struct siswa info)
{
struct simpul *baru;
baru=new simpul;
strcpy(baru->nrp,info.nrp);
strcpy(baru->nama,info.nama);
if (awal==NULL)
{
awal=baru;
}
else
{
akhir->berikut=baru;
}
akhir=baru;
akhir ->berikut=NULL;
}
void isi_list()
{
char jawab;
do
{
clrscr();
cout<<"\nNRP : ";gets(mhs.nrp);
cout<<"\nNama : ";gets(mhs.nama);
tambah_list_dibelakang(mhs);
cout<<"\n\nTambah data Y/T : ";
cin>>jawab;
}while(toupper(jawab)!='T');
menu();
}
void hapus_simpul(char info[20])
{
struct simpul *bantu,*hapus;
if (awal==NULL) { cout<<"\n Data List Kosong ";}
else
{
if (strcmp(awal->nrp,info)==0)
{
hapus=awal;
awal=hapus->berikut;
free(hapus);
}
else
{
bantu=awal;
while ((strcmp(info,bantu->berikut->nrp)!=0) && (bantu->berikut!=NULL))
{
bantu=bantu->berikut;
}
hapus=bantu->berikut;
if (hapus!=NULL)
{
if (hapus!=akhir) { bantu->berikut=hapus->berikut;}
else
{
akhir=bantu;
akhir->berikut=NULL;
}
free(hapus);
}
}
}
}
void hapus_data()
{
char cari[20];
char jawab;
clrscr();
cout<<"\nada data yang akan dihapus Y/T : ";cin>>jawab;
if (toupper(jawab)=='Y')
{
aku:
cout<<"\nNRP yang akan dihapus : ";
gets(cari);
hapus_simpul(cari);
cout<<"\nData menjadi : ";
tampil_list();
}
}
void tampil_list()
{
struct simpul *baca;
int i;
baca=awal;
i=1;
clrscr();
while(baca!=NULL)
{
cout<<"\nData Ke-:"<<i<<endl;
cout<<"\nNRP : "<<baca->nrp;
cout<<"\nNama : "<<baca->nama;
cout<<endl;
i++;
baca=baca->berikut;
}
getch();
menu();
}
void hapus_semua()
{
struct simpul *hapus;
hapus=awal;
while(hapus!=NULL)
{
awal=hapus->berikut;
free(hapus);
hapus=awal;
}
clrscr();
cout<<"Semua Data Telah Terhapus !!!";
getch();
menu();
}
void sisip_list(struct simpul *first,struct siswa info,char posisi[20])
{
struct simpul *bantu, *baru;
baru= new simpul;
strcpy(baru->nrp,info.nrp);
strcpy(baru->nama,info.nama);
bantu=first;
do
{
if (strcmp(posisi,bantu->nrp)!=0) {bantu=bantu->berikut;};
}while(bantu!=NULL && strcmp(posisi,bantu->nrp)!=0);
baru->berikut=bantu->berikut;
bantu->berikut=baru;
}
void sisip_isi_list()
{
char cari[20];
struct siswa ganti;
clrscr();
cout<<"\nNRP : ";gets(ganti.nrp);
cout<<"\nNama : ";gets(ganti.nama);
cout<<"\nDisisipkan Setelah NRP : ";gets(cari);
sisip_list(awal,ganti,cari);
getch();
menu();
}
Gambar display hapus list di jalankan.
Pilih no 1 untuk mengisi list.
Sesudah pilih no 1 lalu isi nrp dan nama.
sesudah beres tekan enter untuk melanjutkan program yang lainnya .
pilih no.2 untuk meng sisip_list.
lalu teka enter untuk melakukan program selanjutnya.
pilih no.3 untuk menampilkan yang telah disisipkan tadi.
sesudah menekan no.3 maka muncul seperti gambar diatas ini lalu enter untuk memulai selanjutnya pilih no.4 untuk menghapus data yang ingin dihapus misalnya
data ke 2 dengan nrp 6311255 nama ramdani
data ke 2 dengan nrp 6311255 nama ramdani
maka data dengan nrp 6311255 akan ter hapus . dan tekan enter
lalu pilih no.5 untuk meng hapus data semuanya.
Sesudah terhapus semuanya lalu tekan enter untuk keluardan pilih no.6 untuk clouse/keluar
5.TREE
Merupakan salah satu bentuk struktur data tidak linear yang menggambarkan hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang disebut Root dan node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama lainnya (disebut subtree). Untuk jelasnya, di bawah akan diuraikan istilah-istilah umum dalam tree :
a) Prodecessor : node yang berada diatas node tertentu.
b) Successor : node yang berada di bawah node tertentu.
c) Ancestor : seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang sama.
d) Descendant : seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang sama.
e) Parent : predecssor satu level di atas suatu node.
f) Child : successor satu level di bawah suatu node.
g) Sibling : node-node yang memiliki parent yang sama dengan suatu node.
h) Subtree : bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki semua karakteristik dari tree tersebut.
i) Size : banyaknya node dalam suatu tree.
j) Height : banyaknya tingkatan/level dalam suatu tree.
k) Root : satu-satunya node khusus dalam tree yang tak punya predecssor.
l) Leaf : node-node dalam tree yang tak memiliki seccessor.
m) Degree : banyaknya child yang dimiliki suatu node.
CONTOH POHON BINARY
Dan ini contoh program dari c++
#include "iostream.h"
#include "string.h"
#include "conio.h"
struct simpulpohon
{
simpulpohon *induk;
simpulpohon *kiri;
simpulpohon *kanan;
char data;
};
class pohonbiner
{
private:
simpulpohon *akar;
int tambah(simpulpohon *orangtua, simpulpohon *baru);
void tampil(simpulpohon *simpul);
public:
pohonbiner();
int tambah(char data);
void tampil();
};
void main()
{
clrscr();
char data[] = "yudaramdani";
pohonbiner pohon;
for (int i = 0; i < strlen(data); i++)
pohon.tambah(data[i]);
cout<<"Data ke Pohon Biner : "<<endl;
for (int x = 0; x < strlen(data); x++)
cout<<data[x];
cout<<endl;
cout<<endl;
cout<<"Hasil Pohon Biner :"<<endl;
pohon.tampil();
getch();
}
pohonbiner::pohonbiner()
{
akar = NULL;
}
int pohonbiner::tambah(char data)
{
simpulpohon *simpul;
simpul= new simpulpohon;
simpul->kiri = NULL;
simpul->kanan = NULL;
simpul->induk = NULL;
simpul->data = data;
if (akar == NULL)
{
akar = simpul;
return(1);
}
else
return(tambah(akar,simpul));
}
int pohonbiner::tambah(simpulpohon *orangtua, simpulpohon *baru)
{
if (baru->data ==orangtua->data)
{
delete baru;
return(0);
}
else if (baru->data < orangtua->data)
{
if (!orangtua->kiri)
{
orangtua->kiri = baru;
baru->induk = orangtua;
}
else
return(tambah(orangtua->kiri,baru));
}
else
{
if (!orangtua->kanan)
{
orangtua->kanan = baru;
baru->induk = orangtua;
}
else
return(tambah(orangtua->kanan,baru));
}
return(1);
}
void pohonbiner::tampil()
{
tampil(akar);
cout<<endl;
}
void pohonbiner::tampil(simpulpohon *simpul)
{
if (simpul)
{
if (simpul->kiri) tampil(simpul->kiri);
cout<<simpul->data;
if (simpul->kanan) tampil(simpul->kanan);
}
}
Gambar display tree di jalankan
setelah dijalan kan maka akan muncul gambar seperti diatas dari
data pohon binary :yudaramdani
maka hasil binarynya menjadi : adimnruy
karna klo huruf yang sama akan menjadi triss/destroit
dan hasil nya akan menjadi beurutan dan sesuai nama yang terkecil
dan hasil nya akan menjadi beurutan dan sesuai nama yang terkecil




















