栈是一种先进后出(FILO,First-In-Last-Out)的线性表,栈和队列非常相像,但是栈只能在栈顶插入和删除元素。栈为空时不可以出栈。

 

在维护栈的时候,使用一个变量top_index来标记栈顶元素。在构造函数中把它初始化为-1。

当要向栈中插入元素时,只需要让栈顶标记后移一位,把新元素插入到相应的位置。

出栈时,先判断栈是否为空,如果不为空则使栈顶标记减一就可实现栈顶元素的出栈。

 

额外内容补充:

单调栈:

  • 栈内元素从栈顶到栈底单调递增/递减;
  • 单调栈的维护是O(n)级时间复杂度,因为每个元素只会进出栈各一次;
  • 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除;
  • 使用从栈顶到栈底单调递减的元素可以找到元素向左遍历的第一个比它小的元素(即离元素最近)。

 

实现栈的构造函数和析构函数:

 1 template<typename Type> class Stack {
 2 private:
 3     Type * elements;
 4     int max_size, top_index;
 5 public:
 6     explicit Stack(int input_size) {
 7         max_size = input_size;
 8         elements = new Type[max_size];
 9         top_index = -1;
10     }
11     ~Stack() {
12         delete[] elements;
13     }

实现栈的插入函数:

1 bool push(const Type &elem) {
2         if (top_index >= max_size - 1) {
3             return false;
4         }
5         top_index ++;
6         elements[top_index] = elem;
7         return true;
8     }

实现栈的删除栈顶元素操作:

1 bool pop() {
2         if (top_index < 0) {
3             return false;
4         }
5         top_index --;
6         return true;
7 }

实现栈的返回栈顶元素操作:

1 Type top() {
2         assert(top_index >= 0);
3         return elements[top_index];
4 }

实现判断栈是否为空的函数:

1 bool empty() {
2         return top_index < 0;
3 }
4  

 

转载于:https://www.cnblogs.com/xudongwei/p/7515068.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值