链栈的输入与输出

来源:互联网 发布:linux新增硬盘分区命令 编辑:程序博客网 时间:2024/06/14 18:50
#include<malloc.h> 
#include<stdio.h> 
#include<stdlib.h> 
typedef int Status; 
typedef int SElemType; 
#define STACK_INIT_SIZE 100 
#define STACKINCREMENT 20
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef struct LinkNode{
SElemType data;
LinkNode * next;
}*LiStack;//定义一个数据节点
void InitStack(LiStack &S)
{
S=(LiStack )malloc(sizeof (LiStack));
S->next=NULL;
}//初始化栈
/*
int stackempty(LiStack &S)
{
if(S->next=NULL)
return OK;
}//判断栈是否为空
*/
void ElemTyPush(LiStack &S,SElemType e)
{
LiStack p;
p=(LiStack )malloc(sizeof(LiStack));
p->data=e;
p->next=S->next;
S->next=p;
}//进栈就是逆序建的,正好符合栈的特点
int  output(LiStack &S,SElemType &e)
{
LiStack p;
p=S->next;
e=p->data;
S=S->next;
return e;
}//输出栈中的元素
int topdata(LiStack &S,SElemType &e)
{
LiStack p;
p=S->next;
e=p->data;
return e;
}
int main()
{
LiStack S;
int e,i,j,k;
InitStack(S);
printf("输入栈中元素的个数:\n");
scanf("%d",&i);
printf("输入栈中元素的值:\n");
for(i;i>0;i--)
{
scanf("%d",&e);
ElemTyPush(S,e);
}
k=topdata(S,e);
printf("栈顶元素为:%d\n",k);
printf("栈中的元素为:\n");
while(S->next!=NULL)
{
j=output(S,e);


printf("%d\n",j);
}
return 0;
}