#include <stdlib.h>
#include <stdio.h>
typedef struct Stack
{
int top, length, sizeofeach;
void * start_ptr[ ] ;
} Stack;
Stack* init_stack( int n_items, int sizeofeach)
{
Stack* stack;
stack
= malloc ( sizeof ( int ) * 3 + sizeof ( void * ) * n_items
) ;
stack-> top = - 1 ;
stack-> length = n_items;
stack-> sizeofeach = sizeofeach;
return stack;
}
Stack* increase_stacksize( Stack* stack, int n_itemsToAdd)
{
Stack* newstack;
newstack
= realloc ( stack
, sizeof ( * stack
) + sizeof ( void * ) * ( n_itemsToAdd
+ stack
-> length
) ) ;
if ( newstack != NULL)
//printf("\nDebug print - array reallocated\n");
stack = newstack;
stack-> length += n_itemsToAdd;
return stack;
}
Stack* push( Stack* stack, void * item)
{
if ( stack-> top + 1 == stack-> length) {
stack = increase_stacksize( stack, 10 ) ;
}
int pos = stack-> top + 1 ;
stack-> start_ptr[ pos] = item;
++ ( stack-> top) ;
return stack;
}
void printstack( Stack* stack)
{
printf ( "Number of items in the stack = %d\n " , stack
-> top
+ 1 ) ; printf ( "Capacity of the stack = %d\n " , stack
-> length
) ;
printf ( "Elements in the stack are: \n " ) ;
int i;
for ( i = 0 ; i <= stack-> top; i++ ) {
int * item_ptr;
void * address;
address = stack-> start_ptr[ i] ;
item_ptr = ( int * ) address;
printf ( "Position = %d, Item = %d \n " , i
, * item_ptr
) ; }
}
int main( void )
{
Stack* stack;
stack = init_stack( 5 , sizeof ( int ) ) ;
int a[ ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
int i;
for ( i = 0 ; i < 10 ; i++ )
{
stack = push( stack, ( void * ) ( a+ i) ) ;
}
printstack( stack) ;
//free(stack);
return 1 ;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnR5cGVkZWYgc3RydWN0IFN0YWNrCnsKICAgIGludCB0b3AsIGxlbmd0aCwgc2l6ZW9mZWFjaDsKICAgIHZvaWQqIHN0YXJ0X3B0cltdOwp9IFN0YWNrOwoKU3RhY2sqIGluaXRfc3RhY2soaW50IG5faXRlbXMsIGludCBzaXplb2ZlYWNoKQp7CiAgICBTdGFjayogc3RhY2s7CiAgICBzdGFjayA9IG1hbGxvYyhzaXplb2YoaW50KSAqIDMgKyBzaXplb2Yodm9pZCopICogbl9pdGVtcyk7CgogICAgc3RhY2stPnRvcCA9IC0xOwogICAgc3RhY2stPmxlbmd0aCA9IG5faXRlbXM7CiAgICBzdGFjay0+c2l6ZW9mZWFjaCA9IHNpemVvZmVhY2g7CgogICAgcmV0dXJuIHN0YWNrOwp9CgpTdGFjayogaW5jcmVhc2Vfc3RhY2tzaXplKFN0YWNrKiBzdGFjaywgaW50IG5faXRlbXNUb0FkZCkKewogICAgU3RhY2sqIG5ld3N0YWNrOyAgICAKICAgIG5ld3N0YWNrID0gcmVhbGxvYyhzdGFjaywgc2l6ZW9mKCpzdGFjaykgKyBzaXplb2Yodm9pZCopICogKG5faXRlbXNUb0FkZCArIHN0YWNrLT5sZW5ndGgpKTsKICAgIAogICAgaWYobmV3c3RhY2sgIT0gTlVMTCkKICAgICAgICAvL3ByaW50ZigiXG5EZWJ1ZyBwcmludCAtIGFycmF5IHJlYWxsb2NhdGVkXG4iKTsKCiAgICBmcmVlKHN0YWNrKTsKICAgIHN0YWNrID0gbmV3c3RhY2s7CgogICAgc3RhY2stPmxlbmd0aCArPSBuX2l0ZW1zVG9BZGQ7CgogICAgcmV0dXJuIHN0YWNrOwp9CgpTdGFjayogcHVzaChTdGFjayogc3RhY2ssIHZvaWQqIGl0ZW0pCnsKICAgIGlmKHN0YWNrLT50b3AgKyAxID09IHN0YWNrLT5sZW5ndGgpewogICAgICAgIAogICAgICAgIHN0YWNrID0gaW5jcmVhc2Vfc3RhY2tzaXplKHN0YWNrLCAxMCk7CiAgICB9CgogICAgaW50IHBvcyA9IHN0YWNrLT50b3AgKyAxOwoKICAgIHN0YWNrLT5zdGFydF9wdHJbcG9zXSA9IGl0ZW07CiAgICArKyhzdGFjay0+dG9wKTsKICAgIAogICAgcmV0dXJuIHN0YWNrOwp9Cgp2b2lkIHByaW50c3RhY2soU3RhY2sqIHN0YWNrKQp7CiAgICBwcmludGYoIk51bWJlciBvZiBpdGVtcyBpbiB0aGUgc3RhY2sgPSAlZFxuIiwgc3RhY2stPnRvcCArIDEpOwogICAgcHJpbnRmKCJDYXBhY2l0eSBvZiB0aGUgc3RhY2sgPSAlZFxuIiwgc3RhY2stPmxlbmd0aCk7CgogICAgcHJpbnRmKCJFbGVtZW50cyBpbiB0aGUgc3RhY2sgYXJlOiBcbiIpOwoKICAgIGludCBpOwoKICAgIGZvcihpID0gMDsgaSA8PSBzdGFjay0+dG9wOyBpKyspewogICAgICAgIGludCogaXRlbV9wdHI7CiAgICAgICAgdm9pZCogYWRkcmVzczsKCiAgICAgICAgYWRkcmVzcyA9IHN0YWNrLT5zdGFydF9wdHJbaV07CgogICAgICAgIGl0ZW1fcHRyID0gKGludCopYWRkcmVzczsKCiAgICAgICAgcHJpbnRmKCJQb3NpdGlvbiA9ICVkLCBJdGVtID0gJWQgXG4iLCBpLCAqaXRlbV9wdHIpOwogICAgfQp9CgppbnQgbWFpbih2b2lkKQp7ICAgIAogICAgU3RhY2sqIHN0YWNrOwogICAgc3RhY2sgPSBpbml0X3N0YWNrKDUsIHNpemVvZihpbnQpKTsKCiAgICBpbnQgYVtdID0gezEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwfTsKICAgIGludCBpOwogICAgCiAgICBmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKQogICAgewogICAgICAgIHN0YWNrID0gcHVzaChzdGFjaywgKHZvaWQqKShhK2kpKTsKICAgIH0KCiAgICBwcmludHN0YWNrKHN0YWNrKTsKICAgIAogICAgLy9mcmVlKHN0YWNrKTsKICAgIAogICAgcmV0dXJuIDE7Cn0=
stdout
Number of items in the stack = 10
Capacity of the stack = 15
Elements in the stack are:
Position = 0, Item = 1
Position = 1, Item = 2
Position = 2, Item = 3
Position = 3, Item = 4
Position = 4, Item = 5
Position = 5, Item = 6
Position = 6, Item = 7
Position = 7, Item = 8
Position = 8, Item = 9
Position = 9, Item = 10