【发布时间】:2020-02-24 09:14:59
【问题描述】:
我尝试在 C 中学习堆栈。但无法执行推送操作,因为它显示了一些错误。控制台中没有显示错误消息。但是在运行代码时,执行peek方法时显示错误的top值。
#include<stdio.h>
#include<stdlib.h>
#define MAX 50
typedef enum{FALSE,TRUE} boolean;
typedef struct stack{
int top;
int a[MAX];
}stack;
void CreateStack(stack s){
s.top = -1;
}
boolean isEmpty(stack s){
return (s.top == -1);
}
boolean isFull(stack s){
return(s.top == MAX - 1);
}
void push(stack s, int data){
if(isFull(s)){
printf("Stack is Full\n");
exit(1);
}
else{
s.top = s.top + 1;
s.a[s.top] = data;
}
}
void pop(stack s){
if(isEmpty(s)){
printf("Stack is Empty");
exit(1);
}
else{
printf("%d\n",s.a[s.top]);
s.top = s.top - 1;
}
}
int peek(stack s){
return s.a[s.top];
}
void main(){
stack s;
CreateStack(s);
int num;
push(s,1);
push(s,2);
push(s,15);
printf("Top value = %d\n",peek(s));
}
【问题讨论】:
-
如果您需要帮助调试您的代码,可能让我们查看您的代码会很方便 :-)
-
“因为它显示了一些错误。”显示。代码。错误。你的想法。制作minimal reproducible example。提供引起问题的样本数据。详细解释上述错误的表现方式。在这里直接显示所有内容,作为文本而不是图片。逐字引用错误和输出。
-
我不得不承认,起初我很想发表不同的评论。在我顶住了诱惑,转而提供了一些指导意见后,请允许我开玩笑地写下以下内容来发泄情绪。它会让这里的一些人微笑,从而使他们心情更愉快。一旦您edited 提出您的问题以提供所需的信息,这将对您有利。 “你的问题是由数据的第二部分引起的。在你的代码的第 10 行。你知道,你在哪里对另一件事做那件事。那不能那样工作。换个方式——你知道的。”
-
一口井。我错了,不是第 10 行,而是第 9 行(我可能希望某处有一个空行以提高可读性)。您在哪里将参数移交给该函数作为按值调用。以另一种方式进行,通过引用调用。在所有其他功能中也是如此。
-
对于那些试图在这里开玩笑的人:我的感情发泄评论是在代码可见之前,它是完全正确的,只是为了我预测的行号中的一个错误。对不起,但我觉得这很有趣。 (啊,好吧,关于第二部分数据的部分不是重点......)