社区讨论
链栈。为何输出结果完全不符合预期??
学术版参与者 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 条回复,欢迎继续交流。
正在加载回复...