顺序栈基本运算实现,
1、置空栈
void initStack(SeqStack * s)
{
// 顺序栈的下标试从0开始,所以置空应该是-1
s->top = -1;
}
2、栈判空
int StackEmpty(SeqStack * s)
{
// -1代表没有值
return s->top == -1;
}
3、判栈满
int StackFull(SeqStack * s)
{
// SeqStack - 1; 是栈的最大数量
return s->top == SeqStack - 1;
}
4、入栈
void Push(SeqStack * s, DataType x)
{
if (stackFull(s))
{
printf('栈满了')
}
else
{
s->top = s->top + 1; // 栈顶指针加一
s->data[s->top] = x; // x入栈
}
}
5、出栈
DataType Pop(SeqStack * s)
{
if (StackEmpty(s))
{
printf('栈空');
exit(0); // 退出
}
else
{
return s->data[s->top--];
}
}
6、取栈顶
DataType GetTop(SeqStack * s)
{
if (StackEmpty(s))
{
printf('栈空');
exit(0);
}
else
{
return s->data[s->top];
}
}
链式栈基本操作
1、判栈空
int StackEmpty(LinkStack top)
{
return top == NULL;
}
2、进栈
LinkStack Push(LinkStack top, DataType x)
{
StackNode *p;
p = (StackNode *)malloc(sizeof(StackNode)); // 申请新节点
p->data = x;
p->next = top; //将新节点插入栈顶
top = p; // 使top指向新值
return top;
}
3、出栈
LinkStack Pop(LinkStack top, DataType x)
{
StackNode *p = top; // 保存栈顶指针
if (StackEmpty(top))
{
printf('空栈');
exit(0);
}
else
{
*x = p->next; //保存删除的节点并带回
top = p->nect; //栈顶指针指向下一个节点
free(p); // 删除p指向的节点
return top;
}
}
4、取栈顶元素
DataType GetTop(LinkStack top)
{
if (StackEmpty(top))
{
printf('空栈');
exit(0);
}
else
{
return top->data; // 返回栈顶节点值
}
}