【发布时间】:2014-02-10 00:01:55
【问题描述】:
我需要为将元素压入堆栈的程序创建 push 方法。我创建了这个typedef:
typedef struct node{
int value;
struct node *next;
} Node;
在我的 main 中使用这段 sn-p 代码:
Node *stackptr;
stackptr = NULL;
这是我遇到问题的地方,我不确定到底发生了什么 - 在我的推送方法中,我不确定我是否将更新后的指针返回到堆栈顶部。我想检查它是否也是空的,但我会到最后。这是 push() 函数:
void push(Node *stkptr, int i){
Node *temp;
temp = malloc(sizeof(Node));
temp->value = i;
temp->next = *stkptr;
return *stkptr = temp;
}
希望这对我想要表达的内容有某种意义。感谢您能给我的任何建议。希望一切都好。
最后我需要修复我的 int pop() 函数!我必须返回弹出的节点的值。我相信我快到了 - 我的编译器仍在抛出错误。这是我目前所拥有的:
int pop(Node** stkptr){
Node *temp;
temp = malloc(sizeof(Node));
if((*stkptr) == NULL){
fprintf(stderr, "The stack is empty. Pop is not allowed\n");
return 0;
}
else{
temp = *stkptr;
stkptr = *temp;
}
return stkptr;
free(temp);
}
但是,编译器抛出错误: 从“Node”类型分配给“struct Node **”类型时的类型不兼容
警告:return 从没有强制转换的指针中生成整数
谁能帮我解决我的问题!谢谢!
【问题讨论】:
-
*stkptr的类型是Node,不是Node* -
您不能从定义为返回
void的函数中返回值。 -
@JonathanLeffler 你能看看我的编辑吗 - 我添加了一个关于 pop() 的问题。再次感谢您的所有帮助。