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.
0 komentar:
Posting Komentar