Вот моя C-программа для реализации стека (с узлами в виде связанного списка).Я создаю новый стек, возвращаю указатель, а затем вызываю функцию rpn_stack_push () с указателем и данными, которые я хочу назначить.
Но, очевидно, верхний узел стека всегда равен NULL, хотя я обновляю его в функции rpn_stack_push ().
Почему это происходит, и есть ли способ исправить это, не изменяямои определения функций?
struct _rpn_stack{
int data;
struct _rpn_stack *link;
};
typedef struct _rpn_stack rpn_stack_t;
rpn_stack_t* rpn_stack_new() {
rpn_stack_t *top;
top = NULL;
return top;
}
void rpn_stack_push(rpn_stack_t *s, void *data) {
rpn_stack_t* temp = malloc(sizeof(rpn_stack_t));
temp->data = (int) *((int*) data);
temp->link = s;
s = temp;
}
int main()
{
rpn_stack_t* n;
n = rpn_stack_new();
int a = 12;
int c = 13;
int* d = &c;
int* b = &a;
rpn_stack_push(n, d);
rpn_stack_push(n, b);
while (n != NULL)
{
printf("%d -> ", n->data);
n = n->link;
}
return 0;
}
Обычно он должен печатать 13-> 12->, но он вообще не идет в цикл, потому что верхний узел стека (n) равен NULL!