1.概念
栈是一种线性的数据结构,采用先进后出的方式管理数据,一端的位置固定(栈底),另外一端随着数据的进出随时改变(栈顶)
2.实现思路
栈是一种逻辑概念,可以使用顺序结构来实现(顺序栈),也可以使用链式结构来实现(链式栈)
链式栈可以使用单链表来实现,以头结点作为栈顶,从头部插入作为入栈,从头部删除作为出栈
3.设计结构体
typedef int T;
typedef struct{
T *pdata;//动态内存首地址
int top;//栈顶
}sqstack_t,*stacklist_t;
C语言实现
- 创建空栈
stacklist_t create_emptystack()
{
stacklist_t stack = (stacklist_t)malloc(sizeof(sqstack_t));
if(stack){
//分配栈空间
stack->pdata = (T *)malloc(sizeof(T)*STACK_SIZE);
if(stack->pdata==NULL){
//释放栈结构
free(stack);
stack = NULL;
return NULL;
}
//初始化栈顶
stack->top = 0;
}
return stack;
}
- 判空/判满
//判空 0---非空 1---空
int is_empty(stacklist_t stack)
{
return stack->top==0;
}
//判满 0---不满 1---满
int is_full(stacklist_t stack)
{
return stack->top==STACK_SIZE;
}
- 入栈
void stack_push(stacklist_t stack,T dt)
{
//判满
if(is_full(stack)){
printf("stack is full!\n");
return;
}
//入栈
stack->pdata[stack->top++] = dt;
}
- 出栈
T stack_pop(stacklist_t stack)
{
//判空
if(is_empty(stack)){
printf("stack is empty!\n");
return -EEMPTY;
}
//出栈
return stack->pdata[--stack->top];
}
- 获取栈顶元素
T stack_top(stacklist_t stack)
{
return stack->pdata[stack->top-1];
}
- 置空
void make_empty(stacklist_t stack)
{
stack->top = 0;
}
- 销毁栈
void destroy_stack(stacklist_t *pstack)
{
//释放栈空间
free((*pstack)->pdata);
(*pstack)->pdata = NULL;
//释放栈结构
free(*pstack);
*pstack = NULL;
}