Rabu, 20 April 2011

Struktur dan Daftar Berantai

Berikut adalah contoh struktur dan daftar berantai didalam pemrograman bahasa C :


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
# include 

main()
{
   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();
}
Contoh 5
/* ------------------------------------ */
/* 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

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Justin Bieber, Gold Price in India