Anda di halaman 1dari 9

MAKALAH SINGLE LINKED LIST

1. Teori Dasar

Pengertian Linked list sekumpulan elemen bertipe sama, yang mempunyai keterurutan
tertentu, yang setiap elemennya terdiri dari dua bagian. Struktur berupa rangkaian elemen
saling berkait dimana setiap elemen dihubungkan elemen lain melalui pointer. Pointer
adalah alamat elemen. Penggunaan pointer untuk mengacu elemen berakibat elemen-
elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di memori.
Bentuk Umum : Infotype sebuah tipe terdefinisi yang menyimpan informasi sebuah
elemen list. Next address dari elemen berikutnya (suksesor) Jika L adalah list, dan P
adalah address, maka alamat elemen pertama list L dapat diacu dengan notasi. Sebelum
digunakan harus dideklarasikan terlebih dahulu. Elemen yang diacu oleh P dapat
dikonsultasi informasinya dengan notasi.
Beberapa Definisi :
1. List l adalah list kosong, jika First(L) = Nil
2. Elemen terakhir dikenali, dengan salah satu cara adalah karena Next(Last) = Nil
Nil adalah pengganti Null, perubahan ini dituliskan dengan #define Nil Null

a. Single Linked List

Pada gambar di atas tampak bahwa sebuah data terletak pada sebuah lokasi memori
area. Tempat yang disediakan pada satu area memori tertentu untuk menyimpan data
dikenal dengan sebutan node atau simpul. Setiap node memiliki pointer yang menunjuk ke
simpul berikutnya sehingga terbentuk satu untaian, dengan demikian hanya diperlukan
sebuah variabel pointer. Susunan berupa untaian semacam ini disebut Single Linked List
(NULL memilik nilai khusus yang artinya tidak menunjuk ke mana-mana. Biasanya
Linked List pada titik akhirnya akan menunjuk ke NULL).
Pembuatan Single Linked List dapat menggunakan 2 metode:
LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)
FIFO (First In First Out), aplikasinya : Queue (Antrean)
b. Double Linked List

Salah satu kelemahan single linked list adalah pointer (penunjuk) hanya dapat
bergerak satu arah saja, maju/mundur, atau kanan/kiri sehingga pencarian data pada single
linked list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan
tersebut, dapat menggunakan metode double linked list. Linked list ini dikenal dengan
nama Linked list berpointer Ganda atau Double Linked List.

c. Circular Double Linked List

Merupakan double linked list yang simpul terakhirnya menunjuk ke simpul


terakhirnya menunjuk ke simpul awalnya menunjuk ke simpul akhir sehingga membentuk
suatu lingkaran.

2. Operasi-Operasi yang ada pada Linked List


a. Insert
Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list.
b. IsEmpty
Fungsi ini menentukan apakah linked list kosong atau tidak.
c. Find First
Fungsi ini mencari elemen pertama dari linked list
d. Find Next
Fungsi ini mencari elemen sesudah elemen yang ditunjuk now
e. Retrieve
Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu
dikembalikan oleh fungsi.
f. Update
Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu
g. Delete Now
Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah
elemen pertama dari linked list (head), head akan berpindah ke elemen berikut.
h. Delete Head
Fungsi ini menghapus elemen yang ditunjuk head. Head berpindah ke elemen
sesudahnya.
i. Clear
Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda
ingin mengakhiri program yang menggunakan linked list. Jika anda melakukannya,
data-data yang dialokasikan ke memori pada program sebelumnya akan tetap tertinggal
di dalam memori.
j. Konstruktor
ini membuat sebuah linked list yang baru dan masih kosong
Gambar Operasi Dasar Linked List
a. Metode insertAtFront menempatkan sebuah node baru di bagian depan list.

b. insertAtBack
Metode insertAtBack menempatkan sebuah node baru di bagian belakang list.

c. removeFromFront
Metode removeFromFront memindahkan node pertama list dan mengembalikan
(memberikan) sebuah referensi untuk memindahkan data. Metode ini
melakukan EmptyListException jika list dalam keadaan kosong ketika program
memanggil metode ini.

e. removeFromBack
Metode removeFromBack memindahkan node terakhir list dan mengembalikan
(memberikan) sebuah referensi untuk memindahkan data. Metode ini
melakukan EmptyListException jika list dalam keadaan kosong ketika program
memanggil metode ini.
3. Aplikasi

4. Contoh Kasus dan Pembahasan Script

Studi kasus yang kami gunakan adalah, kasus pada pencatatan menu makanan atau
minuman pada setiap nomor meja di sebuah rumah makan. Alur dari kasus tersebut dapat di
lihat pada gambar di bawah.

Kasir mencatat nomor meja dan


Pembeli datang menu makanan / minuman Selesai
pelanggan

Kasir akan mencatat nomor meja dan menu makanan / minuman yang dipesan oleh
pembeli. Di sini kami menggunakan konsep Single Linked List untuk penyelesaiannya.
Berikut program penyelesaian kasus di atas dengan bahasa C.
Source Code :
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "string"
using namespace std;

struct Pesanan {
std::string Menu;
int Jumlah;
Pesanan *next;
};
int main()
{
int jmlh = 0, i;
char t;
char no_meja[5];

struct Pesanan *tmp = new Pesanan;


struct Pesanan *ujung;
cout << "Masukkan NO Meja\t: "; cin >> no_meja;
cout << "---------------------------- \n";
do {
ujung = new Pesanan;
std::cin.ignore();
std::cout << "Masukkan Menu Pesanan\t: "; std::getline(std::cin, ujung->Menu) ;
std::cout << "Masukkan Jumlah Pesanan\t: "; cin >> ujung->Jumlah;
if (jmlh == 0)
ujung->next = NULL;
else
ujung->next = tmp;
tmp = ujung;
cout << "Input menu makanan ? (y/t)"; cin >> t ;
if (tolower(t) == 'y') {
jmlh++;
continue;
}

} while (tolower(t) != 't' );


cout << "---------------------------- \n";
cout << "No.Meja\t : " << no_meja << "\n";
cout << "============================ \n";
cout << "Kode\t Menu\t \n";
cout << "============================ \n";

for ( i = 0; i < jmlh+1; i++)


{
cout << ujung->Menu << "\t " << ujung->Jumlah << " \n" ;
ujung = ujung->next;
}
_getch();
return 0;
}
Hasil Akhir :

Pembahasan :
Input :
Nomor Meja (Sekali).
Menu Pesanan (Berulang-ulang sesuai kebutuhan).
Jumlah Pesanan (Berulang-ulang sesuai kebutuhan).
Output : Berupa data-data pesanan yang sudah dipesan sebelumnya.
Script :
Pembuatan NODE
struct Pesanan {
std::string Menu;
int Jumlah;
Pesanan *next; //pointer
};

Inisialiasi variabel
int jmlh = 0, i; // variabel untuk pengulangan output
char t; // variabel untuk pengulangan input
char no_meja[5]; //variabel untuk nomor meja

struct Pesanan *tmp = new Pesanan; // dituliskan disini agar data


tidak hilang saat di fungsi do while
struct Pesanan *ujung; // dituliskan disini agar data dapat
dipanggil fungsi output di luar do while

Input Nomor Meja


cout << "Masukkan NO Meja\t: "; cin >> no_meja; // input nomor meja
cout << "---------------------------- \n";
Pengulangan code jika user masih ingin menginput menu.
do { //pengulangan
ujung = new Pesanan; // inisialiasi node Pesanan, dituliskan
disini agar data sebelumnya hilang
std::cin.ignore(); // mengabaikan \n pada std::getline
dibawah
std::cout << "Masukkan Menu Pesanan\t: ";
std::getline(std::cin, ujung->Menu) ; // input nama makanan
std::cout << "Masukkan Jumlah Pesanan\t: "; cin >> ujung-
>Jumlah; // input jumlah makanan
if (jmlh == 0) // jika jumlah masih 0
ujung->next = NULL; // maka next ber isi null
else // jika tidak berisi 0
ujung->next = tmp; // maka next ber isi data
sebelumnya
tmp = ujung; // node tmp di isikan node ujung, agar data
tidak hilang
cout << "Input menu makanan ? (y/t)"; cin >> t ;// promt
pilihan untuk mengulang input pesanan
if (tolower(t) == 'y') { // jika input ulang
jmlh++; // menambah jumlah dengan 1
continue; // mengulangi fungsi do
}

} while (tolower(t) != 't' ); // berhenti jika variabel t


berisi t, berarti tidak input menu ulang

Inisialisasi NODE yang akan digunakan


ujung = new Pesanan; // inisialiasi node Pesanan, dituliskan disini
agar data sebelumnya hilang

Input Menu Pesanan


std::cin.ignore(); // mengabaikan \n pada std::getline dibawah
std::cout << "Masukkan Menu Pesanan\t: ";
std::getline(std::cin, ujung->Menu) ; // input nama makanan
std::cout << "Masukkan Jumlah Pesanan\t: "; cin >>
ujung->Jumlah; // input jumlah makanan

Filte untuk penempatan NODE


if (jmlh == 0) // jika jumlah masih 0
ujung->next = NULL; // maka next ber
isi null
else // jika tidak berisi 0
ujung->next = tmp; // maka next ber isi data
sebelumnya

Penempatan NODE ujung ke NODE tmp


tmp = ujung; // node tmp di isikan node ujung, agar data tidak
hilang

Promp untuk memilih menginput menu pesanan kembali


cout << "Input menu makanan ? (y/t)"; cin >> t ;// promt pilihan
untuk mengulang input pesanan
if (tolower(t) == 'y') { // jika input ulang
jmlh++; // menambah jumlah dengan 1
continue; // mengulangi fungsi do
}

Output Data
cout << "---------------------------- \n";
cout << "No.Meja\t : " << no_meja << "\n"; // output no meja
cout << "============================ \n";
cout << "Kode\t Menu\t \n";
cout << "============================ \n";
for ( i = 0; i < jmlh+1; i++) // pengulangan untuk output data
pesanan berdasarkan isi dari variabel jmlh
{
cout << ujung->Menu << "\t " << ujung->Jumlah << " \n" ; //
output data
ujung = ujung->next; // ujung di isikan dengan pointer yang
berisikan data pesanan sebelumnya
}

5. Daftar Pustaka
1. https://kuliahinformatika.wordpress.com/2010/01/21/linked-list-operasi-dasar-yang-
dimiliki-linked-list/
2. http://nindi16tk.blog.pcr.ac.id/2017/10/11/439/

Anda mungkin juga menyukai