数据结构与算法-栈


文章目录

  • 简介
  • 一、栈
  • 二、数组实现
  • 三、链表实现
  • 总结:仰天大笑出门去,我辈岂是蓬蒿人


简介

栈(Stack)是一种线性存储结构,素遵守”先进后出”(First In Last Out)的原则,只能在栈顶进行插入和删除操作,栈是一种线性结构,可以以数组或链表作为底层数据结构;栈的相关概念:栈顶,栈底,压栈,弹栈


一、栈

栈(Stack)是一种线性存储结构,它具有如下特点:

  • 栈中的数据元素遵守”先进后出”(First In Last Out)的原则,简称FILO结构。
  • 限定只能在栈顶进行插入和删除操作。

栈的相关概念:

  • 栈顶:允许元素插入和删除的一端成为栈顶
  • 栈底:栈顶的另一端成为栈底
  • 压栈:栈的添加操作,也称为进栈,入栈
  • 弹栈:栈的删除操作,也称为出栈

栈是一种线性结构,可以以数组或链表作为底层数据结构。

二、数组实现


public class ArrayStack {
	private Object[] os;
	private int size;
	
	public ArrayStack(){
		this(10);
	}
	
	public ArrayStack(int capacity){
		os = new Object[capacity];
	}
	
	public Object pop(){
		if(size == 0){
			return null;
		}
		return os[--size];
	}
	
	public void push(Object o){
		if(size == os.length){
			os = Arrays.copyOf(os, size + size>>1 + 1);
		}
		os[size] = o;
		size ++;
	}
	
	public Object top(){
		return size == 0 ? null :os[size-1];
	}
	
	public int size(){
		return size;
	}
	
	public boolean isEmpty(){
		return size == 0;
	}
}

三、链表实现


public class ArrayStack {
	private Object[] os;
	private int size;
	
	public ArrayStack(){
		this(10);
	}
	
	public ArrayStack(int capacity){
		os = new Object[capacity];
	}
	
	public Object pop(){
		if(size == 0){
			return null;
		}
		return os[--size];
	}
	
	public void push(Object o){
		if(size == os.length){
			os = Arrays.copyOf(os, size + size>>1 + 1);
		}
		os[size] = o;
		size ++;
	}
	
	public Object top(){
		return size == 0 ? null :os[size-1];
	}
	
	public int size(){
		return size;
	}
	
	public boolean isEmpty(){
		return size == 0;
	}
}


总结:仰天大笑出门去,我辈岂是蓬蒿人

你可能感兴趣的:(java技术栈,链表,数据结构,算法)