Struktur Data List
Terdapat beberapa jenis struktur data, di antaranya yang saya ketahui:
1. List
2. Queue (antrian)
3. Stack
4. Pohon
Pada tutorial ini, akan dibahas mengenai struktur data List, khususnya list linier.
Berdasarkan buku yang saya baca, yaitu(Diktat Struktur Data,oleh Inggriani Liem), list linier adalah sekumpulan elemen bertipe sama (seperti array), yang mempunyai keterurutan tertentu, dan setiap elementnya terdiri dari dua bagian, yaitu informasi elemen dan alamat suksesornya(next elemennya).
Keuntungan dari menggunakan list antara lain:
-penggunaan memori yang dinamik, sehingga penggunaan memori dapat diatur untuk menghematnya
-kesederhanaan pada proses insert ataupun delete suatu elemen
Alamat elemen pertama dari suatu list L, dapat diacu dengan First(L).
Nilai yang dibawanya dapat diacu dengan info(P)
Jadi, menurut saya, sebenarnya List tuh sama aja dengan array biasa, tapi alokasi memori dari tiap elemennya adalah secara dinamik dan suksesor dari suatu elemen cukup fleksibel, dapat kita tentukan sendiri.
Berikut ini contoh sederhana, implementasi List di C:
Source code-nya dibagi menjadi 3 file, yaitu file header(.h),implementasi(.c), dan driver-nya(.c)
Berikut ini adalah source code untuk header-nya
/* by: darkkhuwarizmi
namafile: list1.h
deskripsi: mendefinisikan tipe data list
*/
#include <stdio.h>
#include <stdlib.h>
#define Nil NULL
/* Selektor */
#define info(P) (P)->info
#define next(P) (P)->next
#define First(L) ((L).First)
typedef int infotype;
typedef struct tElmtlist *address;
typedef struct tElmtlist{
infotype info;
address next;
}ElmtList;
/* Definisi List */
/* List Kosong : First(L) = Nil */
/* Setiap elemen dengan address P dapat diacu info(P), next(P) */
/* Elemen terakhir list: jika addressnya last, maka Next(last) = Nil */
typedef struct{
address First;
}List;
//Prototipe fungsi-fungsi
void CreateList(List* L);
//membuat list kosong
address Alokasi(infotype x);
//mengalokasikan memori, serta mengisikan x sebagai info-nya
void Dealokasi(address P);
void InsertFirst(List* L,infotype x);
//menambahkan elemen x list L, sebagai elemen pertama
void DelFirst(List* L,infotype* x);
//menghapus elemen pertama dari list L, dan menyimpan info dari elemen yang dihapus tersebut di x
void printList(List L);
//menampilkan isi dari list
File di atas disimpan dengan nama list1.h
Kemudian, file realisasinya:
/* by: darkkhuwarizmi
namafile: list1.c
deskripsi: realisasi dari tipe data list
*/
#include “list1.h”
void CreateList(List* L)
//membuat list kosong
{
First(*L) = Nil;
}
address Alokasi(infotype x)
//mengalokasikan memori, serta mengisikan x sebagai info-nya
{
address temp = Nil;
temp = (address)malloc(sizeof(ElmtList));
if (temp!=Nil){
info(temp) = x;
}
return temp;
}
void Dealokasi(address P){
free(P);
}
void InsertFirst(List* L,infotype x)
//menambahkan elemen x list L, sebagai elemen pertama
{
address P;
P = Alokasi(x);
if (P!=Nil){
next(P) = First(*L);
First(*L) = P;
}else{
printf(“Tidak dapat menambahkan elemen, Memori penuh!\n”);
}
}
void DelFirst(List* L,infotype* x)
//menghapus elemen pertama dari list L, dan menyimpan info dari elemen yang dihapus tersebut di x
{
address temp = Nil;
temp = First(*L);
(*x) = info(temp);
First(*L) = next(temp); //next(First(*L))
Dealokasi(temp);
}
void printList(List L)
//menampilkan isi dari list
{
address P;
P = First(L);
if (P==Nil){
printf(“List Kosong\n”);
}else{
do{
printf(“isi list: %d\n”,info(P));
P = next(P);
}while (P!=Nil);
}
}
file di atas disimpan dengan nama yang sama dengan file headernya, tapi ekstensinya .c, list1.c, dan disimpan pada folder yang sama.
Kemudian program utamanya:
/* by: darkkhuwarizmi
namafile: main_list1.c
deskripsi: main dari tipe data list
*/
#include “list1.h”
int main(){
List mylist;
CreateList(&mylist);
int i;
int n,bil;
printf(“Input List\n”);
printf(“Banyak nilai yang akan di-input-kan: “);scanf(“%d”,&n);
for(i=0;i
printf(“Elemen ke-%d: “,i+1);scanf(“%d”,&bil);
InsertFirst(&mylist,bil);
}
printf(“Menampilkan isi list\n”);
printList(mylist);
return 0;
}
Simpan file di atas dengan nama: main_list1.c atau yg lain jg bisa.
Demikianlah, silahkan jalankan, kalo pake command prompt di windows:
D:\chanz\file sumber C>gcc -c list1.c main_list1.c -Wall
D:\chanz\file sumber C>gcc -o main_list1 list1.o main_list1.o
D:\chanz\file sumber C>main_list1.exe
Input List
Banyak nilai yang akan di-input-kan: 10
Elemen ke-1: 1
Elemen ke-2: 2
Elemen ke-3: 3
Elemen ke-4: 4
Elemen ke-5: 5
Elemen ke-6: 6
Elemen ke-7:
7
Elemen ke-8: 324
Elemen ke-9: 234
Elemen ke-10: 32
Menampilkan isi list
isi list: 32
isi list: 234
isi list: 324
isi list: 7
isi list: 6
isi list: 5
isi list: 4
isi list: 3
isi list: 2
isi list: 1
Makasi ya source code nya,,, sangat berguna sekali