问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
//【任务2】在提示/**********blank**********/下面填写合适的内容完成算法设计,并上机调试程序。已知需要建立一个空的链栈,建立成功后元素依次入栈,s={56,89,71,25,69,48},请将下面程序补充完整。
#include <stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef int ElemType;
//定义链栈结点类型
typedef struct node
{
ElemType data;
struct node *next;
}StackNode,*LinkStack;
//初始化链栈
void InitStack(LinkStack top)
{
top=(LinkStack)malloc(sizeof(StackNode));
top->next = NULL;
}
//元素入栈
int Push(LinkStack top, ElemType x)
{
StackNode *NewNode;
//blank1:为结点NewNode分配存储空间
NewNode=( StackNode *)malloc(sizeof (struct node));
if(NewNode==NULL) return (FALSE);
//blank2:将数据x放入到结点NewNode的数据域中
NewNode->data=x;
//blank3:头结点top的后继作为结点NewNode的后继
NewNode->next=top;
//blank4:结点NewNode作为头结点top的新后继
top->next=NewNode->next;
return (TRUE);
}
//元素出栈
int Pop(LinkStack top, ElemType *x)
{
StackNode *DelNode;
DelNode=top->next; //指针DelNode指向删除结点
if(DelNode==NULL) //栈空
return (FALSE);
*x=DelNode->data;
/**********blank**********/
//blank5:被删除结点的后继成为头结点top的后继
top->next=top->next->next;
//blank6:释放删除结点的存储空间
free(top->next);
return (TRUE);
}
//输出栈内的元素
void PrintStack(LinkStack top)
{
StackNode *p = top->next;
while(p!=NULL)
{
printf("data=%d\t\t",p->data);
printf("address=%d\n",p->next);
p = p->next;
}
}
void main()
{
LinkStack top;
int count,i,result;
ElemType x;
//函数声明
void InitStack(LinkStack top);
int Push(LinkStack top, ElemType x);
int Pop(LinkStack top, ElemType *x);
void PrintStack(LinkStack top);
printf("链栈初始化...\n");
InitStack(top); //调用初始化函数
printf("初始化完成\n");
printf("\n输入需要入栈的元素个数:");
scanf_s("%d",&count);
for(i=1;i<=count;i++)
{
printf("输入第%d个入栈的元素:",i);
scanf_s("%d",&x);
result=Push(top, x); //调用入栈函数
if(result==1)
printf("当前元素入栈成功\n");
else
printf("存储空间分配失败,当前元素无法入栈\n");
}
printf("\n入栈完毕,输出当前栈内元素\n");
PrintStack(top);
result=Pop(top,&x); //调用出栈函数
if(result==1)
{
printf("\n出栈成功,出栈的栈顶元素值为%d,输出当前栈内元素\n",x);
PrintStack(top); //调用输出函数
}
else
printf("\n栈空,无法出栈\n");
}
运行结果及报错内容
使用了未初始化的局部变量“top”