【发布时间】:2019-08-25 18:40:36
【问题描述】:
我正在尝试使用 C 中的数据结构实现多个堆栈。问题是我无法从 main() 函数本身执行此操作。
我创建了一个名为“stk”的自定义结构,其中包括一个整数数组、a[20] 和顶部。现在,我通过在主函数中写入“stk s”来创建一个变量“s”。然后,我使用“s.top = -1”将“top”初始化为-1。但是,一旦我使用推送功能,顶部只会增加一次,即它达到 0,无论我推送多少次,它都保持为零。我相信原因是因为我在 main() 中将 's' 声明为局部变量而不是全局变量,并且 push 函数的类型为 void,因此它停止了 top 的进一步增加。但是,如果我将它声明为全局变量,一切正常,但同样,这样做会将我限制为只有一个堆栈,因为现在,我必须在 push 函数内指定 's',因为它不会接受任何任意价值。
typedef struct
{
int a[20];
int top;
}stk;
stk s;
void push(int x) //It'll only work for one stack i.e. "s"
{
s.top++;
s.a[s.top] = x;
}
int main()
{
//I intend to declare "stk s, t" here
s.top = -1;
}
有什么方法可以使用相同的结构来创建不同的堆栈,比如说“stk t”,但为此,我需要在 main 中将它声明为两个不同的变量,如“stk s, t”和然后使用传递值推送?
【问题讨论】:
-
相同的结构,是的;相同的功能?不。更改您的函数以通过调用者提供的参数接受
stk作为指针。通过地址修改从调用者传递的任何堆栈。差不多就是这样。当然,您需要初始化本地 stks。无论哪种方式,您都希望在push中使用一些边界限制以避免溢出。 -
所以,如果我在全局声明 stk,那么,我需要为不同的堆栈使用不同的推送函数,但它们都可以使用相同的结构,对吧?如果我在 main 中本地声明,那么,我需要一个指针吗?