我的任务是制作第一个包含字母" PASCAL"一个接一个地制作它" LASCAP"通过使用2个堆栈。我的问题是,当我尝试从第一个堆栈弹出到第二个堆栈时,即使项目从第一个堆栈中出来,第二个堆栈也没有得到任何一个,使它们都是空的
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...");
}
答案 0 :(得分:0)
我认为有两个问题:
您不会将元素推送到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'