typedef struct
{
uint16_t size;
uint16_t width;
uint16_t count;
void *end;
} Stack_t;
void stack_Init(Stack_t *stack, uint16_t size, uint16_t width, void *buff)
{
stack->size = size;
stack->width = width;
stack->count = 0;
stack->end = buff + size * width;
}
int stack_Push(Stack_t *stack, void *data)
{
return (stack->count < stack->size ? memcpy(stack->end - ++stack->count * stack->width, data, stack->width), 1 : 0);
}
int stack_Pop(Stack_t *stack, void *data)
{
return (stack->count ? memcpy(data, stack->end - stack->count-- * stack->width, stack->width), 1 : 0);
}
int stack_Peek(Stack_t *stack, void *data, uint16_t index)
{
return (stack->count > index ? memcpy(data, stack->end - ++index * stack->width, stack->width), 1 : 0);
}
int stack_PeekTop(Stack_t *stack, void *data, uint16_t index)
{
return (stack->count > index ? memcpy(data, stack->end - (stack->count - index) * stack->width, stack->width), 1 : 0);
}
Add 2017/09/04
stack_Peek関数
Add 2017/09/05
stack_PeekTop関数
Peek関数はスタックの底から、PeekTopは上からインデックスが始まる。PeekTopで0を指定すると最後に入れたデータが帰る。Peekで0を指定すると最初に入れたデータが帰る。PeekTopはPeekでもStack.Countとか使えば同じ動作になるのでPeekのみ作ってたが、やっぱり一発で上から取り出せるほうが便利なのでPeekTopも追加した次第。
0 件のコメント:
コメントを投稿