栈
特点
有一端是固定 - 栈底
只能从栈顶的位置进行存/取数据
先进的后出(FILO)
顺序栈 - 顺序存储 - 数组
定义 结构体
#define MAX_SIZE 100
typedef int data_t;
typedef struct stack{
data_t data[MAX_SIZE]; //存储数据
int top; //保存栈顶的位置
}stack_t;
5.2.2 创建一个空栈
//创建一个空栈
定义一个stack_t类型的变量,在堆上分配空间
给栈初始化,初始化栈顶的位置
//创建一个空栈
stack_t *create_stack(void){
//定义一个stack_t类型的变量,在堆上分配空间
stack_t *s = (stack_t *)malloc(sizeof(stack_t));
if(s == NULL){
printf("create_stack malloc is faield\n");
return NULL;
}
//给栈初始化,初始化栈顶的位置
s->top = 0;
return s;
}
入栈
判满 top == MAX_SIZE
将数据放到top所指向的位置
top+1
//入栈
int push_stack(stack_t *s, data_t x){
//判满 top == MAX_SIZE
if(s->top == MAX_SIZE){
printf("stack is full\n");
return -1;
}
//将数据放到top所指向的位置
s->data[s->top] = x;
//top+1
s->top++;
return 0;
}
出栈
判空 top == 0
top-1
取出top所指向的位置上的数据
//出栈
int pop_stack(stack_t *s, data_t *x)
{
//判空 top == 0
if(s->top == 0){
printf("stack is empty\n");
return -1;
}
//top-1
s->top--;
//取出top所指向的位置上的数据
*x = s->data[s->top];
return 0;
}
遍历栈中所有的元素
void print_stack(stack_t *s)
{
int i;
for(i=0; i<=s->top-1; i++){
printf("%d ", s->data[i]);
}
printf("\n");
}