Anda di halaman 1dari 5

Benediktus Ronaldy

123090001

#include <iostream> #include <malloc.h> using std :: cout; typedef int typeinfo; typedef struct typenode *typeptr; typedef struct typenode { typeinfo info; typeptr next;

};

typeptr awal, akhir; void buatlistbaru(); void sisipdepan(typeinfo IB); void sisipbelakang(typeinfo IH); void sisiptengah(typeinfo IH); void hapuslist(typeinfo IH); void cetaklist();

int main()

{

buatlistbaru();

sisipdepan(10);

sisipbelakang(25);

sisipbelakang(100);

sisiptengah(50);

cetaklist();

hapuslist(50);

cetaklist();

return 0;

}

void buatlistbaru()

{

typeptr list; list=(typenode *)malloc(sizeof(typenode)); list=NULL; awal=list; akhir=list;

}

/*Membuat variabel lokal pointer list dan mendeklarasikan sebuah pointer kosong pada memory. Variabel list di set bernilai null, lalu ubah awal menjadi akhir, dan akhir menjadi awal.*/

void sisipdepan(typeinfo IB)

{

typeptr NB; NB=(typenode *)malloc(sizeof(typenode)); NB->info=IB; if(awal==NULL)

 

{

awal=NB; akhir=NB; }

 

else

 

{

NB->next=awal; } awal=NB;

}

/*Membuat variabel lokal pointer NB, dan mendeklarasikan sebuah pointer kosong pada memory, NB menunjuk pada IB, setelah itu di cek kondisi apakah awal sama dengan NULL, jika sayrat terpenuhi maka awal sama denagn NB, dan akhir sama dengan NB. Jika ssyarat tidak terpenuhi, maka NB sama dengan awal, dan awal sama dengan NB*/

void sisipbelakang(typeinfo IB)

{

typeptr NB; NB=(typenode *)malloc(sizeof(typenode)); NB->info=IB; if(awal==NULL)

 

{

awal=NB; akhir=NB; }

 

else

 

{

akhir->next=NB; } akhir=NB; akhir->next=NULL;

}

/*Membuat variabel lokal pointer NB, dan mendeklarasikan sebuah pointer kosong pada memory, NB menunjuk pada IB, setelah itu di cek kondisi apakah awal sama dengan NULL, jika sayrat terpenuhi maka awal sama denagn NB, dan akhir sama dengan NB. Jika syarat tidak terpenuhi, maka akhir sama dengan NB dan NB adalah NULL*/

void sisiptengah(typeinfo IB)

{

typeptr NB, bantu; NB=(typenode *)malloc(sizeof(typenode)); NB->info=IB; NB->next=NULL; if(awal==NULL)

 

{

awal=NB; akhir = NB; }

 

else

 

{

bantu=awal; while((IB > bantu->next->info) && (bantu->next!=NULL)) bantu=bantu->next; NB->next=bantu->next; bantu->next=NB;

}

}

/*Membuat variabel lokal pointer NB dan bantu, serta mendeklarasikan sebuah pointer kosong pada memory, data NB menunjuk pada IB, dan alamat NB adalah NULL. Kemudian dilakukan pengecekan dengan kondisi awal adalah NULL, jika syarat terpenuhi maka awal sama dengan NB dan akhir sama dengan NB. Jika syarat tidak terpenuhi, bantu sama dengan awal dan dilakukan pengencekan kembali dengan kondisi IB adalah data dan alamat bantu serta alamat bantu tidak NULL, kemudian jika syarat terpenuhi maka alamat bantu sama dengan NB. */

void hapuslist(typeinfo IH)

{ typeptr hapus, bantu; if(awal==NULL)

{

cout << "List masih kosong! \n";

}

else { if (awal->info==IH) { hapus=awal; awal=hapus->next; free(hapus); }

else

{

bantu=awal; while((bantu->next->info!=IH)&&(bantu->next!=NULL))

{ bantu=bantu->next; } hapus=bantu->next; if(hapus==NULL)

{ cout << "List tidak ditemukan\n";

}

else

{ if (hapus==akhir)

{ akhir=bantu;

akhir->next=NULL;} else {bantu->next=hapus->next; } free(hapus);}

}

}

}

/*Membuat variabel lokal pointer hapus dan bantu, setelah itu dilakukan pengecekan apakah awal NULL, jika kondisi terpenuhi maka keluar output "List masih kosong! ", jika kondisi tidak terpenuhi maka dilakukan pengecekan lagi apakah alamat awal sama dengan IH, jika terpenuhi maka hapus sama dengan awal dan awal sama dengan alamat hapus serta variabel hapus dihapus, jika kondisi tidak terpenuhi, maka bantu sama dengan awal dan dilakukan pengecekan lagi apakah alamat dan data info tidak sama dengan IH serta alamat bantu bukan NULL, jika kondisi terpenuhi maka bantu sama dengan alamat bantu dan hapus sama dengan alamat bantu. Kemudian dilakukan pengecekan apakah hapus adalah NULL. Jika kondisi terpenuhi maka keluar output "List tidak ditemukan! ", jika kondisi tidak terpenuhi maka dilakukan pengecekan lagi apakah hapus sama dengan akhir, jika syarat terpenuhi maka akhir sama dengan bantu dan alamat akhir adalah NULL, jika tidak alamat bantu sama dengan alamat hapus dan variabel hapus dihapus. */

void cetaklist()

{

typeptr bantu; bantu=awal;

 

while(bantu!=NULL) cout << " " << bantu->info;

{

 

cout << "

";

bantu=bantu->next; }

}

/*Membuat variabel lokal pointer bantu dan sama dengan awal. Kemudian dilakukan pengecekan bantu bukan NULL. Jika kondisi terpenuhi, maka keluar output isi data bantu*/

Linked List Array

- Linked List

Merupakan suatu struktur data pengembangan dari konsep ADT (Abstrak Data Type) yang bersifat dinamis. Linked List dapat dimanfaatkan secara effektif sesuai dengan keperluan. Linked List juga dapat benar – benar dihapus / dibersihkan dari memory.Linked List sebenarnya merupakan suatu typedata

tersendiri. Di bahasa Java, Linked List bisa berupa suatu Class ataupun Record. Ciri – ciri utama dari Linked List adalah, dia mempunyai minimal dua elemen utama. Elemen – elemen itu adalah data dan pointer untuk menunjukkan ke list

berikutnya.- ArrayArray berbeda dengan Linked List. Array merupakan suatu

struktur data yang bersifat statis. Array harus dialokasikan terlebih dahulu di dalam memory sebelum kita memakainya.

Perbedaan mendetail antara Array dan Linked List adalah sebagai berikut :

 

Linked List

 

Array

-

Pengaksesan Dinamis-

-

Pengaksesan Statis-

Pengalokasian random pada alamat

Pengalokasian berurut pada alamat

memory-

Dapat dibebaskan dari

memory-

Tidak dapat dibebaskan Menggunakan

memory-

Tidak menggunakan

dari memory-

konsep indexing

Pengaksesan untuk searching /sorting lambat

-

konsep indexing

Pengaksesan untuk searching atau sorting cepat

-

- Linked List

untuk searching atau sorting cepat - - Linked List Kita akan lebih efektif jika kita menggunakan

Kita akan lebih efektif jika kita menggunakan konsep Linked List jika kita memerlukan suatu pengaksesan pada struktur data yang lebih dinamis. Konsep yang lebih cocok menggunakan linked list adalah : Stack, Queue, Tree, dan Graph.

Hal ini dikarenakan oleh sifat dinamis dari Linked List. Kita tidak perlu untuk mengetahui berapa block memory yang akan kita akses. Jadi, jika kita butuh block baru pada memory, tinggal menyisipkan pada kanan atau kiri list yang telah ada.

- Array

pada kanan atau kiri list yang telah ada. - Array Kita dapat memanfaatkan secara efektif konsep

Kita dapat memanfaatkan secara efektif konsep array dengan mengenal metode indexing pada array. Array merupakan struktur data statis yang mempunyai index penomoran alamat variable array yang dimaksud. Jadi, secara umum, kita dapat mengaksesnya dengan lebih cepat.

Konsep – konsep yang dapat memanfaatkan konsep indexing untuk mempercepat pengaksesannya adalah Sorting dan Searching.

Hal ini dikarenakan oleh penomoran alamat variable pada memory yang telah diketahui terlebih dahulu. Jadi, semisal kita menginginkan mencari variable dengan indeks tengah, kita bisa langsung menujuk ke indeksnya.

- Singly Linked List :

bisa langsung menujuk ke indeksnya. - Singly Linked List : Setiap node pada linked list mempunyai

Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki field yang berisi data.

Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan sebagai kondisi berhenti saat pembacaan linked list.

- Double Linked List :

akan menunjuk ke null yang akan digunakan sebagai kondisi berhenti saat pembacaan linked list. - Double