1.0:栈的简介
1.1:定义
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。
1.2:理解
简而言之,栈符合后进先出的原则。只需要模拟顺序表中尾插尾删的逻辑,就可以实现。
2.0:栈的实现
2.1:创建空间与初始化
typedef int replace;
typedef struct SList {
replace* pos; //开空间
int top; //有效个数
int capacity; //容量
}SNode;
//初始化
void initialization(SNode* ps) {
assert(ps);
ps->pos = (replace*)malloc(sizeof(replace) * 4);
ps->top = 0;
ps->capacity = 4;
}
int main() {
//创建
SNode s1;
//初始化
//进行操作
//销毁
Destruction(&s1);
return 0;
}
2.2:插入
//插入-尾插
void SLPush(SNode* ps, replace x) {
assert(ps);
if (ps->capacity == ps->top) {
//扩容
replace* tmp = (replace*)realloc(ps->pos, (sizeof(replace))*(ps->capacity)*2);
if (tmp == NULL) {
perror("realloc fail");
exit(-1);
}
ps->capacity = (ps->capacity) * 2;
ps->pos = tmp;
}
ps->pos[ps->top] = x;
ps->top++;
}
2.3:删除
//删除-尾删
void Delete(SNode* ps) {
assert(ps);
assert(ps->top > 0);
ps->top--;
}
2.4:获取有效长度
//有效长度
int Length(SNode* ps) {
assert(ps);
return ps->top ;
}
2.5:检验是否为空
//检验是否为空
bool inspect(SNode* ps) {
assert(ps);
return ps->top == 0;
}
2.6:获取栈顶元素
//获取栈顶元素
replace STTop(SNode* ps) {
assert(ps);
assert(ps->top > 0);
printf("%d ",ps->pos[ps->top-1]);
}
2.7:销毁
//销毁
void Destruction(SNode* ps) {
assert(ps);
free(ps->pos);
ps->pos = NULL;
ps->top = 0;
ps->capacity = 0;
}
如有不足,还请各位大佬指教!!!