gpt4 book ai didi

c - 堆栈无法成功将数字插入其中

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:33 25 4
gpt4 key购买 nike

我正在尝试创建一个“桶”来保存数组中的元素,当我访问 push 函数时,我想将 x 元素放入该数组中。我不明白为什么数组一直为空。它为此输入打印:

"/n /n /n 堆栈是空的! 弹出:-9999 \n \n \n \n \n 堆栈是空的! 弹出:-9999 \n \n \n \n \n \n"

#include <stdio.h>
#include <stdlib.h>


typedef struct stivaStack
{
int arr[10];
int len;
}stivaStack_t;


void printStiva(stivaStack_t S)
{
int i;
for (i=0;i<S.len;i++)
printf("%d ",S.arr[i]);
printf("\n");
}

void stivaPush(int x, stivaStack_t S)
{
if (S.len+1<10)
{
int a=S.len;
S.arr[a]=x;
S.len=a+1;
}
else
printf("The stack is full can't place %d!\n",x);
}

int stivaPop(stivaStack_t S)
{
if (S.len>0)
{
S.len--;
return S.arr[S.len];
}
else
{
printf("The stack is empty!\n");
return -9999;
}
}

int main()
{

stivaStack_t SS;
SS.len=0;

stivaPush(102,SS); printStiva(SS);
stivaPush(25,SS); printStiva(SS);
stivaPush(9,SS); printStiva(SS);
printf("Popped: %d\n",stivaPop(SS)); printStiva(SS);
stivaPush(3,SS); printStiva(SS);
stivaPush(12,SS); printStiva(SS);
stivaPush(29,SS); printStiva(SS);
stivaPush(40,SS); printStiva(SS);
printf("Popped: %d\n",stivaPop(SS)); printStiva(SS);
stivaPush(155,SS); printStiva(SS);
stivaPush(4,SS); printStiva(SS);
stivaPush(19,SS); printStiva(SS);
stivaPush(25,SS); printStiva(SS);
stivaPush(49,SS); printStiva(SS);

return 0;
}

最佳答案

这些函数处理堆栈的副本而不是原始堆栈本身。

您必须通过对函数的引用来传递堆栈。

例如

void stivaPush(int x, stivaStack_t *S)
{
if (S->len < 10)
^^^^^^^^^^^
{
int a = S->len;
S->arr[a]=x;
S->len=a+1;
}
else
printf("The stack is full can't place %d!\n",x);
}

函数调用看起来像

stivaPush(102, &SS); 

当函数发出消息时,这也是一个坏主意。

上面的函数可以这样定义

int stivaPush( stivaStack_t *S, int x )
{
int success = S->len < 10;

if ( success )
{
S->arr[len++] = x;
}

return success;
}

关于c - 堆栈无法成功将数字插入其中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47777528/

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