#include <stdio.h>
#include "stack.h"
int main(void)
{
SqStack st;
ElemType e;
InitStack(&st);
printf("栈%s/n", (StackEmpty(st) == 0 ? "空" : "不空"));
printf("a进栈/n"); Push(&st, 'a');
printf("b进栈/n"); Push(&st, 'b');
printf("c进栈/n"); Push(&st, 'c');
printf("d进栈/n"); Push(&st, 'd');
printf("栈%s/n", (StackEmpty(st) == 1 ? "空" : "不空"));
GetTop(st, &e);
printf("栈顶元素:%c/n", e);
printf("出栈次序:");
while((StackEmpty(st))) //栈空返回0,否则返回-1
{
Pop(&st, &e);
printf("%c ", e);
}
printf("/n");
return 0;
}
[cpp] view plaincopyprint?
#ifndef STACK
#define STACK
#define StackSize 100
typedef char ElemType;
typedef struct
{
ElemType data[StackSize]; //保存栈中元素
int top; //栈指针
}SqStack;
void InitStack(SqStack *st); //初始化栈
int Push(SqStack *st, ElemType x); //入栈操作
int Pop(SqStack *st, ElemType *x); //出栈操作
int GetTop(SqStack st, ElemType *x); //取栈顶元素
int StackEmpty(SqStack); //判断栈空操作
#endif
[cpp] view plaincopyprint?
#include <stdio.h>
#include "stack.h"
/************************************************
** 函数名:void InitStack(SqStack *st)
** 功能: 初始化栈
** 描述: 无
** 作者: 庞辉
*************************************************/
void InitStack(SqStack *st)
{
st->top = -1; //注意思考为什么初始化为-1呢?
}
/************************************************
** 函数名:int Push(SqStack *st, ElemType x)
** 功能: 入栈操作
** 描述: 栈满返回-1,成功返回0
** 作者: 庞辉
*************************************************/
int Push(SqStack *st, ElemType x)
{
if(StackSize - 1 == st->top) //从0开始计算
{
return -1;
}
else
{
st->top++;
st->data[st->top] = x;
return 0;
}
}
/************************************************
** 函数名:int Pop(SqStack *st, ElemType *x)
** 功能: 出栈操作
** 描述: 栈空返回-1,成功返回0
** 作者: 庞辉
*************************************************/
int Pop(SqStack *st, ElemType *x)
{
if(-1 == st->top)
{
return -1;
}
else
{
*x = st->data[st->top];
st->top--;
return 0;
}
}
/************************************************
** 函数名:int GetTop(SqStack st, ElemType *x)
** 功能: 取栈顶元素
** 描述: 栈空返回-1,成功返回0
** 作者: 庞辉
*************************************************/
int GetTop(SqStack st, ElemType *x)
{
if(-1 == st.top)
{
return -1;
}
else
{
*x = st.data[st.top];
return 0;
}
}
/************************************************
** 函数名:int StackEmpty(SqStack st)
** 功能: 判断栈空操作
** 描述: 栈空返回0,否则返回-1
** 作者: 庞辉
*************************************************/
int StackEmpty(SqStack st)
{
if(-1 == st.top)
{
return 0;
}
else
{
return -1;
}
}