Files
dslab/5.c
Amneesh Singh c460e95304 exp 3,5,6,7: init
Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
2022-12-27 19:40:13 +05:30

73 lines
1.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
typedef struct Stacks stacks;
struct Stacks {
int *stack;
uint s1, s2;
uint l1, l2;
};
stacks *init(uint s1, uint s2) {
stacks *s = malloc(sizeof(stacks));
s->stack = malloc(sizeof(int) * (s1 + s2));
s->s1 = s1, s->s2 = s2;
s->l1 = s->l2 = 0;
return s;
}
void push(uint stack, stacks *s, int elem) {
if (stack != 1 && stack != 2)
fprintf(stderr, "Invalid stack number\n");
if (stack == 1) {
if (s->l1 == s->s1) {
fprintf(stderr, "Stack 1 Overflow");
return;
}
s->stack[s->l1++] = elem;
return;
}
if (s->l2 == s->s2) {
fprintf(stderr, "Stack 2 Overflow");
return;
}
s->stack[s->s1 + s->l2++] = elem;
}
int pop(uint stack, stacks *s) {
if (stack != 1 && stack != 2)
fprintf(stderr, "Invalid stack number\n");
if (stack == 1) {
if (!s->l1) {
fprintf(stderr, "Stack 1 Underflow");
exit(1);
}
return s->stack[--s->l1];
}
if (!s->l2) {
fprintf(stderr, "Stack 2 Underflow");
exit(1);
}
return s->stack[s->s1 + --s->l2];
}
int main() {
int s1 = 8, s2 = 4; // sizes
stacks *s = init(s1, s2);
push(1, s, 3);
push(1, s, 99);
push(2, s, 6);
push(1, s, 4);
printf("%d ", pop(1, s));
printf("%d", pop(2, s));
free(s->stack);
free(s);
}