首页 > 解决方案 > 在 C 中将队列称为指针

问题描述

我对C相当陌生,对指针的概念感到困惑。我写了两组不同的代码,只有一个工作,我想知道问题出在哪里。

    void reverseStack(Stack *s)
{
    /* add your code here */
    Queue *q;
    q->ll.head = NULL;
    q->ll.tail = NULL;
    q->ll.size = 0;
    

    while(!(isEmptyStack(s))){
        
        enqueue(q,pop(s));
        
    }
    
    while(!(isEmptyQueue(q))){
        push(s,dequeue(q));
       
    }
    
    
    
    
}

当我将队列称为指针编辑时,上述内容不起作用:return segfault

    void reverseStack(Stack *s)
{
    /* add your code here */
    Queue q;
    q.ll.head = NULL;
    q.ll.tail = NULL;
    q.ll.size = 0;
    

    while(!(isEmptyStack(s))){
        
        enqueue(&q,pop(s));
        
    }
    
    while(!(isEmptyQueue(&q))){
        push(s,dequeue(&q));
       
    }
    
    
    
    
}

但是,这有效。编辑:返回反向堆栈

两个代码的功能是否相同?为什么结果不同呢?

旁注:我在这个程序中给出的函数类似于这个问题中列出的函数 Reversing a stack using queue in C

标签: cpointers

解决方案


你从来没有分配一个队列q来指向!它只是指向随机内存,如果您尝试使用它,可能会导致段错误。你必须给它分配一些东西。

您可以静态或动态分配一个。

静止的:

Queue staticQueue;
Queue *q = &staticQueue;

动态的:

Queue *q = malloc(sizeof(Queue));

注意:如果使用staticQueue,则不能返回指针,因为函数返回时队列将被删除。如果您使用动态,请free()在完成后记住它!


推荐阅读