为什么在尝试使用 push 和 pop 功能时会出现错误?
Why am I getting an error when I try to use push and pop function?
题目要求我们“写程序完成调用push函数至少3次的main函数,然后打印出更新后的栈,然后调用pop函数并再次打印出更新后的堆栈。"
代码告诉我编译失败,原因如下:
10 号线 | {
这对我来说没有意义。我尝试删除它,但它给出了其他错误
此外,代码给出了一个警告,说“警告:数组‘堆栈’假设有一个元素”,我不知道那是什么意思。
这是代码:
#include <stdio.h>
#define STACK_EMPTY '0'
#define STACK_SIZE 20
char stack[], item;
int *top, max_size;
void
push(char stack[], char item, int *top, int max_size),
{
if (*top < max_size-1)
{
--(*top);
stack[*top] = item;
}
}
char
pop (char stack[], /* input/output - the stack */
int *top) /* input/output - pointer to top of stack */
{
char item; /* value popped off the stack */
if (*top >= 0)
{
item = stack[*top];
--(*top);
}
else
{
item = STACK_EMPTY;
}
return (item);
}
int
main (void)
{
char s [STACK_SIZE];
int s_top = -1; // stack is empty
if (*top <= -1)
{
item = STACK_EMPTY;
}
return (0);
}
问题在于您如何处理顶部指针。
您递减指针,即 --top,而不是它指向的值。
也 push 应该增加它,即 ++top.
---这是更正后的代码----
#include <stdio.h>
#define STACK_SIZE 20
#define STACK_EMPTY '0'
char item;
int top_idx = 0;
void
push(char *stack, char item)
{
if (top_idx < STACK_SIZE)
{
stack[top_idx] = item;
top_idx++;
}
}
char
pop (char *stack) /* input/output - pointer to top of stack */
{
char item; /* value popped off the stack */
if (top_idx >= 0)
{
top_idx--;
item = stack[top_idx];
}
else
{
item = STACK_EMPTY;
}
return (item);
}
int
main (void)
{
char s [STACK_SIZE];
push(s,'a');
push(s,'b');
printf("Pop = %c \n",pop(s));
printf("Pop = %c \n",pop(s));
return 0;
}
有关“stack
假设有一个元素”的错误是因为您没有在方括号 char stack[];
之间放置数字。我怀疑你的意思是
char stack[STACK_SIZE];
题目要求我们“写程序完成调用push函数至少3次的main函数,然后打印出更新后的栈,然后调用pop函数并再次打印出更新后的堆栈。"
代码告诉我编译失败,原因如下: 10 号线 | { 这对我来说没有意义。我尝试删除它,但它给出了其他错误
此外,代码给出了一个警告,说“警告:数组‘堆栈’假设有一个元素”,我不知道那是什么意思。
这是代码:
#include <stdio.h>
#define STACK_EMPTY '0'
#define STACK_SIZE 20
char stack[], item;
int *top, max_size;
void
push(char stack[], char item, int *top, int max_size),
{
if (*top < max_size-1)
{
--(*top);
stack[*top] = item;
}
}
char
pop (char stack[], /* input/output - the stack */
int *top) /* input/output - pointer to top of stack */
{
char item; /* value popped off the stack */
if (*top >= 0)
{
item = stack[*top];
--(*top);
}
else
{
item = STACK_EMPTY;
}
return (item);
}
int
main (void)
{
char s [STACK_SIZE];
int s_top = -1; // stack is empty
if (*top <= -1)
{
item = STACK_EMPTY;
}
return (0);
}
问题在于您如何处理顶部指针。 您递减指针,即 --top,而不是它指向的值。 也 push 应该增加它,即 ++top.
---这是更正后的代码----
#include <stdio.h>
#define STACK_SIZE 20
#define STACK_EMPTY '0'
char item;
int top_idx = 0;
void
push(char *stack, char item)
{
if (top_idx < STACK_SIZE)
{
stack[top_idx] = item;
top_idx++;
}
}
char
pop (char *stack) /* input/output - pointer to top of stack */
{
char item; /* value popped off the stack */
if (top_idx >= 0)
{
top_idx--;
item = stack[top_idx];
}
else
{
item = STACK_EMPTY;
}
return (item);
}
int
main (void)
{
char s [STACK_SIZE];
push(s,'a');
push(s,'b');
printf("Pop = %c \n",pop(s));
printf("Pop = %c \n",pop(s));
return 0;
}
有关“stack
假设有一个元素”的错误是因为您没有在方括号 char stack[];
之间放置数字。我怀疑你的意思是
char stack[STACK_SIZE];