/**
开发环境codeblock
xxwu
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREASEMENT 10
typedef int ElemType;
typedef struct Stack {
ElemType *base;
ElemType *top;
int stack_size;
} SqStack;
//打印栈中元素
void printStack(SqStack s);
//初始化栈
bool InitStack(SqStack *s);
//栈判空
bool isEmpty(SqStack s);
//获取栈中元素个数
int getLength(SqStack s);
//插入栈
bool putStack(SqStack *s, ElemType e);
//出栈
ElemType outStack(SqStack *s);
//获取栈顶元素
ElemType getTopElem(SqStack s);
//清空栈
bool clearStack(SqStack *s);
//初始化栈
bool InitStack(SqStack *s) {
s->base = (ElemType *) malloc(STACK_INIT_SIZE * sizeof(ElemType));
if(s->base == NULL) {
return false;
}
s->top = s->base;
s->stack_size = STACK_INIT_SIZE;
return true;
}
//栈判空
bool isEmpty(SqStack s) {
return s.base == s.top? true : false;
}
//获取栈中元素个数
int getLength(SqStack s) {
return s.top - s.base;
}
//打印栈中元素
void printStack(SqStack s) {
while(s.top != s.base) {
s.top--;
printf("elems in the stack :%d\n", *s.top);
}
}
//插入栈
bool putStack(SqStack *s, ElemType e) {
//栈已满重新分配存储空间
if(s->top - s->base >= s->stack_size) {
s->base = (ElemType *) realloc(s->base,(s->stack_size + STACK_INCREASEMENT)*sizeof(SqStack));
if(s->base == NULL)
return false;
s->top = s->base + s->stack_size;
s->stack_size += STACK_INCREASEMENT;
}
//入栈
*(s->top) = e;
s->top++;
return true;
}
//出栈
ElemType outStack(SqStack *s) {
if(isEmpty(*s)) return NULL;
s->top--;
ElemType e = *(s->top);
return e;
}
//获取栈顶元素
ElemType getTopElem(SqStack s) {
if(isEmpty(s)) return NULL;
return *(s.top-1);
}
//清空栈
bool clearStack(SqStack *s) {
s->top = s->base;
return true;
}
int main()
{
SqStack S;
InitStack(&S);
putStack(&S,1);
putStack(&S,2);
putStack(&S,3);
putStack(&S,4);
putStack(&S,5);
putStack(&S,6);
printf("the out stack elem is : %d \n",outStack(&S));
printf("length of S:%d \n",getLength(S));
printStack(S);
clearStack(&S);
printf("the length of stack after cleared : %d", getLength(S));
return 1;
}
运行结果: