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 件のコメント:
コメントを投稿