gpt4 book ai didi

c - stack_overflow() 函数如何工作?

转载 作者:行者123 更新时间:2023-11-30 18:34:02 25 4
gpt4 key购买 nike

所以我刚刚来到书中解释堆栈的部分。以下是它们在我的书中的定义方式(代码):

#include <stdbool.h>

#define STACK_SIZE 100

int contents[STAC_SIZE]
int top = 0;

void make_empty(void){
top = 0;
}

bool is_empty(void){
return top == 0;
}

bool is_full(void){
return top == STACK_SIZE;
}

void push(int i){
if(is_full()){
stack_overflow();
}
else{
contents[top++] = I;
}

int pop(void){
if(is_empty()){
stack_underflow();
}
else{
return contents[--top];
}
}

我在这里没有得到两件事:

  • make_empty() 函数如何工作?通过将 top 初始化为 0,contents 仍然加载了所有元素...contents 不应该也被初始化吗?<
  • 这 2 个 stack_overflow()stack_underflow() 函数的作用是什么?它们的行为是否在 stdio.h 中默认定义?如果是这样,当他们接到电话时会发生什么?如果没有,我应该自己定义它们吗?

另外,出于好奇,是否有一个库已经定义了所有堆栈函数?

最佳答案

how can the make_empty() function work?

这样想:你期望 make_empty 达到什么效果?嗯,显然是为了清空堆栈,但这对于我们拥有的接口(interface)来说意味着什么?有几点:

  • 清空堆栈后,is_empty 应该为 true。设置 top = 0 可以实现这一点吗?是的,因为 is_empty 只是检查 top == 0
  • 清空堆栈后,将其弹出应该会导致下溢。设置 top = 0 可以实现这一点吗?是的,因为如果 is_empty 为 true,pop 将导致下溢,事实也确实如此。
  • 清空堆栈后,我们应该能够在溢出之前压入 STACK_SIZE 次。设置 top = 0 可以实现这一点吗?是的,因为 push 每次都会将 top 加一,直到 top == STACK_SIZE 才会导致溢出。因此,如果 top 为零,我们可以推送 STACK_SIZE 次。

By just initializing top to 0, contents has still all its elements loaded in... shouldn't contents be initialized as well?

为了什么?大小为 0 的数组?我们不能这样做,因为 contents 已被声明为 STACK_SIZE 大小,而不是 0。数组的大小是固定的,永远不会改变。

我们可以将所有元素设置为 0,但这实际上不会完成任何事情。索引为 >= top 的元素的值永远不会影响任何东西,那么为什么要费心去改变它们呢?

what do the 2 stack_overflow() and stack_underflow() functions do?

大概他们应该告诉用户发生了溢出或下溢,然后退出应用程序或调用某种错误处理程序。

Is their behavior defined by default in stdio.h?

没有。

If not, am I supposed to define them by myself?

大概。

关于c - stack_overflow() 函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53672398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com