#include <stdio.h>
#include <stdlib.h>
#include <time.h> // use time() to get current time
#define SIZE 100
typedef struct {
int data[SIZE];
int top;
} Stack;
void init_stack(Stack *s) {
s->top = -1;
}
// Stack functions
int full(Stack *s) {
return s->top == SIZE - 1;
}
int empty(Stack *s) {
return s->top == -1;
}
void push(Stack *s, int val) {
if(!full(s))
s->data[++(s->top)] = val;
else {
printf("Stack is full!");
exit(1);
}
}
int pop(Stack *s) {
if(!empty(s))
return s->data[(s->top)--];
printf("Stack is empty!");
exit(2);
}
// Questions
void random_number_generator(Stack* s, int range, int offset, int len) {
srand(time(NULL)); // use srand(time(NULL)) to set seed of random number generator as current time
int i;
for(i = offset; i <= len; i++)
push(s, rand() % range); // generate random number
}
void print_stack(Stack* ele_s, int ElementsInOneLine) {
Stack temp_popped;
init_stack(&temp_popped);
int ElementsInCurrentLine = 0;
while(!empty(ele_s)) {
int popped_value = pop(ele_s);
printf("%d ", popped_value); // remove '\n' if output is too long
push(&temp_popped, popped_value);
if(++ElementsInCurrentLine >= ElementsInOneLine) {
printf("\n");
ElementsInCurrentLine = 0;
}
}
while(!empty(&temp_popped)) {
int popped_value = pop(&temp_popped);
push(ele_s, popped_value);
}
printf("\n");
}
void restore(Stack *ele_s, Stack *temp_s) {
while(!empty(temp_s)) {
push(ele_s, pop(temp_s));
}
}
int getElement(Stack *s, int fromTop, int n) { // 1 is top, 0 is bottom
Stack temp_popped;
init_stack(&temp_popped);
int i, popped_value;
if(fromTop == 1) {
for(i = 0; i < n; i++) {
popped_value = pop(s);
push(&temp_popped, popped_value);
}
restore(s, &temp_popped);
} else {
Stack reversed_ele_s;
Stack popped_reverse;
init_stack(&reversed_ele_s);
init_stack(&popped_reverse);
// reverse ele_s and get value from the top n-th element
while(!empty(s)) {
push(&reversed_ele_s, pop(s));
}
for(i = 0; i < n; i++) {
popped_value = pop(&reversed_ele_s);
push(&temp_popped, popped_value);
}
// reverse temp_popped and restore (beacuse ele_s was reversed)
while(!empty(&temp_popped)) {
push(&popped_reverse, pop(&temp_popped));
}
restore(s, &popped_reverse);
restore(s, &reversed_ele_s);
}
return popped_value;
}
int main() {
Stack s;
init_stack(&s);
// p1
random_number_generator(&s, 100, 1, 6); // Use rand()%100+1 to get 6 random numbers
print_stack(&s, 6); // 6 numbers in one line
// p2 element out of size
// int x = getElement(&s, 1, 11);
// printf("%d \n", x);
// p3
random_number_generator(&s, 100, 1, 21); // Use rand()%100+1 to get 21 random numbers
print_stack(&s, 7); // 7 numbers in one line
printf("\n");
// p4
int y = getElement(&s, 1, 11);
printf("%d \n\n", y);
// p5
int z = getElement(&s, 0, 2);
printf("%d \n\n", z);
// p6
int w = getElement(&s, 0, 3);
printf("%d \n\n", w);
// p7
print_stack(&s, 7); // 7 numbers in one line
return 0;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: