【问题标题】:How do you use a typedef struct for a FIFO?您如何将 typedef 结构用于 FIFO?
【发布时间】:2016-10-29 21:22:39
【问题描述】:

我刚开始在学校用 C 编程。我被要求做一个使用 FIFO 结构来解决数学问题的程序。我在互联网上获得了 FIFO 的以下代码,我只是不知道如何使用它。我尝试了很多东西,但我在互联网上找不到任何有用的东西,或者我只是不知道应该研究的东西,但你能帮我吗?谢谢!

#include <stdio.h>
#include <stdlib.h>

typedef struct pile
{
    int donnee;
    struct pile *precedent;
} Pile;

void pile_push(Pile **p_pile, int donnee)
{
        Pile *p_nouveau = malloc(sizeof *p_nouveau);
        if (p_nouveau != NULL)
        {
                p_nouveau->donnee = donnee;
                p_nouveau->precedent = *p_pile;
                *p_pile = p_nouveau;
        }
}

int pile_pop(Pile **p_pile)
{
    int ret = -1;
    if (p_pile != NULL)
    {
        Pile *temporaire = (*p_pile)->precedent;
        ret = (*p_pile)->donnee;
        free(*p_pile), *p_pile = NULL;
        *p_pile = temporaire;
    }
    return ret;
}

void pile_clear(Pile **p_pile)
{
    while (*p_pile != NULL)
    {
        pile_pop(p_pile);
    }
}

我试过这样做:

int main()
{
    int return_val;
    Pile pile;
    pile_push(Pile, 5);
    return_val = pile_pop(Pile);
    printf(return_val);
}

得到了这个错误:

expected expression before 'Pile'
too few arguments to function 'pile_push'

【问题讨论】:

  • 你的确切问题是什么?
  • 如果你不理解代码,你怎么知道它会做你想做的事?从互联网上获取您甚至无法开始理解的随机代码可能不是一个好主意。最好从第一原则中学习。无论如何,“fifo 的 typedef struct”并没有多大意义。您认为“fifo 结构”到底是什么(不清楚您的意图是什么)?
  • 尝试查找术语“队列”;使用 FIFO 规则。还有结合堆栈和队列功能的堆栈(LIFO 或“后进先出”)和出队(双端队列)。
  • 我了解了代码的整体情况,只是不知道如何初始化我的对象并在之后使用函数。

标签: c struct typedef fifo


【解决方案1】:

您混淆了Pilepile,这是第一个警告的问题。这些函数需要一个指向 Pile 的指针。即:它们更新指针的值,因此需要传递对指针的引用。您对 printf 的使用也是错误的。

int main()
{
    int return_val;
    Pile *pile = NULL;
    pile_push(&pile,5);
    return_val = pile_pop(&pile);
    printf("return_val is: %d\n",return_val);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多