LAPORAN PRAKTIKUM
ALGORITMA DAN STRUKTUR DATA II
MODUL I
LINKED LIST
Disusun Oleh : Syukur Jaya Mendrofa
201501072
Kelas: C
Dosen Pengampu :
Oskar Ika Adi Nugroho, ST., MT
JURUSAN SISTEM INFORMASI
SEKOLAH TINGGI ILMU KOMPUTER “YOS SUDARSO”
PURWOKERTO
BAB I
Dasar Teori
SEJARAH SINGKAT LINK LIST
Dikembangkan tahun 1955-1956 oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai struktur data utama untuk bahasa Information Processing Language (IPL). IPL dibuat untuk mengembangkan program artificial intelligence, seperti pembuatan Chess Solver.
PENGERTIAN LINK LIST
Linked list (list bertaut) adalah salah satu struktur data dasar yang sangat fundamental dalam bidang ilmu komputer. Dengan menggunakan linked list maka programmer dapat menimpan datanya kapanpun dibutuhkan. Linked list mirip dangan array, kecuali pada linked list data yang ingin disimpan dapat dialokasikan secara dinamis pada saat pengoperasian program (run-time).
JENIS-JENIS LINKED LIST
Singly linked list
Double linked list
Circular Linked List
Linked list (one way list) adalah suatu kumpulan elemen data (yang disebut sebagai node) dimana urutannya ditentukan oleh suatu pointer.
Setiap elemen (node) dari suatu linked list terdiri atas dua bagian, yaitu :
o INFO, berisi informasi tentang elemen data yang bersangkutan.
o NEXT (link field/next pointer field), berisi alamat dari elemen (node) selanjutnya yang dituju.
Berikut ini sebuah contoh linked list yang terdiri atas 4 node :
info next info next info next info next start
node ke-1 node ke-2 node ke-3 node ke-4 null
BAB II
struct Node //tipe data abstrak “struct” dengan nama Node {
int data; //nama dan tipe data dari member “Node”
struct Node* next; // nama dan tipe data dari member “Node”, menggunakan pointer.
};
struct Node* head; // variabel global yang bisa dipanggil dimana saja, didalam dan diluar fungsi utama.
void Insert(int x){
struct Node* temp = (Node*)malloc(sizeof(struct Node)); // mengalokasikan memory yang akan digunakan yaitu sesuai dengan jumlah atau nilai x yang akan di masukkan.
Node* temp sama artinya dengan new Node ( ); yaitu mengalokasikan memory node baru yang akan masuk berikutnya.
temp->data = x;
temp->next = head;
head = temp; }
void print(){
struct Node* temp = head; printf("Senarainya adalah : ");
while (temp != NULL)
{
printf("%d", temp->data);
temp = temp->next;
}
}
int main()
{
head = NULL;//listnya masih kosong
printf("Berapa panjang listnya? \n"); int n, i, x;
scanf("%d", &n);
for (i = 0; i < n; i++){
printf("Masukan bilangan listnya \n");
scanf("%d", &x);
Insert(x); //memanggil fungsi void Insert(int x) print(); // memanggil fungsi void print( )
}
system("pause");
return 0; }
Analisa program 01
Program ini merupakan program untuk menyisipkan simpul baru, dimana simpul baru selalu disisipkan pada awal senarai berantai atau setelah head senarai :
Masuk pada fungsi utama :
int main() {
head = NULL
printf("Berapa panjang listnya? \n"); //memasukkan berapa panjang list yang akan dibuat, di sini saya memasukkan 5
Sehingga memori mengalokasikan sebanyak 5. Jadi n = 5 sehingga pengulangan for akan berhenti apabila i < n atau 0 < 0 False, jadi pengulangannya adalah 5,4,3,2,1 sebanyak 5 kali.
for (i = 0; i < n; i++){
printf("Masukan bilangan listnya \n"); scanf("%d", &x);
Proses memasukkan bilangan pertama yaitu angka 5.
Sehinga output menampilkan Senarainya adalah : 5
Proses menyisipkan bilangan 4.
Proses menyisipkan bilangan 3.
Proses menyisipkan bilangan 2.
Sehinga output menampilkan Senarainya adalah : 2345
Proses menyisipkan bilangan 1.
Fungsi void print ( ) merupakan fungsi untuk menampilkan tiap simpul dan senarai yang telah dan akan dimasukkan:
struct Node* temp = head; yaitu memanggil/mengalokasikan alamat/link tiap simpul yang baru akan disisipkan dimana alamat tersebut diinisialisasikan menjadi kepala atau head.
while (temp != NULL) merupakan proses pengulangan yang akan memanggil data dari link tiap simpul yang baru disisipkan.
printf("%d", temp->data) menampilkan data dari link-link semua simpul yang telah disisipkan, ini merupakan bagian dari proses pengulangan while.
temp = temp->next; menginisialisasi alamat/link ke simpul berikutnya yang akan dimasukkan, ini merupakan bagian dari proses pengulangan while.
Program 02 :
void Insert(int data, int n){
Node* temp1 = new Node();
temp1->data = data;
Node* temp2 = head; for (int i = 0; i < n - 2; i++){
Node* temp = head;
while (temp != NULL){
}
printf("\n");
}
int main()
{
head = NULL;//listnya masih kosong
Insert(2, 1); //list : 2
Insert(3, 2); //list : 2,3 Insert(4, 1); //list : 4,2,3
Insert(5, 2); //list : 4,5,2,3
print();
Pertama sekali program masuk pada fungsi utama yaitu head = NULL; yaitu menyatakan nilai dari head = null.
Kemudian memanggil fungsi void Insert(int data, int n) Insert(2, 1); dimana nilai data=2 dan n=1. Angka 2 menjadi kepala sekaligus ekor pada tahap pertama ini. Karena n=1.
Kemudian Insert(3, 2); dimana nilai data=3 dan n=2. Angka 2 menjadi kepala dan ekor yaitu data=3 dari tahap pertama. Karena n=2.
Kemudian Insert(5, 2); dimana nilai data=5 dan n=2. Angka 4 menjadi kepala dan posisi tengah yaitu 5 dan 2, ekornya yaitu data=3 dari tahap pertama. Karena n=2.
BAB III
Kesimpulan
Linked List atau Struktur Berkait atau Senarai Berantai, yaitu cara menyimpan data secara terstruktur sehingga programmer dapat secara otomatis menciptakan suatu tempat baru untuk menyimpan data kapan saja diperlukan. Sebuah pointer menunjuk simpul terkiri dan setiap simpul mempunyai pointer yang menunjuk ke simpul berikutnya. Pointer pada simpul terakhir tidak menunjuk kemana-mana maka berisi NULL. Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.
Simpul pada linked list terdiri dari dua komponen utama yaitu:
1. Data yaitu bisa berupa satu elemen data atau beberapa elemen data. 2. Pointer yang menunjuk ke simpul lain.
Ada beberapa aturan yang didefinisikan pada operasi didalam linked list, yaitu :
Jika P adalah suatu variabel pointer, maka nilainya adalah alamat atau lokasi dari variabel lain yang dituju.
Operasi yang didefinisikan pada suatu variabel pointer adalah : 1. Test apakah sama dengan NULL.
2. Test untuk kesamaan dengan variabel pointer lain. 3. Menetapkan sama dengan NULL.
4. Menetapkan menuju ke node lain.
Notasi yang didefinisikan sehubungan dengan operasi diatas adalah : 1. NODE(P), artinya node yang ditunjuk oleh pointer P.
2. INFO(P), artinya nilai INFO dari node yang ditunjuk pointer P.
Ada dua hal yang menjadi kerugian dengan representasi suatu data dengan linked list ini, yaitu
Diperlukan ruang tambahan untuk menyatakan/tempat field pointer.
Diperlukan waktu yang lebih banyak untuk mencari suatu node dalam linked list.
Sedangkan keuntungannya adalah :
Jenis data yang berbeda dapat di-link.