题目设计了链栈的进栈,出栈,求栈的深度,取栈顶元素算法,判断栈是否空的操作。
首先输入想入栈的元素个数n,然后输入n个元素。输出时先输出栈顶元素,再输出栈的深度,最后输出栈内元素。里面
丢了一些语句(已经标出位置,共5处)请补全这些语句。
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkStackNode
{
int data;
LinkStackNode *next;
} LinkStackNode,*LinkStack;
void InitLinkStack(LinkStack *S)
{
*S=(LinkStackNode *)malloc(sizeof(LinkStackNode));
(*S)->next=NULL;
}
void Push(LinkStack S,int x)
{
LinkStackNode *p;
p=(LinkStackNode *)malloc(sizeof(LinkStackNode));
p->data=x;
p->next=S->next;/*语忈1忊补充*/
S->next=p;
}
int Pop(LinkStack S,int *x)
{
LinkStackNode *p;
if(S->next!=NULL)
{
p=S->next;
*x=p->data;
S->next=p->next;/*语忈2忊补充*/
free(p);
return 1;
}
return 0;
}
int GetTop(LinkStack S,int *x)
{
if(S->next!=NULL)
{
S=S->next;
*x=S->data;/*语忈3忊补充*/
return 1;
}
return 0;
}
int StackDepth(LinkStack S)
{
LinkStackNode *p;
int count = 0;
p=S->next;/*语忈4忊补充*/
while(p!=NULL)
{
++count;
p=p->next;
}
return count;
}
int StackEmpty(LinkStack S)
{
if(S->next==NULL/*语忈5忊补充*/)
return 1;
else
return 0;
}
int main()
{
LinkStack S;
InitLinkStack(&S);
int i,n,t,x,a[20];
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
Push(S,a[i]);
}
GetTop(S,&x);
printf("%d\n",x);
printf("%d\n",StackDepth(S));
while(!StackEmpty(S))
{
Pop(S,&x);
printf("%d ",x);
}
return 0;
}