一、栈的基本概念
栈是限制在一端进行插入和删除的线性表。允许操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”,特点是:后进先出。
栈的基本运算:
(1)创建栈---create_stack(len)
(2)清空栈---clear_stack(S)
(3)判断是否栈空---is_empty_stack(S)
(4)判断是否栈满---is_full_stack(S)
(5)元素入栈---push_stack(S,x)
(6)元素出栈---pop_stack(S)
(7)获取栈顶元素---get_top_stack(S)
(8)销毁栈---free_stack(S)
二、顺序栈
存储结构:
typedef int data_t; //定义栈中数据元素的数据类型
typedef struct
{
data_t *data; //指向栈的存储空间
int maxlen; //栈的最大元素个数
int top; //栈顶位置下标
}seqstack_t ; //顺序栈类型定义
栈的基本运算:
(1)创建栈
seqstack_t *create_stack(int len)
{
seqstack_t *S;
S = (seqstack_t *)malloc(sizeof(seqstack_t));
S->data = (data_t *)malloc(len * sizeof(data_t));
S->maxlen = len;
S->top = -1;
return S;
}
(2)清空栈
void clear_stack(seqstack_t *S)
{
S->top = -1;
}
(3)判断是否栈空
int is_empty_stack(seqstack_t *S)
{
return (S->top == -1 ? 1 : 0); //栈空返回1
}
(4)判断是否栈满
int is_full_stack(seqstack_t *S)
{
return (S->top == maxlen - 1 ? 1 : 0); //栈满返回1
}
(5)元素入栈
void push_stack(seqstack_t *S,data_t x)
{
//判断是否栈满
if(is_full_stack(S) == 1)
{
printf("栈满,无法入栈\n");
return;
}
S->top ++;
S->data[S->top] = x;
return ;
}
(6)元素出栈
data_t pop_stack(seqstack_t *S)
{
//判断是否栈空
if(is_empty_stack(S) == 1)
{
printf("栈空,无法出栈\n");
return -1;
}
S->top --;
return S->data[S->top+1];
}
(7)获取栈顶元素
data_t get_top_stack(seqstack_t *S)
{
//判断是否栈空
if(is_empty_stack(S) == 1)
{
printf("栈空,无法获取栈顶元素\n");
return -1;
}
return S->data[S->top];
}
(8)销毁栈
void free_stack(seqstack *S)
{
free(S->data);
S->data = NULL;
free(S);
S = NULL;
}