我正在研究以下C代码:
typedef struct msg *m_;
struct msg
{
long from;
long to;
m_ link;
};
m_ queue;
我想看一个例子来解释结构本身m_
内部结构的指针(即m_ link
)的作用!
非常感谢。
答案 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;
}