我在使用链接列表在c中实现队列时遇到问题。我已经在stackoverflow和其他网站上阅读了很多其他问题,但我仍然不知道如何修复我的代码问题。有人,请帮帮我吗? 这是我在c:
中的代码#include <stdio.h>
#include <stdlib.h>
struct elem{
int n;
elem *prox;
};
struct fila{
elem *inicio, *fim;
}nop;
void iniciar(fila *d){
d->inicio = (elem*) malloc(sizeof(elem));
d->fim = (elem*) malloc(sizeof(elem));
d->inicio->prox = d->fim;
d->fim->prox = NULL;
}
void inserir(fila *d, int x){
elem *novo = (elem*) malloc(sizeof(elem));
novo->n = x;
novo->fim->prox = NULL;
if(d->inicio->prox == NULL)
d->inicio->prox = novo;
else{
d->fim->prox = novo;
d->fim = novo;
}
}
void deletar(fila *d){
if(d->inicio->prox = NULL)
printf("Lista vazia")
else{
elem *apg;
apg = d->inicio->prox;
d->inicio->prox = apg->prox;
printf("%d", d->n);
free(apg);
}
}
int main(){
int x;
iniciar(&nop);
scanf("%d", &x);
inserir(&nop, x);
deletar(&nop);
return 0;
}
答案 0 :(得分:0)
所以,这个问题很模糊,但是我确实看到了一个问题,那就是你得到的标签和typedef混淆了。例如:
void inserir(fila *d, int x)
实际上应该定义为
void inserir(struct fila *d, int x)
因为您将fila定义为标签。另一种方法是使用typedef关键字声明结构fila(在下面列出)
typedef struct elem{
int n;
struct elem *prox;
} element;
typename struct {
element *inicio, *fim;
}fila nop;
答案 1 :(得分:0)
此代码中的大多数错误都是因为您使用elem
和fila
作为类型名称。然而,这些类型没有定义。引用struct
类型时,您需要在其前面添加struct
关键字。
你可以通过为每一个添加typedef
来解决这个问题,以便它们可以仅通过类型名称引用:
typedef struct elem elem;
typedef struct fila fila;
在包含后,将这些行放在源文件的顶部。这将解决大多数编译问题。其余的你应该能够弄清楚自己。