gpt4 book ai didi

c - C 中第一个堆栈中的项目无法到达第二个堆栈

转载 作者:行者123 更新时间:2023-11-30 19:40:02 24 4
gpt4 key购买 nike

我的任务是制作第一个包含字母“PASCAL”的堆栈,通过使用另外两个堆栈将其变成“LASCAP”。我的问题是,当我尝试从第一个堆栈弹出到第二个堆栈时,即使项目从第一个堆栈中取出,第二个堆栈也不会得到任何项目,从而使它们都是空的

typedef struct{
int Top;
StackElementType Element[StackLimit];} // representation of stack
StackType;
int main(){
Push(&StackA,'P'); // pushing the items
Push(&StackA,'A');
Push(&StackA,'S');
Push(&StackA,'C');
Push(&StackA,'A');
Push(&StackA,'L');

for (i=0; i<7; i++)
Pop(&StackA,&StackB.Element[i]); // popping from first to second stack
return 0;
}
void Push(StackType *Stack, StackElementType Item)
{
if (!FullStack(*Stack)) { //item push in stack function
Stack -> Top++;
Stack -> Element[Stack -> Top] = Item;
}
else
printf("Full Stack...");
}
void Pop(StackType *Stack, StackElementType *Item) //popping items function
{
if (!EmptyStack(*Stack)) {
Stack -> Top--;
*Item = Stack -> Element[Stack -> Top];
}
else
printf("Empty Stack...");
}

最佳答案

我认为有两个问题:

您不将元素插入stackB,而是直接分配其元素:

for (i=0; i<7; i++)
Pop(&StackA,&StackB.Element[i]);

这不会影响 stackB.Top,因此后续的 Pop() 不会返回任何内容

Push() 中,您有:

    Stack -> Top++;
Stack -> Element[Stack -> Top] = Item;

因此,在推送最后一个字符后,stackA.Top 应该为 6,并且 Element[0] 将永远不会被使用,而只会使用 Element[1]Element[6]。但在 Pop() 中,它是:

    Stack -> Top--;
*Item = Stack -> Element[Stack -> Top];

因此弹出的第一个元素是Element[5],在您的情况下是“A”

关于c - C 中第一个堆栈中的项目无法到达第二个堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35912476/

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