【数据结构】栈(一)

栈   ——基础入门

 

目录

## 概念简述

## 特点

## 应用

## 原理实现

## 时间复杂度分析


## 概念简述:

       一种只能从一端添加/取出元素线性结构,相比于数组操作较少,对应的操作是数组的子集,可以简单理解   
       为就是一个操作受限并元素排列存放的数组

 

## 特点:

       1. 只能从一端进行操作(栈顶),即只能从一端添加元素(入栈)或取出元素(出栈)
       2. 对于用户而言,栈内元素不可见更不允许操作,只能够看到/操作栈顶元素
       3. 存储元素后进先出LIFOlast in first out

 

## 应用举例:

       1.撤销/回退操作
       2.系统栈

## 原理实现:(java

      1. 准备接口

  // 准备接口
  public interface Stack<E>{
    int getSize();
    boolean isEmpty();
    void push(E e);
    E pop();
    E peek();
  }

      2. 准备实现类


  // 准备实现类
  public class ArrayStack<E> implements Stack<E>{
      Array<E> array;         // 自定义动态数组
      // 构造方法
      public ArrayStack(){
          array = new Array<>()
      }
      public ArrayStack(int capacity){        // 容积
          array = new Array<>(capacity);
      }

      @Override
      public int getSize(){
          return array.getSize();
      }
      @Override
      public boolean isEmpty(){
          return array.isEmpty();
      }
      @Override
      public void push(E e){
          array.addLast(e);
      }
      @Override
      public E pop(){
          return array.removeLast();
      }
      @Override
      public E peek(){
          return array.getLast();
      }

      @Override
      public String toString(){
          StringBuilder res = new StringBuilder();
          res.append("Stack:");
          res.append("[");
          for(int i = 0, i < array.getSize(); i++){
              res.append(array.get(i));
              if (i != array.getSize() -1) {
                  res.append(", ");
              }              
          }
          res.append("] top");
          return res.toString();
      }

      public int getCapacity(){
          return array,getCapacity();
      }
  }

      3. 准备测试类

  // 准备测试类
  public static void main(String args[]){
      ArrayStack<Integer> stack = new ArrayStack<>();
      for (int i = 0; i < 5; i++) {
          stack.push(i);
          System.out.println(stack);
      }
      stack.pop();
      System.out.println(stack);
  }

## 时间复杂度分析:(针对于上方自定义栈

      void push(E)             O(1)      //均摊
      E pop()                     O(1)      //均摊
      E peek()                   O(1)    
      int getSize()              O(1)    
      boolean isEmpty      O(1)
      [注意]:
          由于对于栈的基础入栈出栈操作时间复杂度为O(1),当涉及到resize方法即发生扩容时,经过均摊复杂度   
          分析依然为O(1)

资料来源:慕课网《玩转数据结构》

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值