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

时间:2016-03-10 09:32:19

标签: c

我的任务是制作第一个包含字母" 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...");
 }

1 个答案:

答案 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'