Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Indra Ginanjar
- * 101100180
- * Kelas Mandiri 2010 Semester 2
- * STMIK Indonesia
- * Padang, 17 Maret 2011
- *
- * @email: indraginanjar@gmail.com
- *
- * Mata Kuliah: Struktur Data
- * Dosen: Idwar, S.Kom, M.Kom
- * Tanggal diberikan tugas: 12 Maret 2011
- * @description:
- * Program untuk menunjukan operasi yang berlaku pada Antrian Linear tanpa menggeser data
- * Kode program ini merupakan penyempurnaan dari kode program pada halaman 20
- * modul Struktur Data karya Ir. Wihartini, M.Eng dan Ir. Hari Soetanto, M.Sc
- * @notes:
- * Program ini di tulis dan di uji menggunakan IDE CodeBlocks 8.02 dengan compiler
- * GNU GCC 4.4.5 di Linux Ubuntu 10.10, tetapi mengingat kode program ini
- * seluruhnya hanya menggunakan fungsi-fungsi standar ANSI, maka penulis
- * memperkirakan kode program ini dapat di compile tanpa masalah di compiler
- * dan/atau pun di sistem operasi lainnya.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void visualisasikan_antrian(char *antrian, unsigned front, unsigned rear, unsigned panjangmax);
- void buildspace(char** dest, unsigned len);
- int main()
- {
- enum op_t {INSERT = 1, DELETE, RESET, QUIT};
- int op_antrian = 0;
- unsigned rear = 0;
- unsigned front = 0;
- unsigned maxlen = 10;
- char emptych = '0';
- char *antrian;
- printf("\n\
- Indra Ginanjar\n\
- 101100180\n\n\
- Program untuk menunjukan operasi pada antrian linear tanpa menggeser data\n");
- antrian = calloc(maxlen + 1, sizeof(char));
- if (antrian == NULL)
- exit(-1);
- memset(antrian, emptych, maxlen * sizeof(char));
- visualisasikan_antrian(antrian, front, rear, maxlen);
- while (op_antrian != QUIT)
- {
- printf("\n\
- Operasi Antrian\n\
- 1. INSERT\n\
- 2. delete\n\
- 3. reset\n\
- 4. quit\n\
- pilih : ");
- scanf("%d", &op_antrian);
- switch (op_antrian)
- {
- case INSERT:
- if (rear < maxlen)
- {
- antrian[rear] = 'x';
- ++rear;
- }
- visualisasikan_antrian(antrian, front, rear, maxlen);
- break;
- case DELETE:
- /* jika ada yang mengantri (panjang antrian > 0) maka ... */
- if (rear - front > 0)
- {
- antrian[front] = '0';
- ++front;
- }
- visualisasikan_antrian(antrian, front, rear, maxlen);
- break;
- case RESET:
- rear = 0;
- front = 0;
- memset(antrian, emptych, maxlen * sizeof(char));
- visualisasikan_antrian(antrian, front, rear, maxlen);
- }
- }
- return 0;
- }
- void buildspace(char** dest, unsigned len)
- {
- *dest = calloc(len + 1, sizeof(char));
- memset(*dest, ' ', len * sizeof(char));
- }
- void visualisasikan_antrian(char *antrian, unsigned front, unsigned rear, unsigned panjangmax)
- {
- unsigned i;
- char *spaces;
- unsigned panjang_antrian = rear - front;
- buildspace(&spaces, front * 2);
- printf("\n%sf=%d", spaces, front);
- buildspace(&spaces, rear * 2);
- printf("\n%sr=%d", spaces, rear);
- printf("\n |");
- for (i = 0; i < panjangmax; ++i)
- {
- if (antrian[i] != NULL)
- {
- printf("%c|", antrian[i]);
- }
- }
- printf("\n Status antrian : ");
- if (front == 0 && rear == 0)
- {
- printf("Kondisi Awal (Kosong)");
- }
- else if (rear == front)
- {
- if (rear == panjangmax)
- {
- printf("Penuh Tapi Kosong (Harus di RESET)");
- }
- else
- {
- printf("Kosong");
- }
- }
- else if (rear - front > 0 && rear != panjangmax)
- {
- printf("Isi(%u)", panjang_antrian);
- }
- else if (rear == panjangmax)
- {
- printf("Penuh");
- }
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement