#include #include #define MAX_SIZE 100 typedef struct { int items[MAX_SIZE]; int top; } Stack; Stack* createStack() { Stack* s = (Stack*)malloc(sizeof(Stack)); s->top = -1; return s; } void push(Stack* s, int x) { if (s->top == MAX_SIZE - 1) { printf("Stack Overflow\n"); return; } s->items[++(s->top)] = x; } int pop(Stack* s) { if (s->top == -1) { printf("Stack Underflow\n"); return -1; } return s->items[(s->top)--]; } int isEmpty(Stack* s) { return s->top == -1; } typedef struct { Stack* s1; Stack* s2; } Queue; Queue* createQueue() { Queue* q = (Queue*)malloc(sizeof(Queue)); q->s1 = createStack(); q->s2 = createStack(); return q; } void enqueue(Queue* q, int x) { push(q->s1, x); } int dequeue(Queue* q) { int x; if (isEmpty(q->s1) && isEmpty(q->s2)) { printf("Queue is empty\n"); return -1; } if (isEmpty(q->s2)) { while (!isEmpty(q->s1)) { x = pop(q->s1); push(q->s2, x); } } return pop(q->s2); } int main() { Queue* q = createQueue(); enqueue(q, 1); enqueue(q, 2); enqueue(q, 3); printf("%d\n", dequeue(q)); printf("%d\n", dequeue(q)); enqueue(q, 4); printf("%d\n", dequeue(q)); printf("%d\n", dequeue(q)); return 0; }