栈
可以把栈想像成一个桶
进栈:就是把和桶口一样大的烧饼往桶里面扔
出栈:就是把烧饼拿出来
特点:先进后出。先扔进去的烧饼最后才能拿出来,最后扔进去的烧饼,第一个拿出来
栈的组成
typedef struct {
int data[MaxSize];//数据区
int top;//指向栈顶的指针
}Stack;
进栈
- 刚开始top = -1
- top+1
- 然后把进栈的元素赋值给data[top]
/**
* 入栈操作
*/
void push(Stack *s, int x) {
if(s->top == MaxSize - 1) {
printf("栈已经满了!");
} else {
s->top ++;
s->data[s->top] = x;
}
}
出栈
- 将出栈的元素赋值给变量x
- 将top-1
/**
* 出战操作
*/
int pop(Stack *s) {
int x;
if(s->top == -1) {
printf("栈已经空了");
} else {
x = s->data[s->top];
s->top--;
}
return x;
}
使用C语言实现栈
#include <stdio.h>
#define MaxSize 10
typedef struct {
int data[MaxSize];
int top;
}Stack;
/**
* 入栈操作
*/
void push(Stack *s, int x) {
if(s->top == MaxSize - 1) {
printf("栈已经满了!");
} else {
s->top ++;
s->data[s->top] = x;
}
}
/**
* 出战操作
*/
int pop(Stack *s) {
int x;
if(s->top == -1) {
printf("栈已经空了");
} else {
x = s->data[s->top];
s->top--;
}
return x;
}
void display(Stack *s) {
for(int i = s->top; i >= 0; i--) {
printf("%d", s->data[i]);
}
}
int main() {
Stack s;
s.top = -1;
push(&s, 1);
push(&s, 2);
push(&s, 3);
push(&s, 4);
push(&s, 5);
display(&s);
printf("\n");
pop(&s);
printf("出栈后\n");
display(&s);
return 0;
}