【发布时间】:2018-05-26 10:16:41
【问题描述】:
我正在尝试制作一个将元素保存在数组中的“桶”,当我访问推送函数时,我想将 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);否则,函数会处理堆栈的副本。
-
考虑到stivaPush函数中的if (S.len+1
-
@VladfromMoscow 谢谢,这可能是问题之一。我试图改变它,但我现在收到错误消息,说我请求成员 len 不是结构或联合。在我通过引用作为参数传递它之后,我应该如何在函数中访问这些值(len,arr)? S.len 或 *S.len 都不起作用。
-
@VladfromMoscow 我不想使用“通过引用传递”术语,因为 C 实际上并不做引用。
-
@AndreiSold 如果您使用的是指针,则语法会更改,例如 S->len。或 (*S).len
标签: c arrays stack push bucket