I have this code:
Code:
typedef struct
{
int *data;
size_t initSize; //initial size
size_t multSize; //size multiplier
size_t pointer; //current pointer
} Stack, *PStack;
int createStack(PStack stack, size_t size)
{
(*stack).data = NULL;
(*stack).initSize = size;
(*stack).multSize = 0;
(*stack).pointer = 0;
//allocate stack for the first time
return enlargeStack(&(*stack));
}
int enlargeStack(PStack stack)
{
(*stack).multSize++;
return ((*stack).data = realloc((*stack).data,
(*stack).initSize * (*stack).multSize * sizeof(int))) != NULL;
}
int pushStack(PStack stack, int data)
{
if((*stack).pointer >= ((*stack).initSize * (*stack).multSize))
if(!enlargeStack(&(*stack)))
return 0;
(*stack).data[(*stack).pointer] = data;
(*stack).pointer++;
return 1;
}
int peekStack(const PStack stack, int *buffer)
{
if((*stack).pointer == 0)
return 0;
*buffer = (*stack).data[(*stack).pointer - 1];
return 1;
}
int popStack(PStack stack, int *buffer)
{
if((*stack).pointer == 0)
return 0;
int temp;
if(!peekStack(&(*stack), &temp))
return 0;
*buffer = temp;
(*stack).pointer--;
return 1;
}
void freeStack(PStack stack)
{
free((*stack).data);
(*stack).data = NULL;
(*stack).initSize = 0;
(*stack).multSize = 0;
(*stack).pointer = 0;
}
And...
Code:
int main()
{
Stack stack;
if(!createStack(&stack, 10))
exit(EXIT_FAILURE);
int buffer;
if(popStack(&stack, &buffer)) //won't work
printf("pop: %d\n", buffer);
if(peekStack(&stack, &buffer)) //won't work
printf("peek: %d\n", buffer);
pushStack(&stack, 2);
pushStack(&stack, 3);
if(peekStack(&stack, &buffer)) //works
printf("peek: %d\n", buffer);
if(popStack(&stack, &buffer)) //works
printf("pop: %d\n", buffer);
if(popStack(&stack, &buffer)) //works
printf("pop: %d\n", buffer);
if(popStack(&stack, &buffer)) //won't work
printf("pop: %d\n", buffer);
int i;
for(i=0; i<100; i++)
{
pushStack(&stack, i);
}
for(i=0; i<100; i++)
{
if(popStack(&stack, &buffer)) //won't work
printf("pop[%d]: %d\n",i, buffer);
}
if(popStack(&stack, &buffer)) //still won't work :)
printf("pop: %d\n", buffer);
freeStack(&stack);
return 0;
}
Is there an easy way to handling exceptions in C? So we don't need to returning int from functions like the APIs...