求求各位大佬了,为什么a返回的是地址啊!
#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int ElemType;
#define TRUE 1;
#define ERROR 0;
typedef struct Node
{
ElemType data;
struct Node* next;
}StackNode,*StackList;
Status InitStack(StackList S); //初始化(无头结点)
Status Push(StackList S, ElemType e); //头插法
Status Pop(StackList S, ElemType* a); //弹出
int main()
{
int n;
ElemType e, a;
StackList S;
S = (StackList)malloc(sizeof(StackNode));
if (InitStack(S) == 1)
{
printf("恭喜!构建空链栈成功!\n");
}
printf("请输入插入元素个数:");
scanf("%d", &n);
printf("请输入插入栈的元素:");
for (int i = 0; i < n; i++)
{
scanf("%d", &e);
Push(S, e);
}
printf("恭喜你!插入成功!\n");
if (Pop(S, &a) == 1)
{
printf("恭喜你!出栈成功!\n");
printf("删除栈顶元素:%d\n", a);
}
return 0;
}
Status InitStack(StackList S)
{
S = NULL;
return TRUE;
}
Status Push(StackList S, ElemType e)
{
StackList P;
P = (StackList)malloc(sizeof(StackNode));
P->data = e;
P->next = S->next;
S = P; //修改栈定指针
return TRUE;
}
Status Pop(StackList S, ElemType *a)
{
StackList P;
P = S;
if (P == NULL)
return ERROR;
*a = S->data;
S = S->next;
free(P);
return TRUE;
}
Push阶段有问题,这个相当于链表中的头插法,我在你的基础上改了一下,你注意单步调试
Status Push(StackList S, ElemType e)
{
StackList P;
P = (StackList)malloc(sizeof(StackNode));
P->data = e;
P->next = S->next;
S->next = P; //修改栈定指针
return TRUE;
}
Pop阶段相当链表中删除第一个结点,这是我在你基础上改的
Status Pop(StackList S, ElemType* a)
{
StackList P;
P = S->next;
if (S == NULL)
return ERROR;
S->next = P->next;
*a = P->data;
free(P);
return TRUE;
}
这是运行的截图
PUSH阶段中a的值出错了,你的S = P那里不知道为什么没有成功,S = P之后,S->data的值很奇怪,我再看看
坐等大佬解决,我太菜了。。。现在已知在PUSH阶段输出没问题,PUSH一过就出问题了