SlideShare a Scribd company logo
1 of 20
Download to read offline
Pointer dan List Berkait Singly
Akmal, S.Si, MT
Erick Paulus, M.Kom
Mata Kuliah : Struktur Data
Tujuan
 Mahasiswa dapat menjelaskan pengertian
pointer dan bisa menerangkan operasi
dasar menggunakan pointer dengan benar
 Mahasiswa dapat : Mengoperasikan dan
membuat program dari semua algoritma
primitive list singly (insert, delete,
traversal dan searching) dengan benar.
Pokok Bahasan
 Pengertian Pointer
 Deklarasi Pointer to Integer dan Alokasi memori
 Operasi Pada Pointer
 Pointer to Record
 Pengertian List berkait
 Operasi Traversal List
 Menambah di depan, belakang, dan tengah
 Menghapus di depan, belakang dan tengah
 Searching
Pointer
 Pointer adalah suatu tipe data yang berisi alamat memori,
atau disebut juga sebagai penunjuk/pencatat alamat
memori.
 Deklarasi suatu pointer menggunakan notasi * dibelakang
tipe
tipe* namaPointer
contoh :
int* p;
 Operator awalan & didepan suatu variabel digunakan untuk
mengambil alamat dari suatu variabel.
p = &x; // pointer p mencatat alamat x
Perhatikan hasilnya !
main() {
int n=33;
cout<<"n = "<<n<<endl; // isi n
cout<<"&n = "<<&n<<endl; // alamat n
}
Referensi
 Referensi atau Acuan atau Alias adalah
suatu sinonim untuk variable lain.
Pendeklarasian referensi yaitu dengan
menggunakan operator “&” di belakang
suatu tipe data.
tipe& alias = var
contoh:
int& m=n;
Contoh penggunaan referensi
main(){
int n=3;
int& r=n; // r alias dari n
cout<<"n = "<<n<<" , r = "<<r<<endl; //3,3
--n;
cout<<"n = "<<n<<" , r = "<<r<<endl; //2,2
r*=2;
cout<<"n = "<<n<<" , r = "<<r<<endl; //4,4
cout<<"&n = "<<&n<<" , &r = "<<&r<<endl;
} // alamat juga sama
Pointer to Integer
 Gambar diatas menunjukkan bahwa sebuah lokasi dengan nama n
yang isinya bernilai 5 dengan tipe integer dicatat alamatnya oleh
sebuah pointer p.
 Pointer p sendiri menempati lokasi memori dengan alamat F005h
dengan isi yang dicatatnya adalah F001h (alamat dari n).
 Untuk mengakses nilai dari lokasi (variabel) yang ditunjuk oleh
pointer to integer dengan menggunakan operator * (bintang /
asterik) di depan variabel pointer
F001h
5
F005h
F001
int*
n
int
p
Pointer To Integer
main() {
int n=5;
int* p= &n;
cout<<"n = "<<n<<",&n = "<<&n<<endl; // 5 , F001h
cout<<"p = "<<p<<",&p = "<<&p<<endl; // F001h,F005h
}
main(){
int n=5;
int* p= &n;
cout<<"*p = "<<*p<<endl; // 5
} //Contoh nilai variabel yang ditunjuk pointer
main(){
int n=5;
int* p= &n;
int& r= *p;
cout<<"r = "<<r<<endl; // 5
} //Contoh nilai referensi dari variabel yang ditunjuk pointer
Operator new
 Ketika pointer sudah dideklarasikan seperti berikut :
float* p; // p adalah pointer untuk suatu lokasi memori bertipe float
maka pernyataan di atas hanya mengalokasikan memori untuk pointer itu
sendiri.
Nilai dari pointer nantinya berupa alamat memori, tetapi memori pada
alamat yang akan dicatat oleh suatu pointer belum dialokasikan.
 Perhatikan deklarasi kasus dibawah ini, p belum diinisialisasikan ( belum
mengalokasikan memori). Usaha untuk mengakses p mungkin akan
mengalami error.
*p=3. 1415; // ERROR : karena tidak ada alokasi memori untuk *p
 Jalan terbaik mencegah masalah ini adalah menginisialisasikan pointer
ketika dideklarasikan.
 Cara 1 : Mencatat lokasi yang sudah ada nama dan pemiliknya
 Cara 2 : Mencatat lokasi yang dialokasikan sesuai kebutuhan atau ketika
diperlukan)
Operator new
Cara 1 (Mencatat lokasi yang sudah ada nama dan pemiliknya)
float x = 3. 1415; // x berisi nilai 3. 1415
float* p = &x ; // p berisi alamat dari x
cout<<"p = "<<*p<<endl;
 Dalam kasus ini, mengakses *p tidak akan bermasalah karena memori yang digunakan untuk
menyimpan float 3. 14159 sudah otomatis dialokasikan ketika x dideklarasikan. p menunjuk pada
alokasi memori yang sama.
Cara 2 (Mencatat lokasi yang dialokasikan sesuai kebutuhan atau ketika diperlukan)
a) float* p;
b) p = new float; // alokasi memori untuk 1 data
// float yang langsung
// dicatat oleh p
c) *p = 3.1415;
?p
?
p F005h
3.1415
p F005h
F001hF001h F001h
F005hF005h
Operasi Pointer
 Operasi yang umum dilakukan terhadap pointer adalah operasi
Assignment.
 Misalkan ada 2 pointer p dan q, lalu dilakukan operasi assignment sbb :
p = q;
Artinya p akan mencatat alamat yang sama dengan yang dicatat oleh q;
 Gambaran keadaan pointer adalah sbb
3.1415
p F005h
F001h
F005h
3.1415
q F015h
F011h
F015h
3.1415
p F015h
F001h
F005h
3.1415
q F015h
F001h
F015h
Dealokasi
 Jika suatu tempat yang dicatat oleh suatu pointer ingin
dibebaskan maka haruslah dilakukan proses dealokasi
dengan tujuan lokasi tersebut bisa ditempati oleh data jenis
lain.
Perintah yang digunakan adalah :
delete(p)
 Dengan bentuk pengelolaan seperti ini maka dilakukan
pengelolaan memori secara dinamis yang artinya tidak
perlu mengalokasikan memori lebih awal terlebih dahulu
secara tetap (fixed).
 Jika diperlukan maka bisa dilakukan alokasi dan jika sudah
tidak diperlukan maka lokasi memori tersebut bisa
dilakukan dealokasi / dibebaskan
main(){
int n = 1;
int* p = &n;
int* q;
int* r;
int* s;
cout <<" n = "<< n << " &n = "<< &n << endl ;
cout <<" p = "<< p << " *p = "<< *p <<endl;
cout <<"&p = "<< &p <<" &(*p)= "<< &(*p)<<endl;
q = new int; // alokasi
*q = 2;
cout <<" q = "<< q <<" *q = "<< *q <<endl;
cout <<" &q = "<< &q <<" &(*q)= "<< &(*q)<<endl;
// delete(q) // apa yg terjadi ??
r = new int;
*r = 3;
cout <<" r = "<< r <<" *r = "<< *r <<endl;
cout <<" &r = "<< &r <<" &(*r) = "<< &(*r)<<endl;
s=q;
*s = 4;
cout <<" q = "<< q <<" *q = "<< *q <<endl;
cout <<" s = "<< s <<" *s = "<< *s <<endl;
cout <<" &q = "<< &q <<" &s = "<< &s<<endl;
}
Pointer to Record
 Pointer juga bisa digunakan untuk mencatat alamat dari suatu record / structure
Caranya : 1. Buat tipe nama record/structure
2. Buat nama alias tipe pointer yang menunjuk ke tipe nama record
3. Deklarasikan variable-variabel yang mengacu pada alias tipe pointer
tsb.
A001 Komeng 90
p
A002 Sule 85
q
Mendeklarasikan pointer to record
 Pengaksesan atribut suatu record melalui suatu pointer menggunakan operator “ ”
Contoh :
pNPM
struct mahasiswa {
char NPM[8] ;
char nama[20];
int nilai;
};
typedef mahasiswa* pointer; //pointer menunjuk address record mahasiswa
main(){
pointer p,q; //p,q : pointer to record
p=new mahasiswa; // alokasi melalui p
cin>>p->NPM;
cin>>p->nama;
cin>>p->nilai;
q=new mahasiswa; // alokasi melalui q
cin>>q->NPM;
cin>>q->nama;
cin>>q->nilai;
cout<<p->NPM<<p->nama<<p->nilai;
cout<<q->NPM<<q->nama<<q->nilai;
}
Singly Linked List
 Linked List atau List berkait adalah suatu bentuk tipe data
abstrak yang merupakan kumpulan dari data berbentuk
record dengan ciri setiap elemen data (record) memiliki
karakteristik:
 Ada informasi (info)
 Ada pengait (pointer) antara satu elemen dengan elemen yang
lain (next)
A B C
First
info next
Pendeklarasian tipe struktur list berkait
struct namaRecord {
tipe1 info1; // info
. . . . . . .
namaRecord* namaPointer; // namaPointer sbg pengait
};
typedef namaRecord* pointer; // membuat alias pointer
typedef pointer List; // membuat alias List
Contoh:
struct ElemtList {
char info;
ElemtList* next;
};
typedef ElemtList* pointer;
typedef pointer List;
Contoh bagaimana membentuk list
 P1->next = p2;
 P2->next=p3;
 First = p1;
A B C
First info next
p1 p2 p3
A B C
First
info next
p1 p2 p3
struct ElemtList {
char info; //info
ElemtList* next; // pointer next sbg pengait
};
typedef ElemtList* pointer; // membuat tipe alias pointer to record
typedef pointer List;
main(){
pointer p1, p2, p3;
List First;
cout<<"Input : "<<endl;
p1=new ElemtList;
cout<<"info = "; cin>>p1->info; // A
p1->next=NULL;
p2=new ElemtList;
cout<<"info = "; cin>>p2->info; // B
p2->next=NULL;
p3=new ElemtList;
cout<<"info = "; cin>>p3->info; // C
p3->next=NULL;
p1->next=p2; // kaitkan
p2->next=p3; // kaitkan
First = p1; // First menunjuk elemen pertama
cout<<"Output : "<<endl;
cout<<"info : "<<p1->info<<endl; // A
cout<<"info : "<<p2->info<<endl; // B
cout<<"info : "<<p1->next->info<<endl; // B
cout<<"info : "<<p3->info<<endl; // C
}

More Related Content

What's hot

What's hot (20)

8. Multi List (Struktur Data)
8. Multi List (Struktur Data)8. Multi List (Struktur Data)
8. Multi List (Struktur Data)
 
Algoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - AntrianAlgoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - Antrian
 
Error Handling - P 7 Teknik Kompilasi
Error Handling - P 7 Teknik Kompilasi Error Handling - P 7 Teknik Kompilasi
Error Handling - P 7 Teknik Kompilasi
 
Implementasi queue
Implementasi queueImplementasi queue
Implementasi queue
 
Resume praktikum 7__queue
Resume praktikum 7__queueResume praktikum 7__queue
Resume praktikum 7__queue
 
Algoritma dan Struktur Data - Pohon Biner
Algoritma dan Struktur Data - Pohon BinerAlgoritma dan Struktur Data - Pohon Biner
Algoritma dan Struktur Data - Pohon Biner
 
Linked List dalam Struktur Data
Linked List dalam Struktur DataLinked List dalam Struktur Data
Linked List dalam Struktur Data
 
HTML - Form
HTML - FormHTML - Form
HTML - Form
 
2. Array of Record (Struktur Data)
2. Array of Record (Struktur Data)2. Array of Record (Struktur Data)
2. Array of Record (Struktur Data)
 
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman Terstruktur1. Algoritma, Struktur Data dan Pemrograman Terstruktur
1. Algoritma, Struktur Data dan Pemrograman Terstruktur
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data Structure
 
Queue implementation
Queue implementationQueue implementation
Queue implementation
 
Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Modul PBO Bab-06 - Polimorfisme (Polymorphism)Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Modul PBO Bab-06 - Polimorfisme (Polymorphism)
 
Infix to Postfix Conversion Using Stack
Infix to Postfix Conversion Using StackInfix to Postfix Conversion Using Stack
Infix to Postfix Conversion Using Stack
 
linked lists in data structures
linked lists in data structureslinked lists in data structures
linked lists in data structures
 
Algoritma dan Struktur Data - Binary Search
Algoritma dan Struktur Data - Binary SearchAlgoritma dan Struktur Data - Binary Search
Algoritma dan Struktur Data - Binary Search
 
Jawaban Struktur data soal-latihan
Jawaban Struktur data soal-latihanJawaban Struktur data soal-latihan
Jawaban Struktur data soal-latihan
 
technik kompilasi
technik kompilasitechnik kompilasi
technik kompilasi
 
Resume praktikum 6 stack
Resume praktikum 6 stackResume praktikum 6 stack
Resume praktikum 6 stack
 
Tipe data abstract
Tipe data abstractTipe data abstract
Tipe data abstract
 

Similar to 3. Pointer dan List Berkait Singly (20)

Pointer c++
Pointer c++Pointer c++
Pointer c++
 
Pointer
PointerPointer
Pointer
 
Pointer
PointerPointer
Pointer
 
Pointer
PointerPointer
Pointer
 
Pointer
PointerPointer
Pointer
 
Pointer
PointerPointer
Pointer
 
Pointer.ppt
Pointer.pptPointer.ppt
Pointer.ppt
 
MATERI POINTER TKJ K13
MATERI POINTER TKJ K13MATERI POINTER TKJ K13
MATERI POINTER TKJ K13
 
6. pemrograman pointer
6. pemrograman pointer6. pemrograman pointer
6. pemrograman pointer
 
Topik 12 Pointer
Topik 12 PointerTopik 12 Pointer
Topik 12 Pointer
 
Structure and pointer
Structure and pointerStructure and pointer
Structure and pointer
 
Pertemuan5.ppt
Pertemuan5.pptPertemuan5.ppt
Pertemuan5.ppt
 
Pointer
PointerPointer
Pointer
 
Modul 2 strukdat
Modul 2 strukdatModul 2 strukdat
Modul 2 strukdat
 
Modul 2 strukdat
Modul 2 strukdatModul 2 strukdat
Modul 2 strukdat
 
Algoritma&Pemrograman C++ Pertemuan 11
Algoritma&Pemrograman C++ Pertemuan 11Algoritma&Pemrograman C++ Pertemuan 11
Algoritma&Pemrograman C++ Pertemuan 11
 
Spt3102 fungsi(0910)
Spt3102 fungsi(0910)Spt3102 fungsi(0910)
Spt3102 fungsi(0910)
 
Ix struktur pointer
Ix struktur pointerIx struktur pointer
Ix struktur pointer
 
Materi 3&4 prosedur
Materi 3&4   prosedurMateri 3&4   prosedur
Materi 3&4 prosedur
 
Pertemuan6.ppt
Pertemuan6.pptPertemuan6.ppt
Pertemuan6.ppt
 

More from Kelinci Coklat

More from Kelinci Coklat (20)

Bab 7 integrasi numerik
Bab 7 integrasi numerikBab 7 integrasi numerik
Bab 7 integrasi numerik
 
Bab 6 turunan numerik
Bab 6 turunan numerikBab 6 turunan numerik
Bab 6 turunan numerik
 
Bab 5 interpolasi newton lanjutan
Bab 5 interpolasi newton lanjutanBab 5 interpolasi newton lanjutan
Bab 5 interpolasi newton lanjutan
 
Bab 5 interpolasi
Bab 5 interpolasiBab 5 interpolasi
Bab 5 interpolasi
 
Bab 4 sistem persamaan linear
Bab 4 sistem persamaan linearBab 4 sistem persamaan linear
Bab 4 sistem persamaan linear
 
Bab 3 penyelesaian persamaan tak linear
Bab 3 penyelesaian persamaan tak linearBab 3 penyelesaian persamaan tak linear
Bab 3 penyelesaian persamaan tak linear
 
Bab 2 perhitungan galat
Bab 2  perhitungan galatBab 2  perhitungan galat
Bab 2 perhitungan galat
 
Bab 1 pendahuluan
Bab 1 pendahuluanBab 1 pendahuluan
Bab 1 pendahuluan
 
Bab 8 persamaan differensial-biasa
Bab 8 persamaan differensial-biasaBab 8 persamaan differensial-biasa
Bab 8 persamaan differensial-biasa
 
Anuitas Biasa (Matematika Keuangan)
Anuitas Biasa (Matematika Keuangan)Anuitas Biasa (Matematika Keuangan)
Anuitas Biasa (Matematika Keuangan)
 
Bunga Majemuk (Matematika Keuangan)
Bunga Majemuk (Matematika Keuangan)Bunga Majemuk (Matematika Keuangan)
Bunga Majemuk (Matematika Keuangan)
 
Bunga Sederhana dan Tingkat Diskon (Matematika Keuangan)
Bunga Sederhana dan Tingkat Diskon (Matematika Keuangan)Bunga Sederhana dan Tingkat Diskon (Matematika Keuangan)
Bunga Sederhana dan Tingkat Diskon (Matematika Keuangan)
 
Anuitas Tumbuh dan Variabel (Matematika Keuangan)
Anuitas Tumbuh dan Variabel (Matematika Keuangan)Anuitas Tumbuh dan Variabel (Matematika Keuangan)
Anuitas Tumbuh dan Variabel (Matematika Keuangan)
 
Anuitas di Muka dan Ditunda (Matematika Keuangan)
Anuitas di Muka dan Ditunda (Matematika Keuangan)Anuitas di Muka dan Ditunda (Matematika Keuangan)
Anuitas di Muka dan Ditunda (Matematika Keuangan)
 
Amortisasi dan Penyusutan (Matematika Keuangan)
Amortisasi dan Penyusutan (Matematika Keuangan)Amortisasi dan Penyusutan (Matematika Keuangan)
Amortisasi dan Penyusutan (Matematika Keuangan)
 
Obligasi (Matematika Keuangan)
Obligasi (Matematika Keuangan)Obligasi (Matematika Keuangan)
Obligasi (Matematika Keuangan)
 
Saham, Yield, dan Return (Matematika Keuangan)
Saham, Yield, dan Return (Matematika Keuangan)Saham, Yield, dan Return (Matematika Keuangan)
Saham, Yield, dan Return (Matematika Keuangan)
 
Perdagangan Margin (Matematika Keuangan)
Perdagangan Margin (Matematika Keuangan)Perdagangan Margin (Matematika Keuangan)
Perdagangan Margin (Matematika Keuangan)
 
Integral Garis
Integral GarisIntegral Garis
Integral Garis
 
Vektor dan Medan Vektor
Vektor dan Medan VektorVektor dan Medan Vektor
Vektor dan Medan Vektor
 

Recently uploaded

HAK DAN KEWAJIBAN WARGA NEGARA ppkn i.ppt
HAK DAN KEWAJIBAN WARGA NEGARA ppkn i.pptHAK DAN KEWAJIBAN WARGA NEGARA ppkn i.ppt
HAK DAN KEWAJIBAN WARGA NEGARA ppkn i.ppt
nabilafarahdiba95
 
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdfAksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
JarzaniIsmail
 

Recently uploaded (20)

Aksi Nyata PMM Topik Refleksi Diri (1).pdf
Aksi Nyata PMM Topik Refleksi Diri (1).pdfAksi Nyata PMM Topik Refleksi Diri (1).pdf
Aksi Nyata PMM Topik Refleksi Diri (1).pdf
 
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdfSalinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
 
Intellectual Discourse Business in Islamic Perspective - Mej Dr Mohd Adib Abd...
Intellectual Discourse Business in Islamic Perspective - Mej Dr Mohd Adib Abd...Intellectual Discourse Business in Islamic Perspective - Mej Dr Mohd Adib Abd...
Intellectual Discourse Business in Islamic Perspective - Mej Dr Mohd Adib Abd...
 
KELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKA
KELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKAKELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKA
KELAS 10 PERUBAHAN LINGKUNGAN SMA KURIKULUM MERDEKA
 
PELAKSANAAN + Link2 Materi BimTek _PTK 007 Rev-5 Thn 2023 (PENGADAAN) & Perhi...
PELAKSANAAN + Link2 Materi BimTek _PTK 007 Rev-5 Thn 2023 (PENGADAAN) & Perhi...PELAKSANAAN + Link2 Materi BimTek _PTK 007 Rev-5 Thn 2023 (PENGADAAN) & Perhi...
PELAKSANAAN + Link2 Materi BimTek _PTK 007 Rev-5 Thn 2023 (PENGADAAN) & Perhi...
 
HAK DAN KEWAJIBAN WARGA NEGARA ppkn i.ppt
HAK DAN KEWAJIBAN WARGA NEGARA ppkn i.pptHAK DAN KEWAJIBAN WARGA NEGARA ppkn i.ppt
HAK DAN KEWAJIBAN WARGA NEGARA ppkn i.ppt
 
Kanvas BAGJA prakarsa perubahan Ahyar.pdf
Kanvas BAGJA prakarsa perubahan Ahyar.pdfKanvas BAGJA prakarsa perubahan Ahyar.pdf
Kanvas BAGJA prakarsa perubahan Ahyar.pdf
 
Regresi Linear Kelompok 1 XI-10 revisi (1).pptx
Regresi Linear Kelompok 1 XI-10 revisi (1).pptxRegresi Linear Kelompok 1 XI-10 revisi (1).pptx
Regresi Linear Kelompok 1 XI-10 revisi (1).pptx
 
PPT MODUL 6 DAN 7 PDGK4105 KELOMPOK.pptx
PPT MODUL 6 DAN 7 PDGK4105 KELOMPOK.pptxPPT MODUL 6 DAN 7 PDGK4105 KELOMPOK.pptx
PPT MODUL 6 DAN 7 PDGK4105 KELOMPOK.pptx
 
PPT Mean Median Modus data tunggal .pptx
PPT Mean Median Modus data tunggal .pptxPPT Mean Median Modus data tunggal .pptx
PPT Mean Median Modus data tunggal .pptx
 
power point bahasa indonesia "Karya Ilmiah"
power point bahasa indonesia "Karya Ilmiah"power point bahasa indonesia "Karya Ilmiah"
power point bahasa indonesia "Karya Ilmiah"
 
Materi Sosialisasi US 2024 Sekolah Dasar pptx
Materi Sosialisasi US 2024 Sekolah Dasar pptxMateri Sosialisasi US 2024 Sekolah Dasar pptx
Materi Sosialisasi US 2024 Sekolah Dasar pptx
 
MODUL AJAR IPAS KELAS 6 KURIKULUM MERDEKA
MODUL AJAR IPAS KELAS 6 KURIKULUM MERDEKAMODUL AJAR IPAS KELAS 6 KURIKULUM MERDEKA
MODUL AJAR IPAS KELAS 6 KURIKULUM MERDEKA
 
Stoikiometri kelas 10 kurikulum Merdeka.ppt
Stoikiometri kelas 10 kurikulum Merdeka.pptStoikiometri kelas 10 kurikulum Merdeka.ppt
Stoikiometri kelas 10 kurikulum Merdeka.ppt
 
DEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptx
DEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptxDEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptx
DEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptx
 
Tim Yang Lolos Pendanaan Hibah Kepedulian pada Masyarakat UI 2024
Tim Yang Lolos Pendanaan Hibah Kepedulian pada Masyarakat  UI 2024Tim Yang Lolos Pendanaan Hibah Kepedulian pada Masyarakat  UI 2024
Tim Yang Lolos Pendanaan Hibah Kepedulian pada Masyarakat UI 2024
 
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdfAksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
 
TEKNIK MENJAWAB RUMUSAN SPM 2022 - UNTUK MURID.pptx
TEKNIK MENJAWAB RUMUSAN SPM 2022 - UNTUK MURID.pptxTEKNIK MENJAWAB RUMUSAN SPM 2022 - UNTUK MURID.pptx
TEKNIK MENJAWAB RUMUSAN SPM 2022 - UNTUK MURID.pptx
 
Refleksi Mandiri Modul 1.3 - KANVAS BAGJA.pptx.pptx
Refleksi Mandiri Modul 1.3 - KANVAS BAGJA.pptx.pptxRefleksi Mandiri Modul 1.3 - KANVAS BAGJA.pptx.pptx
Refleksi Mandiri Modul 1.3 - KANVAS BAGJA.pptx.pptx
 
Bab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptx
Bab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptxBab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptx
Bab 4 Persatuan dan Kesatuan di Lingkup Wilayah Kabupaten dan Kota.pptx
 

3. Pointer dan List Berkait Singly

  • 1. Pointer dan List Berkait Singly Akmal, S.Si, MT Erick Paulus, M.Kom Mata Kuliah : Struktur Data
  • 2. Tujuan  Mahasiswa dapat menjelaskan pengertian pointer dan bisa menerangkan operasi dasar menggunakan pointer dengan benar  Mahasiswa dapat : Mengoperasikan dan membuat program dari semua algoritma primitive list singly (insert, delete, traversal dan searching) dengan benar.
  • 3. Pokok Bahasan  Pengertian Pointer  Deklarasi Pointer to Integer dan Alokasi memori  Operasi Pada Pointer  Pointer to Record  Pengertian List berkait  Operasi Traversal List  Menambah di depan, belakang, dan tengah  Menghapus di depan, belakang dan tengah  Searching
  • 4. Pointer  Pointer adalah suatu tipe data yang berisi alamat memori, atau disebut juga sebagai penunjuk/pencatat alamat memori.  Deklarasi suatu pointer menggunakan notasi * dibelakang tipe tipe* namaPointer contoh : int* p;  Operator awalan & didepan suatu variabel digunakan untuk mengambil alamat dari suatu variabel. p = &x; // pointer p mencatat alamat x
  • 5. Perhatikan hasilnya ! main() { int n=33; cout<<"n = "<<n<<endl; // isi n cout<<"&n = "<<&n<<endl; // alamat n }
  • 6. Referensi  Referensi atau Acuan atau Alias adalah suatu sinonim untuk variable lain. Pendeklarasian referensi yaitu dengan menggunakan operator “&” di belakang suatu tipe data. tipe& alias = var contoh: int& m=n;
  • 7. Contoh penggunaan referensi main(){ int n=3; int& r=n; // r alias dari n cout<<"n = "<<n<<" , r = "<<r<<endl; //3,3 --n; cout<<"n = "<<n<<" , r = "<<r<<endl; //2,2 r*=2; cout<<"n = "<<n<<" , r = "<<r<<endl; //4,4 cout<<"&n = "<<&n<<" , &r = "<<&r<<endl; } // alamat juga sama
  • 8. Pointer to Integer  Gambar diatas menunjukkan bahwa sebuah lokasi dengan nama n yang isinya bernilai 5 dengan tipe integer dicatat alamatnya oleh sebuah pointer p.  Pointer p sendiri menempati lokasi memori dengan alamat F005h dengan isi yang dicatatnya adalah F001h (alamat dari n).  Untuk mengakses nilai dari lokasi (variabel) yang ditunjuk oleh pointer to integer dengan menggunakan operator * (bintang / asterik) di depan variabel pointer F001h 5 F005h F001 int* n int p
  • 9. Pointer To Integer main() { int n=5; int* p= &n; cout<<"n = "<<n<<",&n = "<<&n<<endl; // 5 , F001h cout<<"p = "<<p<<",&p = "<<&p<<endl; // F001h,F005h } main(){ int n=5; int* p= &n; cout<<"*p = "<<*p<<endl; // 5 } //Contoh nilai variabel yang ditunjuk pointer main(){ int n=5; int* p= &n; int& r= *p; cout<<"r = "<<r<<endl; // 5 } //Contoh nilai referensi dari variabel yang ditunjuk pointer
  • 10. Operator new  Ketika pointer sudah dideklarasikan seperti berikut : float* p; // p adalah pointer untuk suatu lokasi memori bertipe float maka pernyataan di atas hanya mengalokasikan memori untuk pointer itu sendiri. Nilai dari pointer nantinya berupa alamat memori, tetapi memori pada alamat yang akan dicatat oleh suatu pointer belum dialokasikan.  Perhatikan deklarasi kasus dibawah ini, p belum diinisialisasikan ( belum mengalokasikan memori). Usaha untuk mengakses p mungkin akan mengalami error. *p=3. 1415; // ERROR : karena tidak ada alokasi memori untuk *p  Jalan terbaik mencegah masalah ini adalah menginisialisasikan pointer ketika dideklarasikan.  Cara 1 : Mencatat lokasi yang sudah ada nama dan pemiliknya  Cara 2 : Mencatat lokasi yang dialokasikan sesuai kebutuhan atau ketika diperlukan)
  • 11. Operator new Cara 1 (Mencatat lokasi yang sudah ada nama dan pemiliknya) float x = 3. 1415; // x berisi nilai 3. 1415 float* p = &x ; // p berisi alamat dari x cout<<"p = "<<*p<<endl;  Dalam kasus ini, mengakses *p tidak akan bermasalah karena memori yang digunakan untuk menyimpan float 3. 14159 sudah otomatis dialokasikan ketika x dideklarasikan. p menunjuk pada alokasi memori yang sama. Cara 2 (Mencatat lokasi yang dialokasikan sesuai kebutuhan atau ketika diperlukan) a) float* p; b) p = new float; // alokasi memori untuk 1 data // float yang langsung // dicatat oleh p c) *p = 3.1415; ?p ? p F005h 3.1415 p F005h F001hF001h F001h F005hF005h
  • 12. Operasi Pointer  Operasi yang umum dilakukan terhadap pointer adalah operasi Assignment.  Misalkan ada 2 pointer p dan q, lalu dilakukan operasi assignment sbb : p = q; Artinya p akan mencatat alamat yang sama dengan yang dicatat oleh q;  Gambaran keadaan pointer adalah sbb 3.1415 p F005h F001h F005h 3.1415 q F015h F011h F015h 3.1415 p F015h F001h F005h 3.1415 q F015h F001h F015h
  • 13. Dealokasi  Jika suatu tempat yang dicatat oleh suatu pointer ingin dibebaskan maka haruslah dilakukan proses dealokasi dengan tujuan lokasi tersebut bisa ditempati oleh data jenis lain. Perintah yang digunakan adalah : delete(p)  Dengan bentuk pengelolaan seperti ini maka dilakukan pengelolaan memori secara dinamis yang artinya tidak perlu mengalokasikan memori lebih awal terlebih dahulu secara tetap (fixed).  Jika diperlukan maka bisa dilakukan alokasi dan jika sudah tidak diperlukan maka lokasi memori tersebut bisa dilakukan dealokasi / dibebaskan
  • 14. main(){ int n = 1; int* p = &n; int* q; int* r; int* s; cout <<" n = "<< n << " &n = "<< &n << endl ; cout <<" p = "<< p << " *p = "<< *p <<endl; cout <<"&p = "<< &p <<" &(*p)= "<< &(*p)<<endl; q = new int; // alokasi *q = 2; cout <<" q = "<< q <<" *q = "<< *q <<endl; cout <<" &q = "<< &q <<" &(*q)= "<< &(*q)<<endl; // delete(q) // apa yg terjadi ?? r = new int; *r = 3; cout <<" r = "<< r <<" *r = "<< *r <<endl; cout <<" &r = "<< &r <<" &(*r) = "<< &(*r)<<endl; s=q; *s = 4; cout <<" q = "<< q <<" *q = "<< *q <<endl; cout <<" s = "<< s <<" *s = "<< *s <<endl; cout <<" &q = "<< &q <<" &s = "<< &s<<endl; }
  • 15. Pointer to Record  Pointer juga bisa digunakan untuk mencatat alamat dari suatu record / structure Caranya : 1. Buat tipe nama record/structure 2. Buat nama alias tipe pointer yang menunjuk ke tipe nama record 3. Deklarasikan variable-variabel yang mengacu pada alias tipe pointer tsb. A001 Komeng 90 p A002 Sule 85 q
  • 16. Mendeklarasikan pointer to record  Pengaksesan atribut suatu record melalui suatu pointer menggunakan operator “ ” Contoh : pNPM struct mahasiswa { char NPM[8] ; char nama[20]; int nilai; }; typedef mahasiswa* pointer; //pointer menunjuk address record mahasiswa main(){ pointer p,q; //p,q : pointer to record p=new mahasiswa; // alokasi melalui p cin>>p->NPM; cin>>p->nama; cin>>p->nilai; q=new mahasiswa; // alokasi melalui q cin>>q->NPM; cin>>q->nama; cin>>q->nilai; cout<<p->NPM<<p->nama<<p->nilai; cout<<q->NPM<<q->nama<<q->nilai; }
  • 17. Singly Linked List  Linked List atau List berkait adalah suatu bentuk tipe data abstrak yang merupakan kumpulan dari data berbentuk record dengan ciri setiap elemen data (record) memiliki karakteristik:  Ada informasi (info)  Ada pengait (pointer) antara satu elemen dengan elemen yang lain (next) A B C First info next
  • 18. Pendeklarasian tipe struktur list berkait struct namaRecord { tipe1 info1; // info . . . . . . . namaRecord* namaPointer; // namaPointer sbg pengait }; typedef namaRecord* pointer; // membuat alias pointer typedef pointer List; // membuat alias List Contoh: struct ElemtList { char info; ElemtList* next; }; typedef ElemtList* pointer; typedef pointer List;
  • 19. Contoh bagaimana membentuk list  P1->next = p2;  P2->next=p3;  First = p1; A B C First info next p1 p2 p3 A B C First info next p1 p2 p3
  • 20. struct ElemtList { char info; //info ElemtList* next; // pointer next sbg pengait }; typedef ElemtList* pointer; // membuat tipe alias pointer to record typedef pointer List; main(){ pointer p1, p2, p3; List First; cout<<"Input : "<<endl; p1=new ElemtList; cout<<"info = "; cin>>p1->info; // A p1->next=NULL; p2=new ElemtList; cout<<"info = "; cin>>p2->info; // B p2->next=NULL; p3=new ElemtList; cout<<"info = "; cin>>p3->info; // C p3->next=NULL; p1->next=p2; // kaitkan p2->next=p3; // kaitkan First = p1; // First menunjuk elemen pertama cout<<"Output : "<<endl; cout<<"info : "<<p1->info<<endl; // A cout<<"info : "<<p2->info<<endl; // B cout<<"info : "<<p1->next->info<<endl; // B cout<<"info : "<<p3->info<<endl; // C }