Advertisement
indraginanjar

Antrian Linear (tanpa geser data)

Mar 17th, 2011
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.81 KB | None | 0 0
  1. /*
  2.  * Indra Ginanjar
  3.  * 101100180
  4.  * Kelas Mandiri 2010 Semester 2
  5.  * STMIK Indonesia
  6.  * Padang, 17 Maret 2011
  7.  *
  8.  * @email: indraginanjar@gmail.com
  9.  *
  10.  * Mata Kuliah: Struktur Data
  11.  * Dosen: Idwar, S.Kom, M.Kom
  12.  * Tanggal diberikan tugas: 12 Maret 2011
  13.  * @description:
  14.  *     Program untuk menunjukan operasi yang berlaku pada Antrian Linear tanpa menggeser data
  15.  *     Kode program ini merupakan penyempurnaan dari kode program pada halaman 20
  16.  *     modul Struktur Data karya Ir. Wihartini, M.Eng dan Ir. Hari Soetanto, M.Sc
  17.  * @notes:
  18.  *     Program ini di tulis dan di uji menggunakan IDE CodeBlocks 8.02 dengan compiler
  19.  *     GNU GCC 4.4.5 di Linux Ubuntu 10.10, tetapi mengingat kode program ini
  20.  *     seluruhnya hanya menggunakan fungsi-fungsi standar ANSI, maka penulis
  21.  *     memperkirakan kode program ini dapat di compile tanpa masalah di compiler
  22.  *     dan/atau pun di sistem operasi lainnya.
  23.  */
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <string.h>
  27.  
  28. void visualisasikan_antrian(char *antrian, unsigned front, unsigned rear, unsigned panjangmax);
  29. void buildspace(char** dest, unsigned len);
  30.  
  31. int main()
  32. {
  33.     enum op_t {INSERT = 1, DELETE, RESET, QUIT};
  34.     int op_antrian = 0;
  35.     unsigned rear = 0;
  36.     unsigned front = 0;
  37.     unsigned maxlen = 10;
  38.     char emptych = '0';
  39.     char *antrian;
  40.     printf("\n\
  41. Indra Ginanjar\n\
  42. 101100180\n\n\
  43. Program untuk menunjukan operasi pada antrian linear tanpa menggeser data\n");
  44.     antrian = calloc(maxlen + 1, sizeof(char));
  45.     if (antrian == NULL)
  46.         exit(-1);
  47.     memset(antrian, emptych, maxlen * sizeof(char));
  48.     visualisasikan_antrian(antrian, front, rear, maxlen);
  49.     while (op_antrian != QUIT)
  50.     {
  51.         printf("\n\
  52. Operasi Antrian\n\
  53. 1. INSERT\n\
  54. 2. delete\n\
  55. 3. reset\n\
  56. 4. quit\n\
  57. pilih : ");
  58.         scanf("%d", &op_antrian);
  59.         switch (op_antrian)
  60.         {
  61.         case INSERT:
  62.             if (rear < maxlen)
  63.             {
  64.                 antrian[rear] = 'x';
  65.                 ++rear;
  66.             }
  67.             visualisasikan_antrian(antrian, front, rear, maxlen);
  68.             break;
  69.         case DELETE:
  70.             /* jika ada yang mengantri (panjang antrian > 0) maka ... */
  71.             if (rear - front > 0)
  72.             {
  73.                 antrian[front] = '0';
  74.                 ++front;
  75.             }
  76.             visualisasikan_antrian(antrian, front, rear, maxlen);
  77.             break;
  78.         case RESET:
  79.             rear = 0;
  80.             front = 0;
  81.             memset(antrian, emptych, maxlen * sizeof(char));
  82.             visualisasikan_antrian(antrian, front, rear, maxlen);
  83.         }
  84.     }
  85.     return 0;
  86. }
  87.  
  88. void buildspace(char** dest, unsigned len)
  89. {
  90.     *dest = calloc(len + 1, sizeof(char));
  91.     memset(*dest, ' ', len * sizeof(char));
  92. }
  93.  
  94.  
  95. void visualisasikan_antrian(char *antrian, unsigned front, unsigned rear, unsigned panjangmax)
  96. {
  97.     unsigned i;
  98.     char *spaces;
  99.     unsigned panjang_antrian = rear - front;
  100.     buildspace(&spaces, front * 2);
  101.     printf("\n%sf=%d", spaces, front);
  102.     buildspace(&spaces, rear * 2);
  103.     printf("\n%sr=%d", spaces, rear);
  104.  
  105.     printf("\n |");
  106.     for (i = 0; i < panjangmax; ++i)
  107.     {
  108.         if (antrian[i] != NULL)
  109.         {
  110.             printf("%c|", antrian[i]);
  111.         }
  112.     }
  113.     printf("\n Status antrian : ");
  114.     if (front == 0 && rear == 0)
  115.     {
  116.         printf("Kondisi Awal (Kosong)");
  117.     }
  118.     else if (rear == front)
  119.     {
  120.         if (rear == panjangmax)
  121.         {
  122.             printf("Penuh Tapi Kosong (Harus di RESET)");
  123.         }
  124.         else
  125.         {
  126.             printf("Kosong");
  127.         }
  128.     }
  129.     else if (rear - front > 0 && rear != panjangmax)
  130.     {
  131.         printf("Isi(%u)", panjang_antrian);
  132.     }
  133.     else if (rear == panjangmax)
  134.     {
  135.         printf("Penuh");
  136.     }
  137.     printf("\n");
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement