84 lines
1.4 KiB
C
84 lines
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;
|
|
} |