堆栈 - 顺序数组实现

堆栈本质上是特殊的线性表,只是对于元素的存取做出了一定的规定

起床时最先穿的内裤,睡觉时确实最后一层才能脱

可见生活中也有很多堆栈性质的例子

定义

1
2
3
4
5
6
struct _node {
int *data;
int top;
int maxSize;
} Node;
typedef struct _node *Stack;

初始化

top = -1 时栈空

top = maxSize - 1 时栈满

1
2
3
4
5
6
7
8
Stack createStack(int maxSize) {
Stack s = (Stack) malloc(sizeof(Node));
s->data = (int *) malloc(maxSize * sizeof(int));
s->top = -1;
s->maxSize = maxSize;
return s;

}

栈满判断

1
2
3
bool isFull(Stack s) {
return (s->top == s->maxSize - 1);
}

入栈

1
2
3
4
5
6
7
8
9
10
11
bool push(Stack s, int value) {
if (isFull(s)) {
printf("栈满");
return false;
}
else {
s->top++;
s->data[s->top] = value;
return true;
}
}

栈空

1
2
3
4
bool isEmpty(Stack s) {
return (s->top == -1);

}

出栈

1
2
3
4
5
6
7
8
9
int pop(Stack s) {
if (isEmpty(s)) {
printf("栈空");
return ERROR;
}
else {
return (s->data[s->top--]);
}
}

注意事项

取首元素与出栈:一定是先出后取

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2023 Jack Kong
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信