社区讨论

链栈。为何输出结果完全不符合预期??

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhke2y6l
此快照首次捕获于
2025/11/04 17:51
4 个月前
此快照最后确认于
2025/11/04 17:51
4 个月前
查看原帖
期待的输出结果:
5
4
3 2 1
原因:
数字5是第一个被压入栈的,所以它是第一个被弹出的,因此e1是5。
数字4是第二个被压入栈的,所以它是第二个被弹出的,因此e2是4。
弹出两个元素后,栈中剩余的元素是3、2和1,它们将按顺序被打印出来。
实际输出:
32758
286331929
5 4 3 2 1
代码如下:
CPP
#include<stdio.h>
#include<stdlib.h>
typedef int SElemType;
typedef struct StackNode
{
    SElemType data;
    struct StackNode *next;
}StackNode,*LinkStackPtr;
typedef struct 
{
    LinkStackPtr top;
    int count;
}LinkStack;
#define ERROR 0
#define OKAY 1
typedef int Status;
Status InitStack(LinkStack *S) 
{
    S->top = NULL; 
    S->count = 0;  
    return OKAY;
}
Status Push(LinkStack *S,SElemType e)
{
    LinkStackPtr m=(LinkStackPtr)malloc(sizeof(StackNode));
    m->data = e;
    m->next = S->top;
    S->top = m;
    S->count++;
    return OKAY;
}
Status StackEmpty(LinkStack S)  
{
    if(S.top == NULL)
    	return ERROR;
    return OKAY;
}
Status Pop(LinkStack *S,SElemType *e)
{
    if(StackEmpty(*S)) 
        return ERROR;
    LinkStackPtr p;
    *e = S->top->data; 
    p = S->top;
    S->top = S->top->next;
    free(p);
    p = NULL;  
    S->count--; 
    return OKAY;
}
int main()
{
    LinkStack S;
    InitStack(&S);
    Push(&S,1);
    Push(&S,2);
    Push(&S,3);
    Push(&S,4);
    Push(&S,5);
    SElemType e1,e2;
    Pop(&S,&e1);
    Pop(&S,&e2);
    printf("%d\n%d\n",e1,e2);
    for(LinkStackPtr p = S.top;p;p=p->next)
    {
        printf("%d ",p->data);
    }
    return 0;
}
感谢神犇解答。

回复

0 条回复,欢迎继续交流。

正在加载回复...