由于单栈的代码实现比较简单,所以没有加注释,不理解的地方请参照线性表的顺序存储结构的实现
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 10
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int top; //栈顶元素的位置
}Stack;
//初始化
Status InitStack(Stack *s)
{
s -> top = -1;
int i;
for(i = 0; i < MAXSIZE; i++)
{
s -> data[i] = 0;
}
return OK;
}
//入栈
Status Push(Stack *s, ElemType elem)
{
if(s -> top == MAXSIZE - 1) return ERROR;
s -> data[s -> top + 1] = elem;
s -> top++;
return OK;
}
//弹栈
Status Pop(Stack *s, ElemType *elem)
{
if(s -> top == -1) return ERROR;
*elem = s -> data[s -> top];
s -> top--;
return OK;
}
//获取栈顶元素(不删除)
Status GetTop(Stack s, ElemType *elem)
{
if(s.top == -1) return ERROR;
*elem = s.data[s.top];
return OK;
}
//获取长度
int Length(Stack s)
{
return s.top+1;
}
//清空栈
Status Clear(Stack *s)
{
s-> top = -1;
return OK;
}
int main(void)
{
Status statu;
Stack s;
statu = InitStack(&s);
if(statu == OK)
{
printf("%s : %d\n", "InitStack", s.top);
statu = Push(&s, 21);
if(statu == OK)
{
printf("%s : %d, %d\n", "Push", s.data[0], s.top);
Push(&s, 22);
ElemType popElem;
statu = Pop(&s, &popElem);
if(statu == OK)
{
printf("%s : %d, %d\n", "Pop", popElem, s.top);
ElemType getTopElem;
statu = GetTop(s, &getTopElem);
if(statu == OK)
{
printf("%s : %d , %d\n", "GetTop", getTopElem, Length(s));
statu = Clear(&s);
if(statu == OK)
{
printf("%s : %d\n", "Clear", s.top);
}
}
}
}
}
return 0;
}