[ Mengenal Linked List / Senarai Berantai(1) ]

Pada saat kita menggunakan array maka akan kita dapatkan bahwa data yang akan kita masukkan terbatas. Dalam artian begini, kita ingin membuat program input data mahasiswa, misalkan. Maka kita harus menentukan dulu berapa jumlah data maksimum yang akan dimasukkan. Ini sangat kurang efektif dan tidak dinamis. Selain itu, penggunaan aray sebenarnya akan menghabiskan resource memori. Kenapa? Karena pada saat array tercipta ruang memori yang tercipta tidak akan dapat dihapus pada saat program dijalankan. Lalu bagaimana jika kita ingin membuat program mahasiswa tersebutlebih dinamis? Jawabannya adalah dengan menggunakan tipe data pointer. Dengan menggunakan pointer maka data yanag sudah tidak terpakai bisa direlokasi kembali. Linked list merupakan salah satu teknik dalam pemanfaatan tipe data pointer ini. Dinamakan Linked list atau Senarai berantai karena satu elemen dengan elemen lainnya saling berkaitan satu sama lain dengan memanfaatkan pointer.

setiap simpul dalam suatu senerai berantai terbagi menjadi dua bagian.
Bagian pertama, disebut medan informasi, berisi informasi yang akan disimpan dan diolah.
Bagian kedua, disebut medan penyambung (link field), berisi alamat simpul berikutnya.

mendeklarasikan linked list

typedef struct nm_linked_list {
	medan_informasi-1;
	medan_informasi-1;
	link_field;
};

keterangan:
medan informasi diisi dengan tipe data tertentu
link_field adalah pointer dari nm_linked_list

contoh:

	typdef struct myLinkedList {
		int data;
		myLinkedList *next;
	};

Membentuk node baru
Untuk membentuk node baru gunakan keyword new. Ini artinya kita mempersiapkan node baru beserta alokasi memori tertentu. Kemudian medan_informasi diisi dengan suatu
data tertentu dan linked field dari node baru tersebut kita NULL-kan. Berikut ini adalah contohnya:
myLinkedList *baru;
baru = new myLinkedList;
baru->data = 7;
baru->next = NULL;

Penggunaan Head dalam linked list
Head dalam linked list untuk menandakan posisi depan suatu node. Ini nanti akan berkaitan dengan penambahan suatu data, apakah dari depan atau dari belakang node. untuk head ini kita jadikan variabel global sehingga nanti bisa diakses dimanapun.
myLinkedList *head;

sebaiknya kita membuat inisialisasi untuk head sebagai berikut:

void init() {
	head = NULL;
}

ini menandakan bahwa head tidak menunjukan tidak ada nilai dan tidak menunjuk ke alamat memori manapun.

Sebelum pada pembahasan bagaimana membuat node baru untuk senarai, terlebih dahulu kita buat fungsi untuk mengecek apkah linked list dalam keadaan kosong atau tidak. Pada
program dibawah ini nilai 1 akan dikembalikan jika linked list dalam keadaan kosong dan nilai 0 jika linked list dalam keadaan berisi.

int paKosong() {
	if (head == NULL) return 1;
	else return 0;
}

Penambahan Node ada dua, depan dan belakang. Penambahan Depan artinya data baru yang akan dimasukkan akan dikaitkan di depan head. Sedangkan penambahan di belakang artinya
node akan ditambahkan di belakang head.

Penambahan Node di depan

void tambahDepan() {
	myLinkedList *baru = new MyLinkedList;
	cout <> baru->data;
	baru->next = NULL;
	if(paKosong() == 1) {
		head = baru;
		head->next = NULL;
	} else {
		baru->next
	}
}

Potongan program di bawah ini adalah untuk menampilkan isi dari linked list.

void tampilData() {
	MyLinkedList *bantu;
	bantu = head;
	if (paKosong() == 0) {
		while (bantu != NULL) {
			cout <data <next;
		}
		cout << endl;
	} else {
		cout << "Data masih kosong " << endl;
	}
}

Untuk lebih memperjelas penggunaan dari operasi tambahDepan, mari simak dan praktikan Full source code di bawah ini:

/**
 * ===========================================================================
 * listing1
 * @author Eding Muh. Saprudin
 * source : Handout Struktur Data Prodi TI UKDW/Antonius Rachmat C, S.Kom
 * ===========================================================================
 */
#include
#include 

/* membuat linked list */
typedef struct myLinkedList {
	char nim[10];
	char nama[35];
	int nilai;

	myLinkedList *next;
};

myLinkedList *head;

/* keadaan awal */
void init() {
	head = NULL;
}

/* fungsi untuk mengecek linked list
 * apakah kosong atau tidak
 * jika kosong maka bernilai 1
 * jika tidak kosong maka bernilai 0
 */
int paKosong() {
	if (head == NULL) return 1;
	else return 0;
}

/**
  * fungsi untuk menambahkan data dari depan node
  */
void tambahDepan() {
	clrscr();

	myLinkedList *baru;
	baru = new myLinkedList;

	cout << "Masukkan Data lengkap di bawah ini : " << endl;
	cout <> baru->nim;
	cout <> baru->nama;
	cout <> baru->nilai;

	baru->next = NULL;

	if (paKosong() == 1) {
		head = baru;
		head->next = NULL;
	} else {
		baru->next = head;
		head = baru;
	}
}
/**
  * fungsi untuk menampilkan data linked list
  */
void tampilData() {
	int no = 1;
	clrscr();
	myLinkedList *bantu;
	bantu = head;
	if (paKosong() == 0) {
		while (bantu != NULL) {
			cout << "No.   : " << no << endl;
			cout << "NIM   : " <nim << endl;
			cout << "Nama  : " <nama << endl;
			cout << "Nilai : " <nilai << endl <next;
		}
		cout << endl;
	} else {
		cout << "Data masih kosong " << endl;
	}
   cout << "Tekan Enter untuk kembali ke menu!";
	getch();
}
/**
 * fungsi Menu, Untuk menentukan linked list mana
 * yang dipilih
 */
int menu() {
	int pilihan;

	clrscr();
	cout << "+----------------------+\n";
	cout << "|     MENU PILIHAN     |\n";
	cout << "+----------------------+\n";
	cout << "| 1. Tambah Depan      |\n";
	cout << "| 5. TampilData        |\n";
	cout << "| 6. Keluar            |\n";
	cout << "+----------------------+\n";
	cout << "| PILIHAN ANDA ? [ ]   |\n";
	cout << "+----------------------+\n";
	gotoxy(19,8);
	cin  >> pilihan;
	return pilihan;
}
/**
  * fungsi operasi data
  */
void operasiData() {
	int pilih;

	do {
		pilih = menu();
		clrscr();
		switch (pilih) {
			case 1 :
				tambahDepan();
				break;
			case 5 :
				tampilData();
				break;
			case 6:
				clrscr();
				cout << "Terima kasih coy!!!";
				break;
		}
	} while (pilih != 6);
}

/**
 * PROGRAM UTAMA
 */
void main() {
	init();
	operasiData();
}

download file

3 Komentar »

  1. kangarie Said:

    wah, kursornya keren…

  2. dina-ti Said:

    wah bingung e mas…

  3. mn_sahid Said:

    masih blum paham ama logika struktur data…


{ RSS feed for comments on this post} · { TrackBack URI }

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: