Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stddef.h>
- #include <stdlib.h>
- #include <stdio.h>
- #define STACK_MAX_SIZE 20
- typedef float T;
- typedef struct Stack_tag {
- T *data;
- size_t size;
- size_t top;
- } Stack_t;
- Stack_t* createStack() {
- Stack_t *out = NULL;
- out = malloc(sizeof(Stack_t));
- if (out == NULL) {
- exit(-1);
- }
- out->size = 10;
- out->data = malloc(out->size * sizeof(T));
- if (out->data == NULL) {
- free(out);
- exit(-1);
- }
- out->top = 0;
- return out;
- }
- void deleteStack(Stack_t **stack) {
- free((*stack)->data);
- free(*stack);
- *stack = NULL;
- }
- void resize(Stack_t *stack, size_t new_size) {
- if (stack->size == new_size) {
- return;
- } else if (stack->size < new_size) {
- stack->size = new_size;
- stack->data = realloc(stack->data, new_size * sizeof(T));
- if (stack->data == NULL) {
- exit(-1);
- }
- } else if (stack->top <= new_size) {
- stack->size = stack->top;
- stack->data = realloc(stack->data, stack->size * sizeof(T));
- } else {
- exit(-1);
- }
- }
- void implode(Stack_t *stack) {
- resize(stack, stack->top);
- }
- void push(Stack_t *stack, T value) {
- if (stack->top >= stack->size) {
- resize(stack, stack->size * 2);
- }
- stack->data[stack->top] = value;
- ++stack->top;
- }
- T pop(Stack_t *stack) {
- if (stack->top == 0) {
- exit(-1);
- }
- --stack->top;
- return stack->data[stack->top];
- }
- T front(const Stack_t *stack) {
- if (stack->top <= 0) {
- exit(-1);
- }
- return stack->data[stack->top - 1];
- }
- int main() {
- int i;
- Stack_t *s = createStack();
- for (i = 0; i < 300; i++) {
- push(s, i);
- }
- implode(s);
- for (i = 0; i < 300; i++) {
- printf("%f ", front(s));
- printf("%f ", pop(s));
- }
- deleteStack(&s);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement