List Linier (Linked list) Dan Variasinya_Struktur Data
Struktur Data List Linear:
Struktur data adalah cara menyimpan atau merepresentasikan data didalam komputer agar bisa dipakai secara efisien. Sedangkan data adalah representasi dari fakta dunia nyata. Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol.
List linier adalah sekumpulan elemen bertipe sama yang mempunyai keturutan tertentu, dan setiap elemen nya terdiri dari dua bagian, yaitu informasi mengenai elemen nya dan informasi mengenai alamat elemen suksesornya. Penggunaan List dalam Kehidupan Sehari - hari Misalnya:
• Urutan angka pada keyboard komputer
• Urutan lagu pada playlist Mp3 player
• Dll
Linked List ( LL ) Adalah koleksi data item yang tersusun dalam sebuah barisan secara linear, dengan penyisipan dan pemindahan dapat dilakukan dalam semua tempat di LL tersebut. Single Linked List Adalah sebuah LL yang menggunakan sebuah variabel pointer saja untuk menyimpan banyak data dengan metode LL, suatu daftar isi yang saling berhubungan. Double Linked List, Dalam double LL ( Linked List berpointer ganda ) dapat mengatasi kelemahan-kelemahan single LL tersebut. Circular Linked List Adalah double / single LL yang simpul terakhirnya menunjuk ke simpul awal, dan simpul awalnya menunjuk ke simpul akhir, atau dapat disebut LL yang dibuat seakan-akan merupakan sebuah lingkaran dengan titik awal dan titik akhir saling bersebelahan jika LL tersebut masih kosong.
List linier memiliki 2 jenis, yaitu:
Struktur Data, meliputi:
Non Linier : Pohon Biner dan Graph
Pemakaian struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana.
Struktur data yang standar yang biasanya digunakan dibidang informatika adalah:
* List linier (Linked List) dan variasinya
* Multilist
* Stack (Tumpukan)
* Queue (Antrian)
* Tree ( Pohon)
* Graph ( Graf )
Jika L adalah list , dan P adalah address :
Alamat elemen pertama list L dapat diacu
dengan notasi :
First (L)
Elemen yang diacu oleh P dapat dikonsultasi
informasinya dengan notasi :
Info(P)
Next(P)
Beberapa definisi :
1. List L adalah List kosong , jika First (L) = Nil
2. Elemen terakhir dikenali, dengan salah satu cara adalah karena Next(Last) =Nil
Nil adalah pengganti Null, dalam bahasa C perubahan ini dituliskan dengan
#define Nil Null
Daftar link adalah cara untuk menyimpan data dengan struktur sehingga programmer dapat secara otomatis membuat tempat baru untuk menyimpan data kapan pun diperlukan. Secara khusus, programmer menulis sebuah struct atau kelas definisi yang berisi variabel yang memegang informasi tentang sesuatu, dan kemudian memiliki pointer ke struct dari jenis. Masing-masing individu atau struct kelas dalam daftar umumnya dikenal sebagai node.
Struktur data adalah cara menyimpan atau merepresentasikan data didalam komputer agar bisa dipakai secara efisien. Sedangkan data adalah representasi dari fakta dunia nyata. Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol.
List linier adalah sekumpulan elemen bertipe sama yang mempunyai keturutan tertentu, dan setiap elemen nya terdiri dari dua bagian, yaitu informasi mengenai elemen nya dan informasi mengenai alamat elemen suksesornya. Penggunaan List dalam Kehidupan Sehari - hari Misalnya:
• Urutan angka pada keyboard komputer
• Urutan lagu pada playlist Mp3 player
• Dll
Linked List ( LL ) Adalah koleksi data item yang tersusun dalam sebuah barisan secara linear, dengan penyisipan dan pemindahan dapat dilakukan dalam semua tempat di LL tersebut. Single Linked List Adalah sebuah LL yang menggunakan sebuah variabel pointer saja untuk menyimpan banyak data dengan metode LL, suatu daftar isi yang saling berhubungan. Double Linked List, Dalam double LL ( Linked List berpointer ganda ) dapat mengatasi kelemahan-kelemahan single LL tersebut. Circular Linked List Adalah double / single LL yang simpul terakhirnya menunjuk ke simpul awal, dan simpul awalnya menunjuk ke simpul akhir, atau dapat disebut LL yang dibuat seakan-akan merupakan sebuah lingkaran dengan titik awal dan titik akhir saling bersebelahan jika LL tersebut masih kosong.
List linier memiliki 2 jenis, yaitu:
Stack (Tumpukan): Struktur data
linear dimana penambahan atau pengurangan komponen dilakukan di satu
ujung saja dan merupaan suatu bentuk khusus dari linear list di mana
operasi penyisipan dan penghapusan atas elemen-elemennya hanya dapat
dilakukan pada satu sisi saja.
Operasi pada stack:
1). Push : Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack.
2). Pop : Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack.
Struktur Data, meliputi:
- Struktur data sederhana, misalnya array dan record.
- Struktur data majemuk, yang terdiri dari:
Non Linier : Pohon Biner dan Graph
Pemakaian struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana.
Struktur data yang standar yang biasanya digunakan dibidang informatika adalah:
* List linier (Linked List) dan variasinya
* Multilist
* Stack (Tumpukan)
* Queue (Antrian)
* Tree ( Pohon)
* Graph ( Graf )
Linked-list yang
kerap kali disebut pula one-way List, adalah koleksi linear dari elemen data
yang disebut simpul atau node.
Cara melinearkan
urutan, adalah dengan menggunakan penuding atau pointer.
Struktur Data linier • Array : matrik dimensi satu dan dua bersifat
statis. • Stack (tumpukan) , termasuk array dimensi satu. • Queue
(antrian),ada yg linier dan circular termasuk array dimensi satu. •
Dequeue (doble ended queue), termasuk array dimensi satu. • Matrix,
array dimensi dua. • Linked List ( lis berkait) bersifat dinamis,
terdiri dari : • Linier Single Linked List dan Doble Linked List. •
Circular Single Linked List (multi Linked List) dan Doble Linked
List(operasinya Insert dan Delete)Jika L adalah list , dan P adalah address :
Alamat elemen pertama list L dapat diacu
dengan notasi :
First (L)
Elemen yang diacu oleh P dapat dikonsultasi
informasinya dengan notasi :
Info(P)
Next(P)
Beberapa definisi :
1. List L adalah List kosong , jika First (L) = Nil
2. Elemen terakhir dikenali, dengan salah satu cara adalah karena Next(Last) =Nil
Nil adalah pengganti Null, dalam bahasa C perubahan ini dituliskan dengan
#define Nil Null
Procedure
SKEMAListTraversal1
(Input L : List)
{ I.S. List
L terdefinisi , mungkin kosong }
{F.S.semua
elemen list L "dikunjungi" dan telah diproses }
{ Traversal sebuah
list linier . Dengan MARK, tanpa pemrosesan khusus pada list kosong }
Kamus
:
P : address {address untuk traversal,
type terdefinisi}
procedure Proses (Input P : address){pemrosesan
elemen beraddress P }
procedure Inisialisasi { aksi
sebelum proses dilakukan }
procedure Terminasi { aksi sesudah
semua pemrosesan elemen selesai }
Algoritma
:
Inisialisasi
P ← First(L)
while (P ≠ Nil) do
Proses (P)
P ← Next(P)
Terminasi
Procedure
SKEMAListTraversal2
(Input L: List)
{ I.S. List
L terdefinisi , mungkin kosong }
{F.S. semua
elemen list L "dikunjungi" dan telah diproses }
{ Traversal sebuah
list linier yang diidentifikasi oleh elemen pertamanya L}
{Sekam
sekuensial dengan MARK dan pemrosesan khusus pada list kosong}
Kamus:
P : address {address untuk traversal}
procedure Proses (InputP : address){pemrosesan
elemen ber-address P }
procedure Inisialisasi { aksi
sebelum proses dilakukan }
procedure Terminasi { aksi sesudah
semua pemrosesan elemen selesai }
Algoritma :
if First(L) = Nil then
output ('List kosong')
else
Inisialisasi
P ←First(L)
repeat
Proses (P)
P ← Next(P)
until (P = Nil)
Terminasi
Procedure SKEMAListTraversal3(Input
L : List)
{ I.S. List
L terdefinisi , tidak kosong: minimal mengandung satu elemen}
{F.S.semua
elemen list L "dikunjungi" dan telah diproses }
{ Skema
sekuensial tanpa MARK, tidak ada list kosong karena tanpa mark}
Kamus:
P : address {address untuk traversal,
type terdefinisi}
procedure Proses (Input P : address){pemrosesas
elemen ber-address P}
procedure Inisialisasi { aksi
sebelum proses dilakukan }
procedure Terminasi { aksi sesudah
semua pemrosesan elemen selesai }
Algoritma :
Inisialisasi
P ← First(L)
iterate
Proses (P)
stop Next(P) = Nil
P ← Next(P)
Terminasi Daftar link adalah cara untuk menyimpan data dengan struktur sehingga programmer dapat secara otomatis membuat tempat baru untuk menyimpan data kapan pun diperlukan. Secara khusus, programmer menulis sebuah struct atau kelas definisi yang berisi variabel yang memegang informasi tentang sesuatu, dan kemudian memiliki pointer ke struct dari jenis. Masing-masing individu atau struct kelas dalam daftar umumnya dikenal sebagai node.
Linked List (contoh Penambahan, Pencarian, dan Penghapusan Data)
* Linked List * - Penambahan data di awal, tengah, dan akhir * - Penghapusan data di awal, tengah, dan akhir * - Menampilkan Data * * by Alan (alan.benito@widyatama.ac.id) */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define CLS system("cls"); #define PAUSE {printf("\n"); system("pause");} // membandingkan dua buah string (ignore case) int compare(char *str1, char *str2) { int len = strlen(str1); int beda = 0; for (int i=0; i<len; i++) { if (str1[i] >= 'A' && str1[i] <= 'Z') str1[i] += 32; if (str2[i] >= 'A' && str2[i] <= 'Z') str2[i] += 32; if (str1[i] != str2[i]) beda++; if (str2[i] == '') { beda++; return beda; } } if (strlen(str2) > len) { beda += strlen(str2) - len; } return beda; } int main() { struct list { char npm[16]; char nama[64]; float nilai; struct list *next; }; struct list *awal, *akhir, *p, *Psbl, *baru; awal = akhir = NULL; int pilihan = 1, posisi, posisi_sekarang,posisi_data; char cari[64], konfirmasi; do { switch (pilihan) { case 1: // tambah data kedalam list CLS; baru = (struct list *) malloc(sizeof(struct list)); // alokasikan list baru di memori if (baru == NULL) { CLS; printf("\nMemori tidak cukup."); PAUSE; break; } printf("\nNPM : "); scanf("%s", baru->npm); getchar(); printf("Nama : "); scanf("%[^\n]", baru->nama); printf("Nilai : "); scanf("%f", &baru->nilai); if (awal == NULL) { baru->next = NULL; awal = baru; akhir = baru; } else { printf("\nTambahkan Data di (Default = akhir) : \n"); printf("1. Awal\n2. Tengah\n3. Akhir\n\nPilihan Anda : "); scanf("%d", &posisi); switch(posisi) { case 1: // tambah data di awal list baru->next = awal; awal = baru; PAUSE; break; case 2: printf("Masukan posisi data : "); scanf("%d", &posisi_data); p = awal; Psbl = NULL; posisi_sekarang = 1; while (p != NULL && posisi_sekarang < posisi_data) { //Psbl = p; p = p->next; posisi_sekarang++; } if (p != NULL) { // tambahkan data di tengah (posisi_data) Psbl = p; baru->next = p->next; Psbl->next = baru; } break; case 3: default: // tambah data di akhir list akhir->next = baru; akhir = baru; baru->next = NULL; PAUSE; break; } } break; case 2: CLS; p = awal; printf("\n------------------------------------------\n"); if (p == NULL) { printf("\n List Kosong\n"); printf("\n------------------------------------------\n"); break; } else { while (p != NULL) { printf("\nNPM : %s", p->npm); printf("\nNama : %s", p->nama); printf("\nNilai : %.2f", p->nilai); printf("\n------------------------------------------\n"); p = p->next; } } printf("\n"); printf("Masukan NPM/Nama dari data yang ingin dihapus : "); scanf("%s", cari); CLS; Psbl = NULL; p = awal; while (p != NULL) { if (compare(p->npm, cari) == 0 || compare(p->nama, cari) == 0) { printf("\n\n------------------------------------------\n"); printf("\nNPM : %s", p->npm); printf("\nNama : %s", p->nama); printf("\nNilai : %.2f", p->nilai); printf("\n------------------------------------------\n"); printf("\nIngin menghapus data di atas (y/n) : "); scanf("%s", &konfirmasi); if (konfirmasi == 'y' || konfirmasi == 'Y') { if (awal->next == NULL) { awal = NULL; akhir = awal; } else if (p == awal) { // hapus di awal Psbl = awal; awal = Psbl->next; } else if (p == akhir) { // hapus di akhir Psbl->next = NULL; akhir = Psbl; } else { // hapus di tengah Psbl->next = p->next; } printf("\nData berhasil dihapus.\n\n"); } else { printf("\nData tidak jadi dihapus.\n\n"); } break; } Psbl = p; p = p->next; } if (p == NULL) { printf("\n\nNPM/Nama tidak ditemukan !\n\n"); } PAUSE; break; case 3: CLS; printf("\nMasukan NPM/Nama yang di cari : "); scanf("%s", cari); p = awal; while (p != NULL) { if (compare(p->npm, cari) == 0 || compare(p->nama, cari) == 0) { printf("\n\n------------------------------------------\n"); printf("\nNPM : %s", p->npm); printf("\nNama : %s", p->nama); printf("\nNilai : %.2f", p->nilai); printf("\n------------------------------------------\n"); PAUSE; break; } p = p->next; } if (p == NULL) { printf("\nData tidak ditemukan ! \n\n"); PAUSE; } break; case 4: // tampilkan list CLS; p = awal; printf("\n------------------------------------------\n"); if (p == NULL) { printf("\n List Kosong\n"); printf("\n------------------------------------------\n"); } else { while (p != NULL) { printf("\nNPM : %s", p->npm); printf("\nNama : %s", p->nama); printf("\nNilai : %.2f", p->nilai); printf("\n------------------------------------------\n"); p = p->next; } } printf("\n"); PAUSE; break; case 0: break; default: printf("\nPilihan salah !\n"); break; } CLS; printf("\n1. Tambahkan data kedalam list\n" "2. Hapus data\n" "3. Pencarian data\n" "4. Tampilkan list\n" "0. Keluar\n\n"); printf("Pilihan Anda : "); scanf("%d", &pilihan); } while (pilihan > 0); return 0; }
/**
* Linked List
* - Penambahan data di awal, tengah, dan akhir
* - Penghapusan data di awal, tengah, dan akhir
* - Menampilkan Data
*
* by Alan (alan.benito@widyatama.ac.id)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CLS system("cls");
#define PAUSE {printf("\n"); system("pause");}
// membandingkan dua buah string (ignore case)
int compare(char *str1, char *str2) {
int len = strlen(str1);
int beda = 0;
for (int i=0; i<len; i++) {
if (str1[i] >= 'A' && str1[i] <= 'Z') str1[i] += 32;
if (str2[i] >= 'A' && str2[i] <= 'Z') str2[i] += 32;
if (str1[i] != str2[i]) beda++;
if (str2[i] == '') {
beda++;
return beda;
}
}
if (strlen(str2) > len) {
beda += strlen(str2) - len;
}
return beda;
}
int main()
{
struct list {
char npm[16];
char nama[64];
float nilai;
struct list *next;
};
struct list *awal, *akhir, *p, *Psbl, *baru;
awal = akhir = NULL;
int pilihan = 1, posisi, posisi_sekarang,posisi_data;
char cari[64], konfirmasi;
do {
switch (pilihan) {
case 1: // tambah data kedalam list
CLS;
baru = (struct list *) malloc(sizeof(struct list)); // alokasikan list baru di memori
if (baru == NULL) {
CLS;
printf("\nMemori tidak cukup.");
PAUSE;
break;
}
printf("\nNPM : "); scanf("%s", baru->npm); getchar();
printf("Nama : "); scanf("%[^\n]", baru->nama);
printf("Nilai : "); scanf("%f", &baru->nilai);
if (awal == NULL) {
baru->next = NULL;
awal = baru;
akhir = baru;
} else {
printf("\nTambahkan Data di (Default = akhir) : \n");
printf("1. Awal\n2. Tengah\n3. Akhir\n\nPilihan Anda : ");
scanf("%d", &posisi);
switch(posisi) {
case 1:
// tambah data di awal list
baru->next = awal;
awal = baru;
PAUSE;
break;
case 2:
printf("Masukan posisi data : "); scanf("%d", &posisi_data);
p = awal;
Psbl = NULL;
posisi_sekarang = 1;
while (p != NULL && posisi_sekarang < posisi_data) {
//Psbl = p;
p = p->next;
posisi_sekarang++;
}
if (p != NULL) {
// tambahkan data di tengah (posisi_data)
Psbl = p;
baru->next = p->next;
Psbl->next = baru;
}
break;
case 3:
default:
// tambah data di akhir list
akhir->next = baru;
akhir = baru;
baru->next = NULL;
PAUSE;
break;
}
}
break;
case 2:
CLS;
p = awal;
printf("\n------------------------------------------\n");
if (p == NULL) {
printf("\n List Kosong\n");
printf("\n------------------------------------------\n");
break;
} else {
while (p != NULL) {
printf("\nNPM : %s", p->npm);
printf("\nNama : %s", p->nama);
printf("\nNilai : %.2f", p->nilai);
printf("\n------------------------------------------\n");
p = p->next;
}
}
printf("\n");
printf("Masukan NPM/Nama dari data yang ingin dihapus : ");
scanf("%s", cari);
CLS;
Psbl = NULL;
p = awal;
while (p != NULL) {
if (compare(p->npm, cari) == 0 || compare(p->nama, cari) == 0) {
printf("\n\n------------------------------------------\n");
printf("\nNPM : %s", p->npm);
printf("\nNama : %s", p->nama);
printf("\nNilai : %.2f", p->nilai);
printf("\n------------------------------------------\n");
printf("\nIngin menghapus data di atas (y/n) : ");
scanf("%s", &konfirmasi);
if (konfirmasi == 'y' || konfirmasi == 'Y') {
if (awal->next == NULL) {
awal = NULL;
akhir = awal;
} else if (p == awal) {
// hapus di awal
Psbl = awal;
awal = Psbl->next;
} else if (p == akhir) {
// hapus di akhir
Psbl->next = NULL;
akhir = Psbl;
}
else {
// hapus di tengah
Psbl->next = p->next;
}
printf("\nData berhasil dihapus.\n\n");
} else {
printf("\nData tidak jadi dihapus.\n\n");
}
break;
}
Psbl = p;
p = p->next;
}
if (p == NULL) {
printf("\n\nNPM/Nama tidak ditemukan !\n\n");
}
PAUSE;
break;
case 3:
CLS;
printf("\nMasukan NPM/Nama yang di cari : ");
scanf("%s", cari);
p = awal;
while (p != NULL) {
if (compare(p->npm, cari) == 0 || compare(p->nama, cari) == 0) {
printf("\n\n------------------------------------------\n");
printf("\nNPM : %s", p->npm);
printf("\nNama : %s", p->nama);
printf("\nNilai : %.2f", p->nilai);
printf("\n------------------------------------------\n");
PAUSE;
break;
}
p = p->next;
}
if (p == NULL) {
printf("\nData tidak ditemukan ! \n\n");
PAUSE;
}
break;
case 4: // tampilkan list
CLS;
p = awal;
printf("\n------------------------------------------\n");
if (p == NULL) {
printf("\n List Kosong\n");
printf("\n------------------------------------------\n");
} else {
while (p != NULL) {
printf("\nNPM : %s", p->npm);
printf("\nNama : %s", p->nama);
printf("\nNilai : %.2f", p->nilai);
printf("\n------------------------------------------\n");
p = p->next;
}
}
printf("\n");
PAUSE;
break;
case 0: break;
default:
printf("\nPilihan salah !\n");
break;
}
CLS;
printf("\n1. Tambahkan data kedalam list\n"
"2. Hapus data\n"
"3. Pencarian data\n"
"4. Tampilkan list\n"
"0. Keluar\n\n");
printf("Pilihan Anda : ");
scanf("%d", &pilihan);
} while (pilihan > 0);
return 0;
}
List Berkait/Linked List Sederhana (Tambah & Tampilkan Data)
#include <stdio.h> #include <stdlib.h> #define CLS system("cls"); #define PAUSE {printf("\n"); system("pause");} int main() { struct list { char npm[16]; char nama[64]; float nilai; struct list *next; }; struct list *awal, *akhir, *p, *baru; awal = akhir = NULL; int pilihan = 1; do { switch (pilihan) { case 1: // tambah data kedalam list CLS; baru = (struct list *) malloc(sizeof(struct list)); // alokasikan list baru if (baru == NULL) { CLS; printf("\nMemori tidak cukup."); PAUSE; break; } printf("\nNPM : "); scanf("%s", baru->npm); getchar(); printf("Nama : "); scanf("%[^\n]", baru->nama); printf("Nilai : "); scanf("%f", &baru->nilai); if (awal == NULL) { awal = baru; akhir = baru; } else { // tambah di akhir list akhir->next = baru; akhir = baru; } baru->next = NULL; PAUSE; break; case 2: // tampilkan list CLS; p = awal; printf("\n------------------------------------------\n"); while (p != NULL) { printf("\nNPM : %s", p->npm); printf("\nNama : %s", p->nama); printf("\nNilai : %.2f", p->nilai); printf("\n------------------------------------------\n"); p = p->next; } printf("\n"); PAUSE; break; case 0: break; default: printf("\nPilihan salah !\n"); break; } CLS; printf("\n1. Tambahkan data kedalam list\n2. Tampilkan list\n0. Keluar\n\n"); printf("Pilihan Anda : "); scanf("%d", &pilihan); } while (pilihan > 0); return 0; }
#include <stdio.h> #include <stdlib.h> #define CLS system("cls"); #define PAUSE {printf("\n"); system("pause");} int main() { struct list { char npm[16]; char nama[64]; float nilai; struct list *next; }; struct list *awal, *akhir, *p, *baru; awal = akhir = NULL; int pilihan = 1; do { switch (pilihan) { case 1: // tambah data kedalam list CLS; baru = (struct list *) malloc(sizeof(struct list)); // alokasikan list baru if (baru == NULL) { CLS; printf("\nMemori tidak cukup."); PAUSE; break; } printf("\nNPM : "); scanf("%s", baru->npm); getchar(); printf("Nama : "); scanf("%[^\n]", baru->nama); printf("Nilai : "); scanf("%f", &baru->nilai); if (awal == NULL) { awal = baru; akhir = baru; } else { // tambah di akhir list akhir->next = baru; akhir = baru; } baru->next = NULL; PAUSE; break; case 2: // tampilkan list CLS; p = awal; printf("\n------------------------------------------\n"); while (p != NULL) { printf("\nNPM : %s", p->npm); printf("\nNama : %s", p->nama); printf("\nNilai : %.2f", p->nilai); printf("\n------------------------------------------\n"); p = p->next; } printf("\n"); PAUSE; break; case 0: break; default: printf("\nPilihan salah !\n"); break; } CLS; printf("\n1. Tambahkan data kedalam list\n2. Tampilkan list\n0. Keluar\n\n"); printf("Pilihan Anda : "); scanf("%d", &pilihan); } while (pilihan > 0); return 0;
infonya sangat bermanfaat bagi ane
BalasHapuslampu service hp