最近我一直在制作我的堆叠项目,但是我的推送节点的代码有问题:
void push(struct stackNode *Stackptr , int data)
{
struct stackNode *conductor;
conductor = malloc(sizeof(struct stackNode));
if(conductor !=NULL)
{
conductor->data=data;
conductor->nxt=*Stackptr;
Stackptr = conductor ;
}
else{
printf("Wrong insertion");
}
}
但它不会编译。如果你想在这里看到我的其余代码,那就是:
#include<stdio.h>
#include<stdlib.h>
struct stackNode
{
int data;
struct stackNode *nxt;
};
struct stackNode *Stack;
void instructions()
{
printf(" Please Select a Number to do the following\n\n");
printf(" [1]Push a value\n");
printf(" [2]Pop a value\n");
printf(" [2]Peek a node\n");
printf(" [3]Display\n");
printf(" [4]Exit\n ");
}
int main ()
{
int value;
int choice;
Stack = NULL;
instructions();
do
{
scanf("%d",&choice);
system("cls");
if(choice == 1)
{
printf("Enter your Desired Digit: ");
}
if(choice == 2)
{
printf(" ");
}
if(choice == 3)
{
printf(" ");
}
if(choice == 4 )
{
printf("bye!");
return 0;
}
}while(choice !=4);
getch();
}
void push(struct stackNode *Stackptr , int data)
{
struct stackNode *conductor;
conductor = malloc(sizeof(struct stackNode));
if(conductor !=NULL)
{
conductor->data=data;
conductor->nxt=*Stackptr;
Stackptr = conductor ;
}
else{
printf("Wrong insertion");
}
}
答案 0 :(得分:2)
在push函数中,您正在分配stacknode,而不是指向stacknode的指针。
这是错误:
test.c:76:31: error: incompatible types when assigning to type ‘struct stackNode *’ from type ‘struct stackNode’
删除*指定指针,这就是你想要的。
这样可行:
conductor->nxt=Stackptr;
但是,该计划还存在其他问题。
答案 1 :(得分:1)
我将尽快找出错误; 快速编译,错误是;
74: error: incompatible types when assigning to type ‘struct stackNode *’ from type ‘struct stackNode’
是的,现在我知道要看看第74行。 第74行是;
conductor->nxt=*Stackptr;
甚至无需考虑问题,甚至无需了解指针(您需要这些,但这只是一个快速调试) 所以我们删除*并将其更改为;
conductor->nxt=Stackptr;
这就是一个问题。 但是在这段代码中还有很多其他的。确保经常调试和测试,并解释错误。如果所有其他方法都失败了,请确保在此处发布错误信息。
答案 2 :(得分:0)
由于您要更改Stackptr
方法中的push
,因此您需要通过<{p>}向push
的来电者显示此更改
Stackptr
或Stackptr
。答案 3 :(得分:0)
此:
conductor->nxt=*Stackptr;
看起来不对。 nxt
字段应该是一个指针,但是你要取消引用,所以你试图填充整个节点。
代码还有许多其他问题,但这是我看到的第一个明显的编译时错误。
答案 4 :(得分:0)
使用typedef
:
typedef struct _stacknode
{
int data;
struct _stacknode *nxt;
} StackNode;
StackNode *Stack;
此外,由于您似乎正在学习“C”,请检查一些完成的堆栈实现。这是编程书籍或在线教程的一个常见例子。在github中可能有很多。研究它,然后尝试自己的。