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

About these ads

2 thoughts on “Struktur Data List

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s