Dokumen tersebut membahas tentang implementasi stack menggunakan linked list dalam bahasa C++. Terdapat penjelasan tentang konsep dasar linked list dan node. Program tersebut mendemonstrasikan cara membuat, menambah, menampilkan, dan menghapus data pada stack menggunakan linked list dengan menggunakan pointer dan struct.
1. Algoritma dan Struktur Data
Stack with Linked List
Anggota Kelompok:
1.
Desenia Mulyani Harja
(F1D012014)
2.
Riris Parahita
(F1D012074)
Program Studi Teknik Informatika
Fakultas Teknik
UNIVERSITAS
2013
MATARAM
2. Stack with Linked List
Dasar Teori
Array merupakan variable yang bersifat statis (ukuran dan urutannya sudah pasti).
Selain itu, ruang memori yang dipakai olehnya tidak dapat dihapus bila array tersebut
sudah tidak digunakan lagi pada saat program dijalankan. Untuk memecahkan masalah
di atas, kita dapat menggunakan variabel pointer. Tipe data pointer bersifat dinamis,
variabel akan dialokasikan hanya pada saat dibutuhkan dan sesudah tidak dibutuhkan
dapat direlokasikan kembali. Setiap ingin menambahkan data, Anda selalu menggunakan
variabel pointer yang baru, akibatnya Anda akan membutuhkan banyak sekali pointer.
Oleh karena itu, ada baiknya jika Anda hanya menggunakan satu variabel pointer saja
untuk menyimpan banyak data dengan metode yang kita sebut Linked List. Linked list
adalah sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang
setiap elemennya terdiri dari dua bagian. Linked adalah koleksi obyek heterogen dengan sifat setiap obyek
(kecuali obyek terakhir) mempunyai penerus dan setiap obyek (kecuali obyek pertama) mempunyai
pendahulu. Salah satu penggunaan pointer adalah untuk membuat linked list atau senarai
berantai. Linked list sendiri dapat diartikan sebagai sekumpulan komponen yang saling
berhubungan (berantai) dengan bantuan pointer. Perhatikan ilustrasi berikut untuk lebih
jelasnya.
Masing-masing komponen disebut sebagai simpul atau node. Setiap simpul terbagi
menjadi dua bagian, yaitu bagian data dan bagian penyambung. Bagian data berisi data
yang akan disimpan dan diolah. Sedangkan bagian penyambung berisi alamat simpul
berikutnya.
Inti dari linked list adalah proses (tambah, edit, hapus) dari gerbong/node dan bagaimana
rnenyambungkan antar gerbong /node tersebut.
ARRAY VS LINKED LIST
ARRAY
Statis
Penambahan / penghapusan data terbatas
Random access
Penghapusan array tidak mungkin
LINKED LIST
Dinamis
Penambahan / penghapusan data tidak terbatas
Sequential access
Penghapusan linked list mudah
3. 1. Pembuatan Single Linked List
Deklarasi node dibuat dari struct berikut ini:
Penjelasan:
- Pembuatan struct bernama TNode yang berisi
integer dan field next yang bertipe pointer dari TNode.
2
- Setelah pembuatan struct, buat
yang berguna sebagai kepala linked list.
yang
variabel
haed
field,
yaitu
bertipe
field
pointer
data
bertipe
dari
TNode
2. Pembentukan Node Baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi
memorinya, kemudian node tersebut diisi data dan pointer next-nya ditunjuk ke NULL
4. 3. Single Linked List Menggunakan Head
-
Dibutuhkan satu buah variabel pointer : head
Head akan selalu menunjuk pada node pertama
Deklarasi pointer penunjuk kepala Single Linked List, manipulasi linked list tidak bisa
dilakukan langsung ke node yang dituju, melainkan harus menggunakan suatu pointer
penunjuk ke node pertama dalam linked list (dalam hal ini adalah head). Deklarasinya
sebagai berikut:
TNode *head;
Fungsi untuk mengetahui kosong tidaknya Single Linked List jika pointer head tidak
menunjuk pada suatu node maka kosong.
5. 4. Penambahan Data
Penambahan node baru akan dikaitan di node paling depan, namun
pertama kali (data masih kosong), maka penambahan data dilakukan dengan
ditunjukkan ke node baru tersebut. Pada prinsipnya adalah mengkaitkan
dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga
tetap selalu menjadi data terdepan.
ilustrasi:
pada
cara
node
head
saat
head
baru
akan
7. Penjelasan :
- Fungsi di atas digunakan untuk menampilkan semua isi list, di
ditelusuri
satu-persatu
dari
awal
node
sampai
akhir
node.
dilakukan
dengan
menggunakan
suatu
pointer
bantu,
karena
pointer head yang menjadi tanda awal list tidak boleh berubah/berganti posisi.
mana linked list
Penelusuran
ini
pada
prinsipnya
- Penelusuran dilakukan terus sampai node terakhir ditemukan menunjuk ke nilai
NULL. Jika tidak NULL, maka node bantu akan berpindah ke node selanjutnya
dan membaca isi datanya dengan menggunakan field next sehingga dapat saling
berkaitan.
- Jika head masih NULL berarti data masih kosong.
6. Penghapusan Data
Fungsi di atas akan menghapus data teratas (pertama) yang ditunjuk oleh head pada
linked list.
Penjelasan :
-
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh
pointer, maka harus dilakukan penggunakan suatu pointer lain yang digunakan
untuk menunjuk node yang akan dihapus, misalnya pointer hapus dan barulah
kemudian menghapus pointer hapus dengan menggunakan perintah delete.
8. -
Sebelum data terdepan dihapus, head harus ditunjukkan ke
terlebih dahulu agar list tidak putus, sehingga node setelah
menjadi head baru (data terdepan yang baru).
-
Jika head masih NULL maka berarti data masih kosong.
node sesudahnya
head lama akan
9. Contoh Sourcecode Stack with Linked List :
#include <conio.h>
#include <iostream>
using namespace std;
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 databaru)
{
TNode *baru;
baru= new TNode;
baru->data =databaru;
baru->next=NULL;
if (isempty()==1)
{
head=baru;
head->next=NULL;
}
else
{
baru->next=head;
head=baru;
}
cout<<"Data Masukn"<<endl;
}
void tampil()
{
TNode *bantu;
bantu=head;
if(isempty()==0)
{
while (bantu!=NULL)
{
13. Analisa Program :
Program di atas menggunakan visual c++ dengan header iostream dan conio.h yang dimana
terdapat fungsi cout dan cin. Selain itu, menggunakan using namepace std; untuk menjalankan
cout dan cin pada visual c++. Dalam program visual c++ tersebut terdapat node yang berfungsi untuk
menyimpan data. Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati
alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field. Pada sintaks di
atas juga terdapat Fungsi IsEmpty yaitu untuk memeriksa apakah stack masih kosong dengan cara
memeriksa top of stack, jika masih -1 maka berarti stack masih kosong. Next pada sintaks di atas
merupakan address (alamat) dari elemen berikutnya (suksesor) dengan demikian jika didefinisikan first
adalah alamat elemen pertama list, maka elemen berikutnya dapat di akses secara suksesif dari field next
elemen tersebut. head->next=NULL; artinya head tersebut didefinisikan ke next yang berisi NULL.
Program tersebut menggunakan pointer untuk menuju ke alamat yang akan dituju.