Здравствуйте.
Сегодня проектировал стек LIFO, вот что получилось
stack.h
#include <stdio.h>
#include <stdlib.h>
#define SEMPTY -1
struct Stack
{
size_t max_size;
size_t cur;//позиция для записи следующего элемента
int (*push)(int el, struct Stack*);
int (*pop)(struct Stack*);
int* buffer;
};
struct Stack* createStack(size_t maxsize);
stack.c
#include "stack.h"
int push(int el, struct Stack* s)
{
if (s->cur == s->max_size)
{
printf("stack is full.\n");
return -1;
}
else
{
s->buffer[s->cur++] = s->cur;
return 0;
}
}
int pop(struct Stack* s)
{
if (s->cur == 0)
{
printf("stack is empty.\n");
return SEMPTY;
}
else
{
return *(s->buffer + --s->cur);
}
}
struct Stack* createStack(size_t maxsize)
{
struct Stack* s = (struct Stack*)malloc(sizeof(struct Stack));
s->max_size = maxsize;
s->cur = 0;
s->push = push( );
s->pop = pop(s);
s->buffer = NULL;
s->buffer = (int*)malloc(sizeof(int)*s->max_size);
return s;
}
Подскажите пожалуйста, как правильно реализовать функцию createStack() ? Мне не нравится использование SEMPTY, но пока не придумал как от этого избавиться. Как бы вы поступили ?