#include <stdio.h>
#include "Stack.h"
int multipop (Stack_t *S, int k)
{
int value;
while(k > 0)
{
if (StackisEmpty(S))
return 0;
k--;
value = StackPop(S);
}
//int size = S->size;
//printf("Stack size: %d\n", size);
return value;
}
int main ()
{
Stack_t S;
StackInit(&S, 20);
StackPush(&S, 1);
StackPush(&S, 2);
StackPush(&S, 3);
StackPush(&S, 4);
StackPush(&S, 25);
int n = multipop(&S, 3);
printf("LAST ELEMENT: %d", n);
}
#include <stdio.h>
# include "Stack.h"
bool StackIsFull(Stack_t *S)
{
return S-> top >=(int)(S->size - 1);
}
bool StackisEmpty(Stack_t *S)
{
return S->top < 0;
}
void StackInit (Stack_t *S, size_t size)
{
StackElement_t *elements = malloc(size * sizeof(StackElement_t));
if (elements == NULL)
{
fprintf(stderr,"Can't allocate memory");
exit(1);
}
S->elements = elements;
S->top = -1;
S->size = size;
}
void StackPush(Stack_t *S, StackElement_t e)
{
if (S->top >=(int)(S->size - 1))
{
fprintf(stderr,"Stack Overflow\n");
exit(1);
}
S->elements[++S->top] = e;
}
void StackPrint(Stack_t *S)
{ int i;
for(i = S->top; i >= 0; i--)
printf("[%d]: %d\n",i, S->elements[i]);
}
void StackDestroy(Stack_t *S)
{
free(S->elements);// функция принимает указатель на стек
S->elements = NULL;
S->top = -1;
S->size = 0;
}
StackElement_t StackPop(Stack_t *S)
{
if ( S-> top < 0)
{
fprintf(stderr,"Stack is empty\n");
exit(1);
}
return S->elements[S->top--];
}
StackElement_t StackTop(Stack_t *S)
{
if ( S-> top < 0)
{
fprintf(stderr,"Stack is empty\n");
exit(1);
}
return S->elements[S->top];
}
#ifndef __STACK_H
#define __STACK_H
# include <stdlib.h>
# include <stdbool.h>
typedef int StackElement_t;
typedef struct
{
StackElement_t *elements; // содержимое стека
int top; //вершина стека
size_t size; //размер стека
} Stack_t;
bool StackIsFull(Stack_t *S);
bool StackisEmpty(Stack_t *S);
void StackInit (Stack_t *S, size_t size);
void StackPush(Stack_t *S, StackElement_t e);
void StackDestroy(Stack_t *S);
StackElement_t StackPop(Stack_t *S);
StackElement_t StackTop(Stack_t *S);
void StackPrint(Stack_t *S);
#endif