Эта программа создает стек только из двух символов a и b. Я просто делаю зарядку. Но происходит что-то странное.
#include <stdio.h>
#include <stdlib.h>
struct mychar {
char value;
struct mychar *nextPtr;
};
typedef struct mychar Mychar;
void push(Mychar ** , char );
void pop(Mychar ** , char );
void printlist(Mychar * );
int main(){
Mychar *topPtr = NULL;
push (&topPtr, 'a');
push (&topPtr, 'b');
printlist(topPtr);
}
void push(Mychar **tPtr , char newvalue){
Mychar *newtopPtr = calloc(1,sizeof(Mychar));
newtopPtr->value = newvalue;
newtopPtr->nextPtr = *tPtr;
*tPtr = newtopPtr;
}
void pop(Mychar ** , char );
void printlist(Mychar *cPtr){
while (cPtr!=NULL){
printf("%c\n", cPtr->value);
cPtr = cPtr->nextPtr;
}
}
Если я скомпилирую и запустил его, для отображения результата потребуется несколько секунд:
$ ./"stack_dyn"
b
a
Но в следующих запусках это будет быстро. Кроме того, если я скомпилирую его снова, он будет медленным при первом запуске и быстрым при втором запуске. Почему?