栈
一种特殊的表
其特殊之处在于,插入时只能从表尾插入,出表时也只能从表尾取出,
也就是后进先出
栈的定义(顺序表实现)
typedef int Type;
typedef struct Stack{
Type* _array;
size_t _size;//当前有效元素个数
size_t _capacity;//栈的最大容量
}Stack;
初始化
void stackInit(Stack* st, size_t n){
st->_array = (Type*)malloc(sizeof(Type)* n);
st->_capacity = n;
st->_size = 0;
}
插入(顺序表尾插操作)
void stackPush(Stack* st, Type data){
//检查容量
if (st->_size == st->_capacity){
st->_capacity *= 2;
st->_array = (Type*)realloc(st->_array, st->_capacity * sizeof(Type));
}
//尾插
st->_array[st->_size++] = data;
}
删除(顺序表尾删操作)
void stackPop(Stack* st){
//尾删
if (st->_size) {
st->_size--;
}
}
返回栈顶元素
Type stackTop(Stack* st){
return st->_array[st->_size - 1];
}
获取栈中有效元素个数
size_t stackSize(Stack* st){
return st->_size;
}
判断栈是否为空(为空返回0,否则返回1)
int stackEmpty(Stack* st){
if (st->_size == 0){
return 1;
}
return 0;
}
销毁栈
void stackDestory(Stack* st){
free(st->_array);
st->_array = NULL;
st->_size = st->_capacity = 0;
}