#include<stdio.h>
#include<stdlib.h>
typedef struct StackNod
{
int date;
struct StackNod *next;
}StackNode,*LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;
}LinkStack;
//当栈为空时返回1否则返回0
int StackEmpty(LinkStack s)
{
if(s.count==0)
return 1;
else
return 0;
}
//进栈
int Push(LinkStack *s,int e)
{
LinkStackPtr s1=(LinkStackPtr)malloc(sizeof(StackNode));
s1->date=e;
s1->next = s->top;
s->top = s1;
s->count++;
return 1;
}
//出栈
int Pop(LinkStack *s,int *e)
{
LinkStackPtr p;
if(StackEmpty(*s))
return 0;
*e = s->top->date;
p=s->top;
s->top=s->top->next;
free(p);
s->count--;
return 1;
}
void PRINTF(LinkStack s)
{
LinkStackPtr p;
p=s.top;
while(p)
{
printf("%d ",p->date);
p=p->next;
}
}
//取得栈顶元素,否则返回0
int GetTop(LinkStack s,int *e)
{
if(!StackEmpty(s))
{
*e=s.top->date;
printf("当前栈顶元素为%d",*e);
return 1;
}
else
{
printf("\n栈已经为空");
return 0;
}
}
//返回栈顶元素的个数
int StackLenth(LinkStack s)
{
int t = 0;
LinkStackPtr p;
p = s.top;
while(p)
{
p=p->next;
t++;
}
return t;
}
//若栈存在则将栈清空
int ClearStack(LinkStack *s)
{
LinkStackPtr p;
while(s->top)
{
p=s->top;
s->top=s->top->next;
s->count--;
free(p);
}
return 1;
}
int DestoryStack(LinkStack **s)
{
ClearStack(*s);
free(*s);
return 1;
}
int main()
{
LinkStack *s;
s = (LinkStack*)malloc(sizeof(LinkStack));
s->top=NULL;
s->count=0;
int i,temp,e;
printf("栈的初始化\n请输入栈的初始元素个数:");
scanf("%d",&temp);
printf("请输入栈的元素:");
for(i=0;i<temp;i++)
{
scanf("%d",&e);
Push(s,e);
}
printf("当前栈内元素为:");
PRINTF(*s);
printf("\n请输入要出栈几个元素");
scanf("%d",&temp);
for(i=0;i<temp;i++)
{
Pop(s,&e);
if(StackEmpty(*s))
{
printf("\n%d出栈后栈已经为空",e);
break;
}
else
printf("%d出栈成功\n",e);
}
GetTop(*s,&e);
printf("\n栈内还有%d个元素",StackLenth(*s));
ClearStack(s);
printf("\n栈已经清空");
DestoryStack(&s);
printf("\n栈已经摧毁");
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交