在C的意粉堆

时间:2009-11-05 21:35:30

标签: c data-structures

有人知道在哪里可以找到用C编写的Spaghetti stack的例子吗?

1 个答案:

答案 0 :(得分:5)

它应该类似于:

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;
}

请注意,意大利面条堆栈在您想要保留从堆栈中弹出的内容的引用时非常有用,它们有许多以并行链接列表结尾的内容根。所以你必须保留你弹出的项目的引用,因为你需要从自下而上的方式从叶子到根目录遍历它们,当然使用不同的叶子节点会产生不同的链接列表中包含与从其他叶子开始的其他列表共有的元素..