Berikut adalah contoh struktur dan daftar berantai didalam pemrograman bahasa C :
Contoh 1
Sumber : Abdul Kadir, 2003 Pemrograman Dasar Turbo C untuk IBM PC.
Contoh 1
/* ------------------------------------ */
/* file program: ALOKASI.C */
/* contoh memesan ruang dalam heap */
/* ------------------------------------ */
#include "stdio.h"
main()
{
char *ptr;
clrscr();
ptr=(char *) malloc(500 * sizeof(char));
if(!ptr)
puts("memori tak cukup !");
else
{
puts("Ok. Pengalokasian memori sudah dilakukan.");
puts("------------------");
free(ptr); /* bebaskan kembali memori yang ditunjuk oleh pointer */
puts("blok memori dalam heap dibebaskan kembali.");
}
getch();
}Contoh 2/* -------------------------------------- */
/* file program : INFO-TG1.C */
/* contoh melewatkan elemen struktur kefungsi */
/* -------------------------------------- */
#include "stdio.h"
void cetak_info_tanggal(int tg, int bl, int thn);
main()
{
struct data_tanggal
{
int tanggal;
int bulan;
int tahun;
};
struct data_tanggal saat_proses={12,9,1989};
cetak_info_tanggal(saat_proses.tanggal,
saat_proses.bulan,
saat_proses.tahun);
getch();
}
void cetak_info_tanggal(int tg, int bl, int th)
{
static char *nama_bulan[]=
{
"Kode bulan salah !",
"Januari","Februari","Maret","April",
"Mei","Juni","Juli","Agustus",
"September","Oktober","November","Desember"
};
printf("%d %s %d\n",tg,nama_bulan[bl],th);
}Contoh 3/* -------------------------------------- */
/* file program : INFO-TG2.C */
/* contoh melewatkan struktur ke suatu fungsi */
/* -------------------------------------- */
#include "stdio.h"
struct data_tanggal
{
int tanggal;
int bulan;
int tahun;
};
void cetak_info_tanggal(struct data_tanggal unit_tgl);
main()
{
struct data_tanggal saat_proses={12,9,1989};
cetak_info_tanggal(saat_proses);
getch();
}
void cetak_info_tanggal(struct data_tanggal unit_tgl)
{
static char *nama_bulan[]=
{
"Kode bulan salah !",
"Januari","Februari","Maret","April",
"Mei","Juni","Juli","Agustus",
"September","Oktober","November","Desember"
};
printf("%d %s %d\n",unit_tgl.tanggal,
nama_bulan[unit_tgl.bulan],
unit_tgl.tahun);
}Contoh 4# includeContoh 5main() { struct zodiak /* definisi tipe struktur */ { char nama[11]; int tgl_awal; int bln_awal; int tgl_akhir; int bln_akhir; }; struct zodiak bintang [] = { {"ARIES", 21, 3, 19, 4}, {"TAURUS", 20, 4, 20, 5}, {"GEMINI", 21, 5, 20, 6}, {"CANCER", 21, 6, 22, 7}, {"LEO", 23, 7, 22, 8}, {"VIRGO", 23, 8, 22, 9}, {"LIBRA", 23, 9, 22, 10}, {"SCORPIO", 23, 10, 21, 11}, {"SAGITARIUS", 22, 11, 21, 12}, {"CAPRICORN", 22, 12, 19, 1}, {"AQUARIUS", 20, 1, 18, 2}, {"PISCES", 19, 2, 20, 3} }; int i, tg_lhr,bl_lhr,th_lhr; clrscr(); printf("Tanggal lahir anda (xx-xx-xxxx): "); scanf("%d- %d-%d", &tg_lhr, &bl_lhr, &th_lhr); for ( i=0; ; i++) if ( (tg_lhr >= bintang[i].tgl_awal && bl_lhr == bintang[i].bln_awal ) || (tg_lhr <= bintang[i].tgl_akhir && bl_lhr == bintang[i].bln_akhir ) ) break; printf("Bintang anda adalah %s\n",bintang[i].nama); getch(); }
/* ------------------------------------ */
/* file program: ALOKASI.C */
/* contoh memesan ruang dalam heap */
/* ------------------------------------ */
#include "stdio.h"
main()
{
char *ptr;
clrscr();
ptr=(char *) malloc(65000 * sizeof(char));
if(!ptr)
puts("memori tak cukup !");
else
{
puts("Ok. Pengalokasian memori sudah dilakukan.");
puts("------------------");
free(ptr); /* bebaskan kembali memori yang ditunjuk oleh pointer */
puts("blok memori dalam heap dibebaskan kembali.");
}
getch();
}Contoh 6 /* ------------------------------------------------------ */
/* file program LIST1.C */
/* contoh membuat daftar berantai (link list */
/* dan cara menampilkan isinya */
/* ------------------------------------------------------ */
#include "stdio.h"
#include "ctype.h"
#include "conio.h"
#include "string.h"
#define PANJANG_NOMOR 5
#define PANJANG_NAMA 20
struct simpul_siswa
{
char nomor[PANJANG_NOMOR+1];
char nama[PANJANG_NAMA+1];
struct simpul_siswa *lanjutan;
};
struct simpul_siswa *ptr_kepala=NULL; /* ujung link list */
void pemasukan_data(void);
void masukan_string( char *keterangan, char *masukan, int panjang_maks);
void tampilkan_data(void);
/*--------------------------------*/
main()
{
clrscr();
pemasukan_data();
tampilkan_data();
getch();
}
/*--------------------------------*/
void pemasukan_data(void)
{
char jawaban;
struct simpul_siswa *ptr_baru;
do
{
ptr_baru=(struct simpul_siswa *)malloc(sizeof(struct simpul_siswa));
if(ptr_baru)
{
masukan_string("Nomor siswa : ",ptr_baru->nomor,PANJANG_NOMOR);
masukan_string("Nama siswa : ",ptr_baru->nama,PANJANG_NAMA);
ptr_baru->lanjutan=ptr_kepala;
ptr_kepala=ptr_baru;
printf("Memasukandata lagi [Y/T]? ");
do
jawaban=toupper(getch());
while(!(jawaban=='Y'||jawaban=='T'));
printf("%c\n",jawaban);
}
else
{
puts("Memori tak cukup !");
break; /*keluar dari dowhile*/
}
}
while (jawaban=='Y');
}
void masukan_string(char *keterangan, char *masukan, int panjang_maks)
{
char st[256];
do
{
printf(keterangan); /* tampilkan keterangan */
gets(st); /*baca string darik keyboard*/
if(strlen(st)>panjang_maks)
printf("tferlralu panjang. maksimum %d karakternya\n,panjang_maks");
}
while(strlen(st)>panjang_maks);
strcpy(masukan,st); /*salin string st ke masukan */
}
void tampilkan_data(void)
{
struct simpul_siswa *ptr_sementara;
puts("\nisi data berantai : \n");
ptr_sementara=ptr_kepala;
while(ptr_sementara)
{
printf("%s %s\n",ptr_sementara->nomor,ptr_sementara->nama);
ptr_sementara=ptr_sementara->lanjutan;
}
}Contoh 7 /* ------------------------------------------------------ */
/* file program LIST2.C */
/* program daftar berantai (link list) */
/* - memasukan data */
/* - meneampilkan data */
/* - menghapus data */
/* ------------------------------------------------------ */
#include "stdio.h"
#include "ctype.h"
#include "conio.h"
#include "string.h"
#define PANJANG_NOMOR 5
#define PANJANG_NAMA 20
#define ENTER 13
struct simpul_siswa
{
char nomor[PANJANG_NOMOR+1];
char nama[PANJANG_NAMA+1];
struct simpul_siswa *lanjutan;
};
/* ------------- deklarasi variabel global ---------------------*/
struct sismpul_siswa *ptr_kepala=NULL; /* ujung linklist */
struct simpul_siswa *ptr_pos_data; /* posisi data */
struct simpul_siswa *ptr_pendahulu; /* posisi pendahulu dari ptr_pos_data*/
/* ------------- deklarasi fungsi ------------------------------*/
void pemasukan_data(void);
void masukan_string( char *keterangan, char *masukan, int panjang_maks);
void tampilkan_data(void);
void cari_data(char *nama);
void hapus_data(void);
void menu_pilihan(void);
/*-------------- program utama ----------------------------------*/
main()
{
clrscr();
for( ; ; )
{
menu_pilihan();
puts("Tekanlah Enter untuk melanjutkan.");
while(getch() !=ENTER); /* baca enter */
puts(""); /* pindah baris */
}
}
/*-------------- akhir program utama ----------------------------*/
void pemasukan_data(void)
{
char jawaban;
struct simpul_siswa *ptr_baru;
do
{
ptr_baru=(struct simpul_siswa *)malloc(sizeof(struct simpul_siswa));
if(ptr_baru)
{
masukan_string("Nomor siswa : ",ptr_baru->nomor,PANJANG_NOMOR);
masukan_string("Nama siswa : ",ptr_baru->nama,PANJANG_NAMA);
ptr_baru->lanjutan=ptr_kepala;
ptr_kepala=ptr_baru;
printf("Memasukandata lagi [Y/T]? ");
do
jawaban=toupper(getch());
while(!(jawaban=='Y'||jawaban=='T'));
printf("%c\n",jawaban);
}
else
{
puts("Memori tak cukup !");
break; /*keluar dari dowhile*/
}
}
while (jawaban=='Y');
}
void masukan_string(char *keterangan, char *masukan, int panjang_maks)
{
char st[256];
do
{
printf(keterangan); /* tampilkan keterangan */
gets(st); /*baca string darik keyboard*/
if(strlen(st)>panjang_maks)
printf("tferlralu panjang. maksimum %d karakternya\n,panjang_maks");
}
while(strlen(st)>panjang_maks);
strcpy(masukan,st); /*salin string st ke masukan */
}
void tampilkan_data(void)
{
struct simpul_siswa *ptr_sementara;
puts("\nisi data berantai : \n");
ptr_sementara=ptr_kepala;
while(ptr_sementara)
{
printf("%s %s\n",ptr_sementara->nomor,ptr_sementara->nama);
ptr_sementara=ptr_sementara->lanjutan;
}
}
void cari_data( char *nama )
/*---untuk mencari nama pada daftar berantai---*/
/* jika nama ditemukan, maka */
/* 1. ptr_pos_data menunjuk simpul yang berisi */
/* nama yang dicari. */
/* 2. ptr_pendahulu menunjuk simpul pendahulu */
/* dari simpul posisi nama yang dicari. */
/* jika berisi NULL, menyatakan bahwa */
/* ptr_pendahulu menunjuk simpul yang */
/* ditunjuk oleh ptr_kepala. */
/* jika nama tak ditemukan, */
/* ptr_pos_data berisi NULL */
/* ------------------------------------------- */
{
ptr_pendahulu=NULL;
ptr_pos_data=ptr_kepala;
while(ptr_pos_data)
if(strcmp(nama, ptr_pos_data->nama) !=0)
{
ptr_pendahulu=ptr_pos_data;
ptr_pos_data=ptr_pos_data->lanjutan;
}
else
break; /* ketemu , selesai */
}
void hapus_data()
{
char nama[21];
masukan_string("Masukan nama yang akan dihapus: ",nama,20);
cari_data(nama);
if(ptr_pos_data==NULL)
puts("Nama tak ditemukan pada daftar berantai.");
else
{
/* --- proses penghapusan --- */
if(ptr_pendahulu==NULL)
/* --- simpul ujung yang akan dihaous---*/
ptr_kepala=ptr_kepala->lanjutan;
else
/* --- bukan simpul yang akan dihapus --- */
ptr_pendahulu->lanjutan=ptr_pos_data->lanjutan;
free(ptr_pos_data); /* hapus yang ditunjuk oleh ptr_pos_data */
puts("ok. penghapusan sudah dilakukan.");
}
}
void menu_pilihan(void)
{
char pilihan;
puts("_______ MENU PILIHAN __________");
puts("| |");
puts("| [1] Memasukan data |");
puts("| [2] Menghapus data |");
puts("| [3] Menampilkan data |");
puts("| [4] Selesai |");
puts("| |");
puts("|_____________________________|");
printf("Pilihan anda (1..4): ");
do
pilihan=getch();
while(pilihan<'1'||pilihan > '4');
printf("%c\n\n",pilihan);
switch(pilihan-'0')
{
case 1 : pemasukan_data();
break;
case 2 : hapus_data();
break;
case 3 : tampilkan_data();
break;
case 4 : exit(0); /*selesai */
}
}Contoh 8 /* ----------------------------------------------- */
/* file program: REKAN.C */
/* contoh mengakses elemen struktur */
/* ----------------------------------------------- */
#include "stdio.h"
main()
{
struct data_tanggal /* definisi tipe data_tanggal */
{
int tanggal;
int bulan;
int tahun;
};
struct data_rekan /* definisi tipe data rekan */
{
char nama[31];
struct data_tanggal tgl_lahir;
};
struct data_rekan info_rekan; /* deklarasi variabel */
/* struktur info rekan */
clrscr();
/* pemasukkandat keelemen variabel structur */
strcpy(info_rekan.nama, "MAHMUD ARSANI");
info_rekan.tgl_lahir.tanggal=14;
info_rekan.tgl_lahir.bulan=2;
info_rekan.tgl_lahir.tahun=1987;
/* penampilan elemen variabel structur */
printf("Nama : %s\n",info_rekan.nama);
printf("Tanggal lahir : %d-%d-%d\n",
info_rekan.tgl_lahir.tanggal,
info_rekan.tgl_lahir.bulan,
info_rekan.tgl_lahir.tahun);
getch();
}
Contoh 9 /* ----------------------------------------------- */
/* file program: REKAN2.C */
/* contoh array struktur */
/* yang digunakan untuk memegang data rekan */
/* ----------------------------------------------- */
#include "stdio.h"
#include "string.h"
#include "ctype.h"
#include "conio.h"
#define MAKS 20
main()
{
struct data_tanggal /* definisi tipe data_tanggal */
{
int tanggal;
int bulan;
int tahun;
};
struct data_rekan /* definisi tipe data rekan */
{
char nama[31];
struct data_tanggal tgl_lahir;
};
struct data_rekan info_rekan[MAKS]; /* deklarasi */
/* array struktur */
char tombol;
int i,jum_rekan=0;
clrscr();
/* pemasukkandat keelemen variabel structur */
puts ("Data rekan-rekan");
do
{ printf("Nama : ");
gets(info_rekan[jum_rekan].nama);
printf("Tanggal lahir (xx-xx-xxxx: ");
scanf("%d-%d-%d",&info_rekan[jum_rekan].tgl_lahir.tanggal,
&info_rekan[jum_rekan].tgl_lahir.bulan,
&info_rekan[jum_rekan].tgl_lahir.tahun);
fflush(stdin); /* hapus sisa data dari penampungan keyboard */
jum_rekan++;
printf("\nmau masukkan lagi (Y/T)? ");
tombol=toupper(getch());
while(!(tombol=='T'||tombol=='Y'))
tombol=toupper(getch());
printf("%c\n\n",tombol);
getch();
}
while(tombol=='Y');
/* penampilan elemen variabel structur */
puts("data rekan : NAMA-TANGGAL LAHIR\n");
for(i=0;i>jum_rekan;i++)
printf("%-21s %d-%d-%d\n",info_rekan[i].nama,
info_rekan[i].tgl_lahir.tanggal,
>jum_rekan;i++)
printf("%-21s %d-%d-%d\n",info_rekan[i].nama,
info_rekan[i].tgl_lahir.tanggal,
info_rekan[i].tgl_lahir.bulan,
info_rekan[i].tgl_lahir.tahun);
getch();
}
info_rekan[i].tgl_lahir.bulan,
info_rekan[i].tgl_lahir.tahun);
getch();
}
Contoh 10 /* ----------------------------------- */
/* file program: XY.C */
/* contoh mengubah elemen suatu struktur */
/* melalui argumen suatu fungsi */
/* ------------------------------------ */
#include "stdio.h"
void tukar_xy(int *x, int *y); /* deklarasi fungsi */
main()
{
struct koordinat
{
int x;
int y;
};
struct koordinat posisi ={21,34};
clrscr();
printf("x,y semula ---> %d,%d\n",posisi.x,posisi.y);
tukar_xy(&posisi.x,&posisi.y);
printf("x,y kini ---> %d, %d\n",posisi.x,posisi.y);
getch();
}
void tukar_xy(int *x, int *y)
{
int z;
z=*x;
*x=*y;
*y=z;
}Contoh 11 /* ----------------------------------- */
/* file program: XY2.C */
/* contoh fungsi dengan parameter */
/* berupa pointer yang menunjuk struktur */
/* ------------------------------------ */
#include "stdio.h"
struct koordinat
{
int x;
int y;
};
void tukar_xy(struct koordinat *pos_xy);
clrscr();
main()
{
struct koordinat posisi={21,34};
printf("x,y semula ---> %d,%d\n",posisi.x,posisi.y);
tukar_xy(&posisi);
printf("x,y kini ---> %d, %d\n",posisi.x,posisi.y);
getch();
}
void tukar_xy(struct koordinat *pos_xy)
{
int z;
z=(*pos_xy).x;
(*pos_xy).x=(*pos_xy).y;
(*pos_xy).y=z;
}Sumber : Abdul Kadir, 2003 Pemrograman Dasar Turbo C untuk IBM PC.


15.25
alie
Posted in:
0 komentar:
Posting Komentar