链栈定义
链栈即使用链式存储结构实现的栈,通常链栈用单链表来表示。链栈的结点结构与单链表的结构相同,在此使用StackNode表示,代码如下:
//链栈结点定义
#define MAXSIZE 100
#define Status int
typedef int SElemType;
typedef struct StackNode
{
SElemType data;
struct StackNode* next;
}StackNode,*LinkStack;
链栈的初始化
Status InitStack(LinkStack& S)
{//构造一个空栈S
S = NULL; //栈顶指针即S
return 1;
}
入栈
Status Push(LinkStack& S, SElemType e)
{
StackNode* p = new StackNode; //生成新结点
p->data = e; //将新结点数据域置为e
p->next = S; //将新结点插入栈顶
S = p; //修改栈顶指针为p
return 1;
}
出栈
Status Pop(LinkStack& S, SElemType& e)
{//删除S的栈顶元素,用e返回
if (S == NULL) return 0; //判断空栈
StackNode *p = S; //将栈顶临时赋给p
S = S->next; //删除
delete p; //释放空间
return 1;
}
取栈顶元素
SElemType GetTop(LinkStack& S)
{
if (S == NULL) return 0; //判断空栈
return S->data; //返回栈顶元素值
}
遍历打印链栈
//遍历输出栈
void printStack(LinkStack S)
{
printf("栈底:");
StackNode* p = S;
while (p != NULL)
{
printf("%d ", p->data);
p=p->next;
}
printf("\n");
}