什么是栈?
栈是数据结构的一种类型,顺序栈是一个数组,然后我们将数据存进这个数组中,再从这个数组中出数据,特点就是先入后出
其中栈主要操作是 出栈和入栈,判断栈空,和判断栈满
一、栈的创建
typedef struct sestack{
int data[N];
int top;
}Stack;
首先既然是栈,其特点是先入后出,所以我们需要有一个栈顶指针,然后栈是一片连续的空间,所以我们在定义一个数组去表示这个栈。数组的大小由我们自己来决定。
二、入栈(包含判满)
void Stack_push(Stack *p,int num){
if(p->top+1==N){
printf("Stack is full!\n");
return;
}
p->top++;
p->data[p->top] = num;
printf("push = %d \n",p->data[p->top]);
}
栈是一片有限的数组空间组成的所以当我们在进行入栈操作时,首先就需要判断栈是否为满,而判断的条件是,当top+1 == N,本身我们的top就是指向的栈顶的,top的初值我们定义的是-1,所以当top+1 == N(最大的空间) 的时候,就是栈已经满了,所以就不能再进入入栈的操作了。
当栈不为满的时候,top++,表示我们的栈顶指针要往前移动一次,这时再将top作为data数组的下标,把num的值赋给data,就完成了入栈操作
三、出栈(包含判空)
int Stack_pop(Stack *p){
if(p->top==-1){
printf("Stack is empty!\n");
return -1;
}
return p->data[p->top--];
}
出栈(pop)的操作其实就是将栈顶指针top对应data的下标的值返回的过程,但是我们也是需要先判断栈是否为空,当然条件也非常简单,因为top本身的初值是-1,所以当top==-1,就是栈已经为空,这时候也就不能继续出栈。