Raczej estetyka, np ja użyłbym tylko typu int, [iwszędzie zamiast %hd, %d, a w poniższy sposób można deklarować zmienne [także short]:
int stack[11], // tu dodatkowy 1 element
stack_pointer = 0, // też int
operation; // też int
getchar_unlocked() - jeżeli bardzo Ci zależy na i/o ale przecież używaśz wolnego scanf i printf, więc tu raczej użyłbym samego getchar()
scanf("%d\n", &stack[stack_pointer**++**]); // lub %hd "\n"dodatkowo konsumuje enter i nie muszę póżniej "zjadać" go getcharem()
Jeżeli jednak chcesz koniecznie użyć short int to wystarczy jeden wyraz short [kompilatror domyśli się, że chodzi o short int].
Czyli w sumie same takie tam drobiazgi.
PS
Wiadomo, że każdy program, można napisać na 1000 sposobów, więc jeszcze taki mój inny sposób [pomijamy-niepotrzebny skanf z gwiazdką, zawsze gdzieś wczytujemy.]
W gałęzi else [+], można najpierw wczytać: scanf("%hd", &stack[stack_pointer]); bez ++ [i po to był mi potrzebny 11 element], a potem dopiero zastanawiać się co zrobić. Jeżeli 11 to tylko wypisujemy ;( i nic więcej, jeżeli nie to incrementujemy wskaźnik i drukujemy
[bo wczytaliśmy już wcześniej, na samiutkim początku pętli]