#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef struct item {
int index;
} Item;
typedef struct stack {
Item arr[MAXSIZE];
int index;
} Stack ;
//初始化栈
bool initStack(Stack *s);
//入栈
bool push(Stack *s, Item *e);
//出栈
void pop(Stack *s, Item *e);
//依此显示栈中的数据
void StackTraverse(Stack *s);
//取得栈顶元素
bool getTop(Stack *s, Item *e);
//判断栈是否为空
bool stackEmpty(Stack *s);
//判断栈是否已满
bool stackFull(Stack *s);
//把栈设置为空
bool ClearStack(Stack *s);
bool initStack(Stack *s){
s->index = -1;
return true;
}
bool push(Stack *s, Item *e){
if(s->index == MAXSIZE - 1){
fprintf(stderr,"栈空间已满.\n");
exit(EXIT_FAILURE);
}
s->index++;
s->arr[s->index] = *e;
return true;
}
void pop(Stack *s, Item *e){
if( stackEmpty(s) ){
fprintf(stderr, "出栈错误,栈为空.\n");
exit(EXIT_FAILURE);
}
*e = s->arr[s->index];
s->index--;
}
void StackTraverse(Stack *s){
int i = s->index;
while(i >= 0){
printf("%d ",s->arr[i].index);
i--;
}
}
bool getTop(Stack *s, Item *e){
if(s->index < 0){
fprintf(stderr, "操作失败,栈为空.");
exit(EXIT_FAILURE);
}
*e = s->arr[s->index];
return true;
}
bool stackEmpty(Stack *s){
if(s->index == -1){
return true;
}else{
return false;
}
}
bool stackFull(Stack *s){
if(s->index == MAXSIZE - 1){
return true;
}else{
return false;
}
}
bool ClearStack(Stack *s){
s->index = -1;
return true;
}
int main(void){
Stack s;
if( !initStack(&s) ){
fprintf(stderr, "初始化失败.\n");
exit(EXIT_FAILURE);
}
Item i = {
i.index = 1
};
push(&s, &i);
/*
Item popItem;
pop(&s, &popItem);
printf("%d",popItem.index);
*/
/*
StackTraverse(&s);
*/
Item top;
getTop(&s,&top);
printf("%d",top.index);
return 0;
}