• Tidak ada hasil yang ditemukan

LAPORAN ALGORITMA DAN STRUKTUR DATA II (6)

N/A
N/A
Protected

Academic year: 2018

Membagikan "LAPORAN ALGORITMA DAN STRUKTUR DATA II (6)"

Copied!
13
0
0

Teks penuh

(1)

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

(2)

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

(3)

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;

}

(4)

}

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; }

(5)

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);

(6)

Proses memasukkan bilangan pertama yaitu angka 5.

Sehinga output menampilkan Senarainya adalah : 5

Proses menyisipkan bilangan 4.

(7)

Proses menyisipkan bilangan 3.

(8)
(9)

Proses menyisipkan bilangan 2.

Sehinga output menampilkan Senarainya adalah : 2345

Proses menyisipkan bilangan 1.

(10)

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.

(11)

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){

(12)

}

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.

(13)

 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.

Referensi

Dokumen terkait

Fungsi-fungsi stack yang digunakan adalah struct STACK yaitu untuk membuat jenis data abstrak stack, bool isfull() yaitu fungsi untuk mengetahui apakah stack dalam

Instansiasi dengan object mahasiswa1 yang berparameter nama, nim, ipk Memanggil sisipDipKepala dengan data1 yang berparameter mahasiswa1 Pengondisian jika pilih sama dengan 2.

Sedangkan untuk tampilan data secara preorder, yang ditampilkan pertama adalah data pada bagian kiri node, kemudian data pada bagian kanan node, setelah itu node nya yang

pergeseran data satu-persatu kemudian pada posisi yang tepat sisipkan data

gunakan sebagai awal dari linked list, node aktif dalam linked list, dan node sementara yang kita gunakan dalam pembuatan node di linked list. Berikan nilai awal NULL

adalah sebuah urutan simpul sehingga tiap sisi/busur terurut dari kiri ke kanan (atau sebaliknya).  Setiap DAG memiliki minimal satu

• Dalam st rukt ur simpul hanya ada sat u elemen/ field/ variabel yang bert ipe point er yang isinya adalah alamat sim[ul berikut nya at au next node... Inisialisasi, yait

 Temukan node dengan nilai terbesar pada left subtree node yang dihapus kemudian pindahkan node tersebut untuk menggantikan node yang dihapus or.  Temukan node dengan