数据结构(三):栈

一、概述

  • 栈(Stack),也叫堆栈。但是不能称为堆,堆是另外一种数据结构

  • FILO栈遵循先进后出的原则(First In Last Out)

  • 基本操作有:入栈(压栈)、出栈(退栈)

  • 入栈和出栈都是针对栈顶的操作

二、结构示意图

  • 依次将a、b、c元素压进一个空栈中:

     

     

  • 将上述栈中的元素一个一个出栈

     

     

     

  • 由以上两图我们可以看出来,栈是遵循FILO(先进后出)的原则:a元素是最先进栈的而是最后出栈的,c元素是最后进栈的而是最先出栈的。

三、代码示例

  • 我们这里以java代码为例,使用java官方提供的函数库里面的栈实现

  @Test
    public void test3(){
        Stack<Integer> stack = new Stack<Integer>();
        stack.push(1);//往栈中添加一个元素
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        System.out.println(stack.peek());
        stack.pop();//移除栈中的一个元素
        System.out.println(stack.peek());
        stack.pop();
        System.out.println(stack.peek());
        stack.pop();
        System.out.println(stack.peek());
        stack.pop();
        System.out.println(stack.peek());
        stack.pop();
    }
  • 其中peek()方法是获取栈的末尾元素,也就是栈顶的那个元素

  • 代码运行效果如下图:

 

 

四、自己用代码实现一个简单的栈

  • 接下来我们使用数组来简单的实现一下栈结构

package com.zhurouwangzi.entity;
​
public class MyStack {
    public MyStack(){
        element = new int[20];
        size = 0;
    }
    private int[] element;
    private int size;
​
    public int push(int item){
        element[size] = item;
        size++;
        return item;
    }
​
    public int pop(){
        int popData = element[size-1];
        int[] newEle = new int[size-1];
        System.arraycopy(element, 0, newEle, 0, size-1);
        element = newEle;
        size--;
        return popData;
    }
​
    public int peek(){
        return element[size-1];
    }
​
    public int getSize(){
        return size;
    }
}
  • 测试自定义的栈

@Test
    public void test3(){
        MyStack myStack = new MyStack();
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(4);
        myStack.push(5);
        System.out.println(myStack.peek());
        myStack.pop();//移除栈中的一个元素
        System.out.println(myStack.peek());
        myStack.pop();
        System.out.println(myStack.peek());
        myStack.pop();
        System.out.println(myStack.peek());
        myStack.pop();
        System.out.println(myStack.peek());
        myStack.pop();
    }
  • 运行结果和java官方封装的栈函数是一样的:

 

 

转载请注明出处:https://www.cnblogs.com/Infancy/p/12598803.htmlfalse

posted on 2020-03-30 15:19  猪肉王子-17  阅读(376)  评论(0编辑  收藏  举报

导航