如何在结构本身内部使用结构指针

时间:2015-10-09 01:01:52

标签: c data-structures

我正在研究以下C代码:

typedef struct msg *m_;
struct msg
{
   long  from;
   long   to;
   m_ link;
};
m_ queue;

我想看一个例子来解释结构本身m_内部结构的指针(即m_ link)的作用!

非常感谢。

2 个答案:

答案 0 :(得分:0)

要迂腐:link是一个指针。 m_不是指针,它是typedef。它用于避免需要说" struct msg * link;"在struct定义中。

如上面的评论所述,队列由指向第一个项目的指针表示,该指针指向第二个项目(如果有的话),依此类推,直到你到达NULL指针。

在构建没有节点指向自身或任何前体的列表时要小心,或者你无限循环追逐到尾部,这一点非常重要。

答案 1 :(得分:0)

结构本身内部结构类型的指针通常用于链表,树等。在您的示例中,它指的是队列实现。

这是使用链表实现堆栈的非常小的示例。函数需要堆栈指针的地址,而空堆栈是NULL指针。

struct linked_stack
{
    int data;
    struct linked_stack *next;
};

void linked_stack_push(linked_stack **stck, int data)
{
    struct linked_stack *node = malloc(sizeof(struct linked_stack));

    if (node != NULL)
    {
        node->data = data;
        node->next = *stck;
    }

    *stck = node;
}

int linked_stack_top(linked_stack **stck)
{
    if (*stck != NULL)
        return (*stck)->data;
    return 0; /* stack is empty */
}

void linked_stack_pop(linked_stack **stck)
{
    struct linked_stack *node = *stck;

    if (*stck != NULL)
    {
        *stck = node->next;
        free(node);
    }
}

使用示例:

int main(void)
{
    struct linked_stack *stack = NULL;

    linked_stack_push(&stack, 10);
    printf("top of stack = %d\n", linked_stack_top(&stack));
    linked_stack_pop(&stack);

    return 0;
}