c - 如何将 typedef 结构用于 FIFO?

标签 c struct typedef fifo

我刚刚开始在学校用 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'

最佳答案

您混淆了 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);
}

关于c - 如何将 typedef 结构用于 FIFO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40323804/

相关文章:

c - C 中静态函数的声明和定义都需要 static 关键字吗?

C 编程,存储来自 for 循环的数据

c - 无重复生成数字组合的算法

c - 使用 scanf 将 csv 文件读入 C 中的结构

Java - 创建伪 native 类型

oop - 如何在类构造函数参数中动态传递窗口小部件

iphone - 像 0xD2691E 这样的十六进制值的数据类型是什么?

go - 为结构字段分配新值

c++ - 静态模板 constexpr 错误

java - 如何从 JNA 中的内存/指针对象读取结构?