Muqadimah
Nama
Kampus
: Politeknik Komputer Niaga LPKIA Bandung
Program
Studi
: Manajemen Informatika
Konsentrasi
: Teknik Informatika
Kelas :
1TI-5
Nama Mahasiswa : Adji
Kristiawan
NRP
: 6311163
Mata
Kuliah :
Teori Struktur Data
Nama
Dosen :
Dadan Nurdin Bagenda, ST.
Pengertian Struktur Data.
Struktur Data adalah
suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi
serta operasi yang didefinisikan terhadapnya. Pemakaian Struktur Data yang
tepat didalam proses pemrograman, akan menghasilkan Algoritma yang lebih jelas
dan tepat sehingga menjadikan program secara keseluruhan lebih sederhana.
Pada garis besarnya, Data dapat
dikategorikan menjadi :
A. Type Data Sederhana / Data Sederhana
Terdiri dari :
1. Data Sederhana Tunggal
Misalnya : Integer, Real/Float,
Boolean dan Character
2. Data Sederhana Majemuk
Misalnya : String
B. Struktur Data
Terdiri dari :
1. Struktur Data Sederhana
Misalnya Array dan Record
2. Struktur Data Majemuk
Terdiri dari :
A. Linier
Misalnya : Stack, Queue dan Linear
Linked List.
B. Non Linier
Misalnya : Pohon (Tree), Pohon Biner
(Binary Tree), Pohon Cari Biner (Binary Search Tree), General Tree serta Graph.
Array di C++ adalah kumpulan
data yang terdiri dari tipe data yang
sama. Setiap nilai yang berada dalam
array disebut elemen. Letak
atau posisi dari dari
elemen array ditunjukkan oleh suatu index.
Berdasarkan dimensinya, array dapat dibagi
menjadi array dimensi satu, array multi-dimensi.
contoh program
array 1 dimensi:
#include<iostream.h>
#include<conio.h>
main()
{
int
a[5]={10,15,20,25,30};
int
b[5]={10,20};
int
c[5]={15,0,30};
int j;
// Menampilkan
nilai dari element array
cout<<endl;
for(j=0;j<5;j++)
{
cout<<"A
["<<j<<"] = "<<a[j]<<" , B
["<<j<<"] = "<<b[j]<<" , C
["<<j<<"] = "<<c[j]<<endl;
}
getch();
}
Setelah
dieksekusi :
program array
dua dimensi:
//array dua
dimensi
#include<iostream.h>
#include<conio.h>
main()
{
int
matrix[3][3];
int i,j;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
cout<<"Masukkan
angka pada baris ke "<<i<<" kolom ke
"<<j<<" : ";
cin>>matrix[i][j];
}
cout<<endl;
}
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
cout<<matrix[i][j]<<"
";
}
cout<<endl;
}
getch();
}
Pointer adalah variable yang berisi alamat memory
sebagai nilainya dan berbeda dengan variable biasa yang berisi nilai tertentu.
Dengan kata lain, pointer berisi alamat dari variable yang mempunyai nilai
tertentu.
Dengan
demikian, ada variabel yang secara langsung menunjuk ke suatu nilai tertentu,
dan variabel yang secara tidak langsung menunjuk ke nilai.
Contoh Program
Pointer:
#include
#include
void main()
{
char *Alamat_X, X, Y, Z;
X = 'J';
Alamat_X = &X;
Y = X;
Z = *Alamat_X;
cout<<"Nilai variabel X adalah "<<
cout<<"Nilai variabel Y adalah "<<
cout<<"Nilai variabel Z adalah "<<
cout<<"Nilai variabel X berada di alamat
memori ";printf("%p",Alamat_X);
}
Jika program ini dijalankan, akan didapatkan hasil:
Nilai
variable X adalah J
Nilai
variable Y adalah J
Nilai
variable Z adalah J
Nilai
variable X berada di alamat memori 2527:24C7
Linked list hampir mirip dengan array, hanya saja linked list lebih
bersifat dinamis jika dibandingkan dengan array. Seperti yang kita ketahui,
saat memakai array, besarnya array tersebut bersifat statis, misalnya kita
mendeklarasikan array yang besarnya 5 indeks maka dari program dimulai sampai
berakhir ukuran array tersebut tidak akan berubah meskipun yang dipakai dalam
memory hanya 2 indeks saja. Dan kita tidak bisa menginputkan data lebih dari 5
indeks. Linked list ada untuk menutupi kelemahan-kelemahan array yang tadi
disebutkan.
Secara umum linked list tersusun
atas sejumlah bagian-bagian data yang lebih kecil yang terhubung (biasanya
melalui pointer). Linked list dapat divisualisasikan seperti kereta, bagian
kepala linked list adalah mesin kereta, data yang disimpan adalah gerbong, dan
pengait antar gerbong adalah pointer.
Linked list memiliki beberapa jenis, di antaranya :
A. Single linked list
B. Double linked list
C. Multiply linked list
D. Linear linked list
E. Circular Linked List
Contoh program Single linked list :
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <alloc.h>
int pil;
void pilih();
void buat_baru();
void tambah_belakang();
void tambah_depan();
void hapus_belakang();
void hapus_depan();
void tampil();
struct simpul
{
char nim[8], nama
[20];
int umur;
struct simpul
*next;
} mhs, *baru, *awal=NULL,
*akhir=NULL,*hapus,*bantu;
int main()
{
do
{
clrscr();
cout<<"MENU SINGLE 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);
return 0;
}
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=(simpul*)malloc(sizeof(struct simpul));
cout<<"input nim : ";cin>>baru->nim;
cout<<"input nama : ";cin>>baru->nama;
cout<<"input umur : ";cin>>baru->umur;
baru->next=NULL;
}
void tambah_belakang()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
}
else
{
akhir->next=baru;
}
akhir=baru;
akhir->next=NULL;
cout<<endl<<endl;
tampil();
}
void tambah_depan()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
akhir=baru;
akhir->next=NULL;
}
else
{
baru->next=awal;
awal=baru;
}
cout<<endl<<endl;
tampil();
}
void hapus_depan()
{
if (awal==NULL)
cout<<"Kosong";
else
{
hapus=awal;
awal=awal->next;
free(hapus);
}
cout<<endl<<endl;
tampil();
}
void hapus_belakang()
{
if (awal==NULL)
cout<<"Kosong";
else
if(awal==akhir)
{
hapus=awal;
awal=awal->next;
free(hapus);
}
else
{
hapus=awal;
while(hapus->next!=akhir)
hapus=hapus->next;
akhir=hapus;
hapus=akhir->next;
akhir->next=NULL;
free(hapus);
}
cout<<endl<<endl;
tampil();
}
void tampil()
{
if
(awal==NULL)
cout<<"Kosong";
else
{
bantu=awal;
while(bantu!=NULL)
{
cout<<"nim : "<<bantu->nim;
cout<<" nama : "<<bantu->nama;
cout<<" umur : "<<bantu->umur<<endl;
bantu=bantu->next;
}
}
getch();
}
Contoh program Double Linked List :
#include “stdio.h”
#include “stdlib.h”
#include “conio.h”
struct node{
struct node *previous;
int info;
struct node *next;
};
typedef struct node *simpul;
void main()
{
simpul baru, head=NULL, tail=NULL,
temp;
int pilih;
do
{
printf(“MENU\n”);
printf(“1. Insert Depan\n”);
printf(“2. View\n”);
printf(“3. Search\n”);
printf(“4. Delete Depan\n”);
printf(“PILIH: “);
scanf(“%d”, &pilih);
switch(pilih)
{
case 1:
int data;
printf(“Data Masuk: “);
scanf(“%i”, &data);
baru = (simpul) malloc(sizeof
(struct node));
baru->info = data;
baru->next =
NULL; //tidak menuju simpul mana2
baru->previous = NULL;
if (head ==
NULL)
//khusus simpul pertama LL
{
head =
baru; //pointer head, tail, baru sama
tail = baru;
}
else
//untuk simpul2 berikutnya
{
baru->next = head;
head->previous = baru;
head = baru;
}
break;
case 2:
printf(“Dari HEAD\n”);
temp = head;
//tampilkan mulai dr depan
while(temp!=NULL)
//ulangi sampai temp bernilai NULL
{
printf(“%i “, temp->info);
temp =
temp->next; //geser temp ke belakang
}
printf(“\nDari Tail\n”);
temp =
tail; //tampilkan mulai dr
depan
while(temp!=NULL)
//ulangi sampai temp bernilai NULL
{
printf(“%i “, temp->info);
temp =
temp->previous;
//geser temp ke belakang
}
printf(“\n”);
break;
case 3:
int cari;
printf(“Cari Angka: “);
scanf(“%i”, &cari);
temp = head;
while((temp!=NULL)&&(temp->info!=cari))
{
temp = temp->next;
}
if(temp != NULL &&
temp->info == cari)
printf(“Data Ditemukan”);
else //if(temp == NULL)
printf(“Data Tidak Ditemukan”);
printf(“\n”);
break;
case 4://hapus depan
temp = head;
head = head->next;
if (head != NULL)
head->previous = NULL;
if (head == NULL)
tail = NULL;
free(temp);
break;
}
}while (pilih!=5);
}
Contoh Program Multiply Linked List
:
#include <stdio.h>
#include <stdlib.h>
#include "tp5.c"
int main()
{
int pil;
InfoParent
x,cari;
InfoChild y;
char dump;
List A;
addressParent p;
addressChild q;
CreateList(&A);
do
{
system("cls");
printf("Menu Multi List\n");
printf("1. Insert First\n");
printf("2. Insert Child\n");
printf("3. Delete Parent\n");
printf("4. View\n");
printf("5. Exit\n");
printf("PILIHAN <1-5> : ");
scanf("%d",&pil);
scanf("%c",&dump);
switch(pil)
{
case 1 :
printf("Masukan Parentnya : ");
scanf("%s",&x);
p=alokasiParent(x);
InsertFirstParent(&A,p);
break;
case 2 :
printf("Masukan Parentnya : ");
scanf("%s",&cari);
p=search(A,cari);
if(first(A)==nil)
{
printf("List Kosong");
}
else
{
if(p==nil)
{
printf("Parent tidak ada");
}
else
{
printf("Masukan
Childnya : ");
scanf("%s",&y);
q=alokasiChild(y);
InsertFirstChild(&p,q);
}
}
break;
case 3 :
DeleteFirstParent(&A);
break;
case 4 :
system("cls");
View(A);
break;
case 5 :
printf("Terima Kasih");
break;
default :
printf("Keyword Salah");
}getche();
}while(pil!=5);
return 0;
}
Contoh Program Circular Linked List
:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct node{
int data;
struct node *next;
};
typedef struct node node;
node *pList = NULL;
node *alokasiNodeBaru(){
node *pNew = NULL;
pNew = (node *)
malloc(sizeof(node));
return(pNew);
}
void tambahAwal(node *pNew){
node *temp;
if(pList == NULL){
pNew->next = pNew;
pList = pNew;
}
else{
//mencari node yang menunjuk pList
temp = pList;
while(temp->next != pList){
temp = temp->next;
}
temp->next = pNew;
pNew->next = pList;
pList = pNew;
}
}
void cetak(){
node *pWalker = pList;
node *pNext = NULL;
while(pNext != pList){
printf(“pWalker = %d, “,
pWalker->data);
pNext = pWalker->next;
pWalker = pNext;
printf(“pWalker->next = %d \n”,
pWalker->data);
}
}
void tambahTengah(node *pNew){
node *pWalker;
pWalker=pList;
int nilai,sisip;
printf(“masukkan nilai yang ingin
ditambahkan: “); scanf(“%d”,&nilai);
pNew->data = nilai;
cetak();
printf(“data disisipkan setelah
nilai : “); scanf(“%d”,&sisip);
while(pWalker!=NULL &&
pWalker->data!=sisip){
pWalker=pWalker->next; }
if(pWalker->next==pList)
printf(“\ndata tidak ditemukan”);
else
{pNew->next=pWalker->next;
pWalker->next=pNew; }
cetak();
}
void tambahAkhir(node *pNew){
node *pPre;
pPre=pList;
int nilai;
printf(“masukkan nilai yang ingin
ditambahkan: “); scanf(“%d”,&nilai);
pNew->data = nilai;
while(pPre->next!=pList){
pPre=pPre->next; }
pNew->next=pList;
pPre->next=pNew;
}
void hapusAwal(){
node *pEnd, *pHapus;
pEnd=pList;
pHapus=pList;
while(pEnd->next!=pList){
pEnd=pEnd->next;}
pEnd->next=pHapus->next;
pList=pList->next;
free(pHapus);
}
void hapusTengah(){
node *pCari,*pPre;int hapus;
pPre=pList;
pCari=pList;
cetak();
printf(“Masukkan bilangan yang ingin
dihapus: “); scanf(“%d”,&hapus);
while(pCari->data!=hapus){
pCari=pCari->next; }
while(pPre->next!=pCari){
pPre=pPre->next;}
pPre->next=pCari->next;
free(pCari);
}
void hapusAkhir(){
node *pEnd,*pPre;
pEnd=pList;
pPre=pList;
while(pEnd->next!=pList){
pEnd=pEnd->next;}
while(pPre->next!=pEnd){
pPre=pPre->next;}
pPre->next=pList;
free(pEnd);
}
int main(int argc, char *argv[])
{
node *pNew; int pilih,bil;
do{
system(“cls”);
printf(“====================”);
printf(“======= MENU =======”);
printf(“====================”);
printf(“\n\n”);
printf(“\n1.tambah di awal”);
printf(“\n2.tambah di tengah”);
printf(“\n3.tambah di akhir”);
printf(“\n4.hapus di awal “);
printf(“\n5.hapus di tengah”);
printf(“\n6.hapus di akhir”);
printf(“\n7.cetak”);
printf(“\n8.exit”);
printf(“\nMasukkan pilihan :
“);scanf(“%d”,&pilih);
if(pilih==1){pNew=alokasiNodeBaru();
printf(“masukkan bilangan: “);
scanf(“%d”,&bil);
pNew->data=bil;
tambahAwal(pNew);
}
else
if(pilih==2){pNew=alokasiNodeBaru();
tambahTengah(pNew);
}
else
if(pilih==3){pNew=alokasiNodeBaru();
tambahAkhir(pNew);
}
else if(pilih==4){hapusAwal();}
else if(pilih==5){hapusTengah();}
else if(pilih==6){hapusAkhir();}
else if(pilih==7){cetak();getch();}
}while(pilih!=8);
printf(“\n”);
system(“pause”);
return 0;
}