2009-11-05 38 views
13

Có ai biết nơi tôi có thể tìm thấy ví dụ về số Spaghetti stack được viết bằng C không?Ngăn xếp Spaghetti trong C

+2

+1 cho một trong những cấu trúc dữ liệu kỳ lạ nhất, hữu ích hầu như chỉ trong ngăn xếp bảng biểu tượng để biên soạn .. – Jack

+3

@Jack: "gần như" sang một bên, ngăn xếp spaghetti cũng rất hữu ích trong việc triển khai tiếp tục. – outis

+0

@outis bạn có thể giải thích cách sử dụng ngăn xếp Spaghetti vì tôi không biết tại sao cấu trúc dữ liệu này được sử dụng? – Jerky

Trả lời

5

Nó phải là một cái gì đó tương tự như:

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

tâm rằng một mì spaghetti chồng rất hữu ích khi bạn muốn giữ tài liệu tham khảo của những điều mà bạn bật ra khỏi ngăn xếp, có nhiều song song danh sách liên kết kết thúc với một gốc chung. Vì vậy, bạn phải giữ tài liệu tham khảo của mục bạn bật ra bởi vì bạn cần phải đi qua chúng trong một dưới lên cách từ lá đến gốc, và tất nhiên bằng cách sử dụng một nút lá khác nhau sẽ tạo ra một danh sách liên kết khác nhau có các yếu tố trong phổ biến với các danh sách khác bắt đầu từ các lá khác ..

+0

cur là gì? bạn không bao giờ định nghĩa đó là gì ... – Ralph

+0

không nên hàm push_allel trả về một con trỏ lên đầu ngăn xếp? – Ralph

+0

cur chỉ là một lỗi do stack_pointer được gọi theo một cách khác, tôi đã sửa nó. Đối với hàm push_allel nó phụ thuộc, thực tế là một ngăn xếp spaghetti không thực sự có ONE đầu stack nhưng nhiều theo từ nơi bạn bắt đầu đến thăm nó, thông thường bạn phải quan tâm đến tài liệu tham khảo bên ngoài ngăn xếp của chính mình. – Jack

Các vấn đề liên quan