Belajar Queue

Belajar struktur data cukup asyik dan memusingkan, karena terkadang logika kita sedikit berbeda dengan yang ada di buku. Hari ini aku baru aja ngebahas mengenai queue, tapi masih sempet bingung mengenai masalah inisialisasi, bagi temen2 mungkin bisa koreksi kalo ada yang salah, terutama masalah inisialisasinya

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <ctype.h>

#define MAX 100

char *p[MAX], *pop(void);

int spos = 0;

int rpos = 0;

void add(void), push(char *q), print(void), remove(void);

void add(void)

{

char s[256], *p;

do {

printf("spos %d: ", spos+1);

gets(s);

if(*s==0) {

break;

}

p = (char *) malloc(strlen(s)+1);

if(!p) {

printf("Out of memory.\n");

return;

}

strcpy(p, s);

if(*s) {

push(p);

}

while(*s);

}

void print(void)

{

int t;

for(t=rpos; t < spos; ++t)

printf("%d. %s\n", t+1, p[t]);

}

void remove(void)

{

char *p;

if((p=pop())==NULL) {

return;

}

printf("%s\n", p);

}

void push(char *q)

{

if(spos==MAX) {

printf("List Full\n");

return;

}

p[spos] = q;

spos++;

}

char *pop(void)

{

if(rpos==spos) {

printf("No more.\n");

return NULL;

}

rpos++;

return p[rpos-1];

}

int main(void)

{

char s[80];

register int t;

for(t=0; t < MAX; ++t) {

p[t] = NULL;

}

while(1) {

printf("Add(A), Print(P), Remove(R), Quit(Q): ");

gets(s);

*s = toupper(*s);

switch(*s) {

case 'A':

add();

break;

case 'P':

print();

break;

case 'R':

remove();

break;

case 'Q':

exit(0);

}

}

return 0;

}



Satu Tanggapan ke “Belajar Queue”

  1. septia Berkata

    dicoba error ga???
    klo gak error…
    berarti program berhasil…

    dah lama gak maen yang kayak gitu…

Tinggalkan Balasan