84 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
 | 
						|
#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;
 | 
						|
} |