#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef struct linknode
{
int data;
struct linknode *next;
} LiStack;
int StackFull(LiStack *s);
LiStack *InitStack(void) //初始化栈
{
LiStack *s;
s=(LiStack*)malloc(sizeof(LiStack));
s->next=NULL;
return s;
}
int Push(LiStack *s,int e) //入栈 头结点不放数据
{
LiStack *p1,*q;
if(StackFull(s)==1)
{
printf("栈满!\n");
return 0;
}
printf("入栈成功!\n");
p1=(LiStack*)malloc(sizeof(LiStack));
p1->data=e;
p1->next=NULL;
if(s->next==NULL)s->next=p1;
else
{
for(q=s->next; q->next!=NULL; q=q->next);
q->next=p1;
}
return 1;
}
int StackLength(LiStack *s) //栈长度
{
int i=0;
LiStack *p2;
p2=s->next;
while(p2!=NULL)
{
i++;
p2=p2->next;
}
return i;
}
int StackFull(LiStack *s) //判断栈满
{
LiStack *p3;
int i=0;
for(p3=s; p3->next!=NULL; p3=p3->next,i++);
if(i==MAXSIZE)return 1;
else return 0;
}
void DispStack(LiStack *s) //显示栈元素
{
LiStack *p4;
p4=s->next;
if(s->next==NULL)printf("栈为空!\n");
while(p4!=NULL)
{
printf("%d ",p4->data);
p4=p4->next;
}
printf("\n");
}
int Pop(LiStack *s) //出栈
{
LiStack *p5,*q;
if(s->next==NULL)
{
printf("栈为空!\n");
return 0;
}
printf("出栈成功!\n");
for(p5=s; p5->next!=NULL; q=p5,p5=p5->next);
q->next=NULL;
free(p5);
return 1;
}
void GetTop(LiStack *s) //获取栈顶元素
{
LiStack *p6;
if(s->next==NULL)
{
printf("栈为空!\n");
return;
}
for(p6=s; p6->next!=NULL; p6=p6->next);
printf("栈顶元素为:%d\n",p6->data);
}
int main()
{
int i,elem;
LiStack *p;
p=InitStack(); //初始化
while(1)
{
printf("1.入栈\n2.出栈\n3.取栈顶元素\n4.显示\n5.输出栈的长度\n6.结束程序\n");
printf("请输入想要实现的功能: ");
scanf("%d",&i);
if(i==1)
{
printf("请输入 一个元素:");
scanf("%d",&elem);
Push(p,elem);
}
else if(i==2)Pop(p);
else if(i==3)GetTop(p);
else if(i==4)DispStack(p);
else if(i==5)printf("长度为:%d\n",StackLength(p));
else if(i==6)break;
else printf("请重新输入!\n");
}
}
代码运行效果图