Ответ 1
Это должно быть нечто похожее на это:
struct stack_item;
struct stack_item
{
stack_item *parent;
void *ptr_data;
};
stack_item *stack_pointer = null;
void push(stack_item *item)
{
if (stack_pointer == null)
item->parent = null;
else
item->parent = cur;
stack_pointer = item;
}
/* like push but doesn't update cur stack item to the one pushed, just add a child */
void push_parallel(stack_item *item)
{
if (stack_pointer == null)
{
stack_pointer = item;
item->parent = null;
}
else
item->parent = stack_pointer;
}
stack_item *pop()
{
if (stack_pointer == null)
{
printf("error: stack is empty.\r\n");
return null;
}
stack_item *current = stack_pointer;
stack_pointer = current->parent;
return current;
}
Помните, что стежок спагетти полезен, когда вы хотите сохранить ссылки на вещи, которые вы выходите из стека, имея много параллельных связанных списков, которые заканчиваются общим корнем. Таким образом, вам нужно сохранить ссылки на элемент, который вы выскочите, потому что вам нужно пересечь их снизу вверх от листа к корню, и, конечно, с использованием другого листа node будет создан другой связанный список, содержащий элементы в общий с другими списками, которые начинаются с других листьев.