#include <stdio.h>
#include<stdlib.h>
#define Ok 1
#define Error 0
typedef int Status;
typedef int ElemType;
typedef struct LNoelist
{
ElemType data;
struct LNoelist *next;
}LNoelist; //链栈每个节点的结构体定义
typedef struct SqlStack
{
struct LNoelist *top;
struct LNoelist *base;
int length;
}SqlStack; //链栈指针的结构体的定义
Status Ini_Stack(SqlStack *q) //初始化链栈
{
q->base=(LNoelist*)malloc(sizeof(LNoelist));
if(!q->base)
{
printf("初始化错误");
return Error;
}
q->top=q->base;
q->length=0;
return Ok;
}
Status push(SqlStack *q,ElemType e) //入栈
{
LNoelist *s;
s=(LNoelist*)malloc(sizeof(LNoelist));
s->data=e;
s->next=q->top;
q->top=s;
q->length++;
return Ok;
}
Status pop(SqlStack *q,ElemType &e) //出栈
{
LNoelist *s;
s=q->top;
e=q->top->data;
q->top=q->top->next;
free(s);
return 1;
}
Status print(SqlStack *q) //按照top减来输出栈内容,其实就是弹栈操做
{
printf("您输入的链式栈为");
while(q->top!=q->base)
{
printf("%d",q->top->data);
q->top=q->top->next;
}
return Ok;
}
Status print1(SqlStack *q) //按照弹栈输出
{
int e;
printf("您输入的链式栈为");
while(q->top!=q->base)
{
pop(q,e);
printf("%d",e);
}
return 1;
}
void main()
{
SqlStack *q;int e;
q=NULL;
q=(SqlStack*)malloc(sizeof(LNoelist));
Ini_Stack(q);
printf("请输入数据啊(按0结束)");
scanf("%d",&e);
while(e!=0)
{
push(q,e);
scanf("%d",&e);
}
//print(q);
print1(q);
getchar();
getchar();
}
比较简单,就是单链表的一个有顺序的应用