//仅供参考,代码不全。没有测试
#include<stdio.h>
#include<stdlib.h>#define Status int
#define TRUE 1
#define FALSE 0
typedef int DataType
typedef struct node
{
DataType data ;
struct node *next;
}Node,*LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;//用来存储栈的长度
};
//进栈操作:插入元素e为新的栈顶元素
Status push(LinkStack *S,DataType e)
{
LinkStackPtr s = (LinkStackPtr)malloc(sizeof(Node));
s->data = e;
s->next = S->top;
S->top = s;
S->count++;
return TRUE;
}
//出栈操作:若栈不为空,则删除S的栈顶元素,用e返回其值,并返回TRUE,否则返回FALSE;
Status pop(LinkStack *S,DataType *e)
{
LinkStackPtr p;
if(StackEmpty(*S))
{
return FALSE;
}
*e = S->top->data;
p = S->top;
S->top = S->top->next;
free(p);
S->count--;
return TRUE;
}
Status InitStack(LinkStack *S)
{
s->top = NULL;
count = 0;
return FALSE;
}
Status ClearStack(LinkStack *s)
{
LinkStackPtr q,p;
p=s->top;
while (p)
{
q=p;
p=p->next;
free(q);
}
s->top = NULL;
count = 0;
return TRUE;
}
Status StackEmpty(LinkStack s)
{
if(s.count == 0)//s->top = NULL?
{
return TRUE;
}
else
{
return FALSE;
}
}
Status StackLength(LinkStack s)
{
return s.count;
}
///* 若栈不空,则用e返回S的栈顶元素,并返回TRUE;否则返回FALSE
Status GetTop(LinkStack s,DataType *e)
{
if(s.count != 0)
{
*e = s.top->data;
return TRUE;
}
else
{
return FALSE;
}
}
void visit(DataType e)
{
printf("%d\n",e);
return TRUE;
}
Status StackTravers(LinkStack s)
{
LinkStackPtr p;
p = s.top;
while(p)
{
visit(p->data);
p=p->next;
}
return TRUE;
}
int main()
{
return 0;
}