Вы определяете указатель на узел (фактически полный стек), но вы не создаете объект узла , на который может указывать этот указатель.Следовательно, вы разыменовываете неинициализированный указатель, который приводит к неопределенному поведению (например, segfault).
Вместо
node *s ;
...
push(s,num );
Запись
node s ;
...
push(&s,num );
Или
node *s = new node(); // or = malloc(sizeof(node)) in C
...
push(s,num );
...
// once the stack is not used any more:
delete s; // or free(s) in C.
, так что вы создаете фактический объект, адрес которого вы можете передатьто.