我有两个主要问题。 我的代码是"元素"的堆栈(堆),由结构构成如下:
typedef struct etCel{
element *ele;
struct cel *suiv;
} cel;
typedef cel* pile;
第一个问题是" isEmpty" function,生成分段错误:
int isEmpty(stack p){
if(p->ele){
return 0;
}else{
return 1;
}
}
int affiche_pile(pile p){
printf("Valeurs de la pile:\n");
while(p->ele){
affiche_element(p->ele);
printf("\n");
p=p->suiv;
}
return 1;
}
int pile_est_vide(pile p){
if(p->ele){
return 0;
}else{
return 1;
}
}
pile push(stack p, element e){
element *nvoele;
nvoele = (element*)malloc(sizeof(element));
stack ptmp = (stack)malloc(sizeof(cel));
assert(ptmp);
nvoele = &e;
ptmp->ele = nvoele;
ptmp->suiv = p; //ERROR HERE
return ptmp;
}
element pop(stack p){
stack ptmp = init_stack();
if(isEmpty(p) != 1){
ptmp = p->suiv; //ERROR HERE
free(p);
return *(ptmp->ele);
}else{
printf("Erreur! La pile est vide!\n");
}
}
int fill_stack(stack p, int q){
element tmp = init_element();
element *ptmp = &tmp;
for(int i = 0; i < q; i++){
input_element(ptmp);
push(p, tmp);
}
return 1;
}
第二个问题是分配问题,它发生在其他功能中,例如这个&#34; pop&#34;功能:
element pop(stack p){
stack ptmp = init_stack();
if(isEmpty(p) != 1){
ptmp = p->suiv;
free(p);
return *(ptmp->ele);
}else{
printf("Erreur! La pile est vide!\n");
}
}
它会生成此错误:
警告:从不兼容的指针类型分配[启用 默认] ptmp = p-&gt; suiv;
我确定它只是某种语法错误,感谢任何帮助,谢谢
----编辑: 这是什么元素:
typedef struct etElement{
float num;
} element;
element init_element(){
element p;
p.num=0.0;
return p;
}
int affiche_element(element *p){
printf("Valeur de l\'element:\n");
printf("%f, ", p->num);
printf("\n");
return 1;
}
int affecte_element(element *p, float x){
p->num = x;
return 1;
}
int saisir_element(element *p){
float x = 0;
scanf("%f", &x);
if(affecte_element(p, x)){
return 1;
} else {
return 0;
}
}
int compare_element(element *p, element *e){
if(p->num > e->num){
printf("%f > %f\n", p->num, e->num);
return 3;
}
if(p->num == e->num){
printf("%f = %f\n", p->num, e->num);
return 2;
}
if(p->num < e->num) {
printf("%f < %f\n", p->num, e->num);
return 1;
} else {
return 0;
}
}
代码的最小例子:
int main(){
//Initialisation
stack p = init_stack();
if(isEmpty(p)==1){
printf("Empty.\n");
}else{
printf("Not empty.\n");
}
element e = init_element();
element *pele = &e;
assign_element(pele,3.0);
//Empilation
if(push(p,e)){
p=push(p,e);
}else{
printf("Echec de l\'empilation.\n");
}
show_stack(p);
}
这实际上是我编译的减去一些printfs
虽然我在这里,这里的元素:
typedef struct etElement{
float num;
} element;
答案 0 :(得分:1)
struct cel
无处定义。
typedef struct etCel{
element *ele;
struct cel *suiv; // <<< this looks wrong to me
} cel;
不应该是:
typedef struct etCel{
element *ele;
struct etCel *suiv; // <<< changement here
} cel;