pointer
*Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori
dari suatu
variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di
dalam
memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama
Operator &
Operator *
LINKED LIST
Linked list adalah sekumpulan elemen bertipe sama, yang mempunyai keterurutan
tertentu, yang setiap elemennya terdiri dari dua bagian Linked list juga merupakan
suatu cara untuk menyimpan data dengan struktur sehingga dapat secara otomatis
menciptakan suatu tempat baru untuk menyimpan data yangdiperlukan. Struktur ini
lebih dinamis karena banyaknya elemen dengan mudah ditambah atau dikurangi,
berbeda dengan array yang ukurannya tetap. berikut gambaran kecil mengenai
linked list.
Dalam ilmu komputer, sebuah linked list adalah struktur data yang terdiri dari sekelompok
node yang bersama-sama mewakili berurutan. Berdasarkan bentuk yang paling sederhana,
setiap node terdiri data dan referensi (dengan kata lain, link) ke node berikutnya dalam
urutan; lebih varian kompleks menambahkan link tambahan. Struktur ini memungkinkan
untuk penyisipan efisien atau penghapusan elemen dari posisi apapun dalam urutan.
Sebuah linked list yang simpul berisi dua bidang: nilai integer dan link ke node berikutnya. Node terakhir ini
terkait dengan terminator digunakan untuk menandakan akhir dari daftar.
Daftar terkait adalah salah satu struktur data sederhana dan paling umum. Mereka dapat
digunakan untuk mengimplementasikan beberapa umum lainnya jenis abstrak Data, termasuk
daftar (tipe data abstrak), tumpukan, antrian, array asosiatif, dan S-ekspresi, meskipun tidak
jarang untuk mengimplementasikan struktur data lainnya secara langsung tanpa
menggunakan daftar sebagai dasar pelaksanaan.
Manfaat utama dari linked list lebih konvensional Array adalah bahwa unsur-unsur
daftar mudah dapat dimasukkan atau dihapus tanpa realokasi atau reorganisasi seluruh
struktur karena item data tidak perlu disimpan contiguously dalam memori atau pada disk,
sedangkan array harus dinyatakan dalam kode sumber, sebelum kompilasi dan menjalankan
program. Daftar terhubung memungkinkan penyisipan dan penghapusan node pada setiap
titik dalam daftar, dan dapat melakukannya dengan sejumlah konstan operasi jika link
sebelumnya untuk link yang ditambahkan atau dihapus dipertahankan selama daftar traversal.
Di sisi lain, terkait daftar sederhana sendiri tidak mengizinkan akses acak untuk data,
atau bentuk pengindeksan efisien. Dengan demikian, banyak operasi dasar - seperti
memperoleh node terakhir dari daftar (dengan asumsi bahwa node terakhir tidak
dipertahankan sebagai acuan simpul terpisah di struktur list), atau menemukan node yang
berisi datum tertentu, atau mencari tempat di mana simpul baru harus dimasukkan - mungkin
memerlukan pemindaian berurutan dari sebagian besar atau semua elemen daftar.
Keuntungan dan kerugian dari menggunakan daftar terkait diberikan di bawah ini.
Sebuah daftar sendiri-sendiri terkait yang node berisi dua bidang: nilai integer dan link ke node berikutnya
Sebuah daftar ganda terkait yang node berisi tiga bidang: nilai integer, forward link ke node berikutnya, dan
link ke belakang ke node sebelumnya
Sebuah teknik yang dikenal sebagai XOR-linking memungkinkan daftar ganda terkait untuk
dilaksanakan menggunakan field link tunggal dalam setiap node. Namun, teknik ini
membutuhkan kemampuan untuk melakukan operasi bit pada alamat, dan karena itu mungkin
tidak tersedia dalam beberapa bahasa tingkat tinggi.
Banyak sistem operasi modern menggunakan daftar ganda terkait untuk mempertahankan
referensi untuk proses yang aktif, benang, dan benda-benda lain yang dinamis. [2] Sebuah
strategi umum untuk rootkit untuk menghindari deteksi adalah untuk memutus diri dari daftar
ini. [3]
elingkar Linked
Dalam terakhir simpul dari daftar, bidang hubungan sering berisi nol referensi, nilai khusus
yang digunakan untuk menunjukkan kurangnya node lebih lanjut. Sebuah konvensi kurang
umum adalah untuk membuatnya menunjuk ke node pertama dari daftar; dalam hal bahwa
daftar dikatakan 'lingkaran' atau 'sirkuler terkait'; selain itu dikatakan 'terbuka' atau 'linier'.
Dalam kasus melingkar linked list ganda, satu-satunya perubahan yang terjadi adalah bahwa
akhir, atau "ekor", dari daftar kata terkait kembali ke depan, atau "kepala", dari daftar dan
sebaliknya.
Melingkar Linked
Dalam terakhir simpul dari daftar, bidang hubungan sering berisi nol referensi, nilai khusus
yang digunakan untuk menunjukkan kurangnya node lebih lanjut. Sebuah konvensi kurang
umum adalah untuk membuatnya menunjuk ke node pertama dari daftar; dalam hal bahwa
daftar dikatakan 'lingkaran' atau 'sirkuler terkait'; selain itu dikatakan 'terbuka' atau 'linier'.
Dalam kasus melingkar linked list ganda, satu-satunya perubahan yang terjadi adalah bahwa
akhir, atau "ekor", dari daftar kata terkait kembali ke depan, atau "kepala", dari daftar dan
sebaliknya.
Ketika memanipulasi daftar terkait di tempat, perawatan harus diambil untuk tidak
menggunakan nilai-nilai yang telah valid dalam tugas sebelumnya. Hal ini membuat
algoritma untuk memasukkan atau menghapus linked list node agak halus. Bagian ini
memberikan pseudocode untuk menambahkan atau menghapus node dari daftar tunggal,
ganda, dan sirkuler terkait di tempat. Sepanjang kita akan menggunakan nol untuk merujuk
kepada penanda akhir-of-daftar atau sentinel, yang dapat diimplementasikan dalam beberapa
cara.
Daftar linear terkait
Daftar tunggal terkait
Struktur data simpul kami akan memiliki dua bidang. Kami juga menjaga firstNode variabel
yang selalu menunjuk ke node pertama dalam daftar, atau null untuk daftar kosong.
record Node
{
Data; // Data yang disimpan di node
Node berikutnya // A referensi ke node berikutnya, null untuk node
terakhir
}
Daftar catatan
{
Node firstNode // poin ke simpul pertama dari daftar; null untuk
daftar kosong
}
Traversal dari daftar tunggal linked sederhana, dimulai pada node pertama dan mengikuti
setiap tautan berikutnya sampai kita datang ke akhir:
simpul: = list.firstNode
sementara simpul tidak null
(melakukan sesuatu dengan node.data)
simpul: = node.next
Kode berikut menyisipkan simpul setelah simpul yang ada dalam daftar sendiri-sendiri
terkait. Diagram menunjukkan cara kerjanya. Memasukkan sebuah node sebelum yang sudah
ada tidak dapat dilakukan secara langsung; sebaliknya, seseorang harus melacak node
sebelumnya dan memasukkan sebuah node setelah.
node.next: = newNode
Memasukkan pada awal daftar membutuhkan fungsi yang terpisah. Ini membutuhkan
memperbarui firstNode.
Fungsi insertBeginning (Daftar daftar, Node newNode) // memasukkan simpul
sebelum saat pertama simpul
newNode.next: = list.firstNode
list.firstNode: = newNode
Demikian pula, kita memiliki fungsi untuk menghapus node setelah node yang diberikan, dan
untuk menghapus node dari awal daftar. Diagram menunjukkan bekas. Untuk menemukan
dan menghapus node tertentu, satu lagi harus melacak elemen sebelumnya.
dan membuat kedua insertBeginning() dan removeBeginning() tidak perlu. Dalam hal
ini, data pertama yang berguna dalam daftar akan ditemukan di list. firstNode .next
Insert
Istilah Insert berarti menambahkan sebuah simpul baru
ke dalam suatu linked list.
IsEmpty
Fungsi ini menentukan apakah linked list kosong atau
tidak.
Find First
Fungsi ini mencari elemen pertama dari linked list
Find Next
Fungsi ini mencari elemen sesudah elemen yang
ditunjuk now
Retrieve
Fungsi ini mengambil elemen yang ditunjuk oleh now.
Elemen tersebut lalu dikembalikan oleh fungsi.
Update
Fungsi ini mengubah elemen yang ditunjuk oleh now
dengan isi dari sesuatu
Delete Now
Fungsi ini menghapus elemen yang ditunjuk oleh now.
Jika yang dihapus
adalah elemen pertama dari linked list (head), head akan
berpindah ke
elemen berikut.
Delete Head
Fungsi ini menghapus elemen yang ditunjuk head.
Head berpindah ke elemen sesudahnya.
Clear
Fungsi ini menghapus linked list yang sudah ada.
Fungsi ini wajib dilakukan
bila anda ingin mengakhiri program yang
inputData();
bukaData();
editData();
cariData();
hapusData();
printf("|
5. Hapus Data
|\n");
printf("|
0. Exit
|\n");
printf("=========================================\n");
printf("Masukan Pilihan [0..5] : ");scanf("%d",&menuPilihan);
system("CLS");
}while(menuPilihan < 0 || menuPilihan > 5);
switch(menuPilihan){
case 1:inputData();break;
case 2:bukaData();break;
case 3:cariData();break;
case 4:editData();break;
case 5:hapusData();break;
}system("PAUSE");
}
return 0;
}
void inputData()
{
system("CLS");
FILE *pfiledata;
pfiledata=fopen("data.txt","ab");
char kode[12],artis[20],jenis_musik[100];
int i=5,ketemu=0;
printf("==========================================\n");
printf("|
Input Nama Artis
|\n");
printf("==========================================\n");
printf(" kode musik
: ");fflush(stdin);gets(music.kode);
printf(" Nama Artis
: ");fflush(stdin);gets(music.artis);
printf(" Jenis Musik
: ");fflush(stdin);gets(music.jenis_musik);
printf("Judul lagu
: ");fflush(stdin);gets(music.judul_lagu);
printf("==========================================\n");
fwrite(&music,sizeof(music),1,pfiledata);
fclose(pfiledata);
}
void cariData()
{
system("CLS");
FILE *pfiledata;
pfiledata=fopen("data.txt","rb");
char x[20];
int ketemu;
char jawab;
printf("==================================\n");
printf("|
Masukan Berdasarkan Nama
|\n");
printf("|
|\n");
printf("|
Masukan Nama Artis :\n");
printf("==================================\n");
fflush(stdin);gets(x);
system("CLS");
fread(&music,sizeof(music),1,pfiledata);
ketemu=0;
do{
if(strcmpi(music.artis,x)==0)
{
printf("|
Data Data Musik
|\n");
printf("===========================================\n");
printf("
kode
: %s
\n",music.kode);
printf("
Nama Artis
: %s
\n",x);
printf("
Jenis Musik
: %s
\n",music.jenis_musik);
printf("
Judul Lagu
: %s \n \n",music.judul_lagu);
printf("===========================================\n");
ketemu=1; }
fread(&music,sizeof(music),1,pfiledata);
}while(!feof(pfiledata));
if(!ketemu)
{
printf("DATA TIDAK DITEMUKAN\n\n");
}
fclose(pfiledata);
}
void editData()
{
system("CLS");
FILE *pfiledata, *pfiletemp;
pfiledata=fopen("data.txt","rb");
pfiletemp=fopen("datatemp.txt","wb");
char x[10];
int ketemu;
char jawab;
printf("=====================================================\n");
printf("|
|\n");
printf("|
Cari Data Berdasarkan kode Lapangan
|\n");
printf("|
Masukan kode
|\n");
printf("|
|\n");
printf("=====================================================\n");
fflush(stdin);gets(x);
system("CLS");
fread(&music,sizeof(music),1,pfiledata);
ketemu = 0;
jawab = 'Y';
do
{
if(strcmpi(music.kode,x)==0)
{
printf("===========================================\n");
printf("|
EDIT DATA Data Musik |\n");
printf("===========================================\n");
printf("
kode
: %s
\n",x);
printf("
Nama Artis
: %s
\n",music.artis);
printf("
Jenis Musik
: %s
\n",music.jenis_musik);
printf("
Judul Lagu
: %s
\n",music.judul_lagu);
printf("===========================================\n");
printf("|
APAKAH KAMU YAKIN ? [Y/T] :
|\n");
printf("===========================================\n");
scanf("%c",&jawab);
if(toupper(jawab)=='Y')
{
system("CLS");
printf(" kode
: ");fflush(stdin);gets(music.kode);
printf(" Nama Artis
: ");fflush(stdin);gets(music.artis);
printf(" Jenis Musik
: ");fflush(stdin);gets(music.jenis_musik);
printf(" Judul Lagu
: ");fflush(stdin);gets(music.judul_lagu);
fwrite(&music,sizeof(music),1,pfiletemp);
ketemu=1;
}
else
fwrite(&music,sizeof(music),1,pfiletemp);
}
else
{
fwrite(&music,sizeof(music),1,pfiletemp);
}
fread(&music,sizeof(music),1,pfiledata);
}while(!feof(pfiledata));
if(!ketemu)
{
printf("
}
fclose(pfiletemp);
fclose(pfiledata);
remove("data.txt");
rename("datatemp.txt","data.txt");
}
void hapusData()
{
system("CLS");
FILE *pfiletemp, *pfiledata;
pfiledata=fopen("data.txt","rb");
pfiletemp=fopen("datatemp.txt","wb");
char x[10];
int ketemu;
char jawab;
printf(" ==============================================\n");
printf("
\n");
printf("
Hapus Data Berdasarkan kode Musik
\n");
printf("
Masukan kode Musik
\n");
printf("
\n");
printf(" ==============================================\n");
fflush(stdin);gets(x);
system("CLS");
fread(&music,sizeof(music),1,pfiledata);
ketemu = 0;
jawab = 'Y';
do
{
if(strcmpi(music.kode,x)==0)
{
printf("===========================================\n");
printf("
DATA Data Musik
\n");
printf("===========================================\n");
printf("
kode
: %-10s
\n",x);
printf("
Nama Artis
: %-10s
\n",music.artis);
printf("
Jenis Musik
: %-10s
\n",music.jenis_musik);
printf("
Judul Lagu
: %-10s
\n",music.judul_lagu);
printf("===========================================\n");
printf("DATA AKAN DI HAPUS, ARE YOU SURE ? [Y/T] :
");
scanf("%c",&jawab);
if(toupper(jawab)=='Y')
{
printf("DATA DIHAPUS\n");
ketemu=1;
}
else
fwrite(&music,sizeof(music),1,pfiletemp);
}
else
{
fwrite(&music,sizeof(music),1,pfiletemp);
}
fread(&music,sizeof(music),1,pfiledata);
}while(!feof(pfiledata));
if(!ketemu)
{
printf("DATA TIDAK 'DI HAPUS'\n\n");
}
fclose(pfiletemp);
fclose(pfiledata);
remove("data.txt");
rename("datatemp.txt","data.txt");
}
void bukaData()
{
system("CLS");
FILE *pfiledata;
pfiledata=fopen("data.txt","rb");
typedef struct
{char kode[12], artis[20], jenis_musik[40], judul_lagu[30];
}data_musik;
data_musik music;
int i=5,j=1;
printf("===========================================\n");
printf ("|
Data Musik
|\n");
printf ("===========================================\n");
rewind(pfiledata);
while(fread(&music,sizeof(music),1,pfiledata)){
printf("%i.",j);
printf(" kode
printf(" Nama Artis
printf(" Jenis Musik
printf(" Judul Lagu
i=i+5;
j++;
}
fclose(pfiledata);
}
: %s\n",music.kode);
: %s\n",music.artis);
: %s\n",music.jenis_musik);
: %s \n \n",music.judul_lagu);