美文网首页程序员
数据结构之堆栈(stack)

数据结构之堆栈(stack)

作者: 腊月的梅花 | 来源:发表于2019-03-17 21:29 被阅读12次

栈简介

  • 栈(Stack)是一种插入删除操作都只能在一个位置上进行,这个位- 置位于表的末端,叫做栈顶(Top);
  • 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于插入和删除操作;
  • 栈结构又叫做LIFO(后进先出)表.归根结底是一个表结构,因此任何能够实现表结构的方法都能实现栈;
  • 在java语言中,ArrayList和LinkedList都支持栈操作,栈操作都是常数时间的操作,栈的实现方式一般有两种,一种是使用顺序存储的方式,即使用数组来实现,用ArrayList可以轻易实现栈结构,也可以自己使用数组来实现,一会下面我就用数组来实现栈,第二种是使用链式存储实现,即可以使用LinkedList来实现.
    基于数组实现的栈
/*
 * 后进先出(LIFO)或先进后出
 * 方法:
 * 1.进栈 push()
 * 2.出栈 pop()
 * 3. 获取栈顶元素 peek()
 * 4. 栈的大小 size
 * 5. 扩容 
 * 使用泛型,以便栈中能够存储我们想要的数据
 * 基于数组的栈实现
 */
public class MyStack<E> {
    private Object[] stack;
   /*栈中元素的个数,这里没有对size1进行初始化,
    是因为size是类成员变量,程序在实例化类的时
    候会把size初始化为默认值0
    */
    private int size;         
    public MyStack() {
        stack=new Object[10];     //初始长度为10
    }
//  判断栈是都为空
    public boolean isEmpty() {
        return size==0;
    }
//  返回栈顶元素
    public E peek() {
        if(isEmpty()) {
            return null;
        }
        return (E) stack[size-1];
    }
    public E pop() {
        E e = peek();   //获取栈顶元素
        if(size>0) {
            stack[size-1]=null;   //将出栈后的位置置为空
            size--;   //将栈中元素减一
        }
        return e;  //返回栈顶元素
    }
//   检测栈是否满,满的话需要扩容
    private void ensureCapacity(int size) {
        int len = stack.length;
        if(size>len) {
            int newLen= len+10;       //每次扩容增10
            stack = Arrays.copyOf(stack, newLen);
        }
    }
    
    public E push(E e) {
        ensureCapacity(size+1);    //先进行扩容检测
        stack[size++]=e;         //把元素加进数组最后末尾,并将元素个数size加1
        return e;         //返回该元素
    }
    
    public void printStack() {
        System.out.println("start print stack....");
        for(int index=0;index<size;index++) {
            System.out.println(stack[index]);
        }
        System.out.println("finish!");
    }
    
//  测试
    public static void main(String[] args) {
        MyStack<String> myStack = new MyStack<String>();
        
        myStack.push("as");
        myStack.push("c");
        myStack.push("d");
        
        System.out.println(myStack.pop());
        myStack.printStack();
    }
}

相关文章

  • 数据结构之堆栈(stack)

    栈简介 栈(Stack)是一种插入删除操作都只能在一个位置上进行,这个位- 置位于表的末端,叫做栈顶(Top); ...

  • Java中的Stack

    Stack Stack是一种先进后出的数据结构:只能往堆栈(Stack)最后压入(push)元素,最后进去的必须最...

  • 数据结构与算法复习(一)

    1. 数据结构 1.1 堆栈(Stack) 后进先出(LIFO, Last In First Out) 1.2 队...

  • Cousera 公开课Princeton Algorithms

    1.Stack 这节课主要介绍了stack(堆栈)这一数据结构 这一结构的主要方法 上图的左边就是stack的可...

  • 数据结构——Golang实现堆栈

    转载请注明出处数据结构——Golang实现堆栈 1. 栈(stack) 栈(stack)在计算机科学中是限定仅在表...

  • 四、栈与队列(Stack and Queue)

    一、栈(Stack) 栈(stack),也可以叫做堆栈,是一种容器类型的数据结构,可以存入数据元素、访问元素以及删...

  • 1. 数据结构与算法:堆栈

    堆栈(Stack)是一种后进先出(LIFO)的线性数据结构,对堆栈的插入和删除操作都只能在栈顶(top)进行。 S...

  • 2018-12-28

    基于常见数据结构整理 数据结构 数据存储的常用结构有:栈、队列、数组、链表和红黑树 栈 1.stack,又称堆栈,...

  • Swift数据结构:堆栈(stack)

    堆栈就像一个功能有限的数组,你只能将新元素添加(push)到堆栈顶部,从堆栈顶部删除(pop)元素,也可以只查看而...

  • Swift数据结构-堆栈Stack

    声明:算法和数据结构的文章均是作者从github上翻译过来,为方便大家阅读。如果英语阅读能力强的朋友,可以直接到s...

网友评论

    本文标题:数据结构之堆栈(stack)

    本文链接:https://www.haomeiwen.com/subject/daoumqtx.html