#include<stdio.h>
#include<stdlib.h>
typedef int StackElementType;
typedef struct node
{
StackElementType data;
struct node *next;
}LinkStackNode;
typedef LinkStackNode *LinkStack;//结构定义
//初始化栈
void InitStack(LinkStack &S);
void Push(LinkStack &top,StackElementType x);
void Pop(LinkStack &top);
void Gettop(LinkStack &top);
void ShowStack(LinkStack &S);
void main()
{
int x;
LinkStack top=NULL;
LinkStack S=NULL;
InitStack(top);
printf("请输入数据:");
scanf("%d",&x);
while(x!=0)
{
Push(top,x);
scanf("%d",&x);
}
printf("\n元素已入栈");
printf("\n栈顶元素为:");
ShowStack(top);
printf("\n此时的栈顶元素为:");
Gettop(top);
Pop(top);
printf("\n栈顶元素弹出后的栈为:");
ShowStack(top);
printf("\n此时的栈顶元素为:");
Gettop(top);
}
void InitStack(LinkStack &S)
{
S=(LinkStack)malloc(sizeof(LinkStackNode));
S->next=NULL;
}
void Push(LinkStack &top,StackElementType x)
{
LinkStackNode *temp;
temp=(LinkStackNode *)malloc(sizeof(LinkStackNode));
if(temp==NULL)
printf("\n申请空间失败");
temp->data=x;
temp->next=top->next;
top->next=temp;
}
void Pop(LinkStack &top)
{
LinkStackNode *temp;
temp=top->next;
if(temp==NULL)
printf("\n栈为空");
top->next=temp->next;
printf("\n出栈元素为:");
printf("%d",temp->data);
free(temp);
}
void Gettop(LinkStack &top)
{
LinkStackNode *temp;
temp=top->next;
if(temp==NULL)
printf("\n栈为空");
else
{
printf("%d",temp->data);
}
void ShowStack(LinkStack &S)
{
LinkStackNode *p;
p=S->next;
printf("\n栈内元素为: ");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
}