栈的定义
栈:是限定只在表尾进行插入或删除的线性表。所以栈也成为后进先出的线性表
表头为栈底,表尾为栈顶,不含元素的空表为空栈
顺序栈的实现
顺序栈是指利用顺序存储结构实现的栈,即 利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时利用数组下标top指示栈顶元素在顺序栈中的位置。因为C语言中数组下标从0开始,这里以top = -1表示空栈。
顺序栈的数据结构:
#define maxStackNum 100
typedef struct{
int* data; //栈元素指针
int top; //栈顶下标
}MyStack;
- 初始化
MyStack* myStackCreate(){
MyStack* stack = (MyStack*)malloc(sizeof(MyStack));
stack->data = (int*)malloc(sizeof(int) * maxStackNum ); //为顺序栈分为最大容量为maxStackNum的数组空间
stack->top = -1; //栈顶下表
}
- 入栈
void myStackPush(MyStack* obj, int value){
if(obj->top == maxStackNum - 1) //栈满
return;
obj->data[++obj->top]; //栈顶下标加1,元素压入栈顶(top始终为栈顶下标)
}
- 出栈
void myStackPop(MyStack* obj){
if(obj->top == -1) //栈空
return;
obj->top--;
}
- 取栈顶元素
int myStackTop(MyStack* obj){
if(obj->top != -1) //栈非空
return obj->data[obj->top];
}
- 判断栈是否为空
bool myStackEmpty(MyStack* obj){
if(obj->top == -1)
return true;
else
return false;
}
- 销毁栈
void myStackFree(MyStack* obj){
free(obj->data);
free(obj);
}