zoukankan      html  css  js  c++  java
  • 下压(LIFO)栈基础

    两种栈的实现方式,一种是基于动态可调整数组大小的栈,一种是基于链表。用数组栈比较快速节约空间,用链栈插入删除比较高效(比动态数组占用空间多一些)

     1 import java.util.Iterator;
     2 
     3 public class ResizingArrayStack<Item> implements Iterable<Item> {
     4     
     5     private Item[] a = (Item[])new Object[1];  //栈元素
     6     private int N = 0;                         //元素数量
     7     
     8     
     9     public int size() {
    10         return N;
    11     }
    12     
    13     public boolean isEmpty() {
    14         return N == 0;
    15     }
    16     
    17     public void resize(int max) {
    18 //将栈移动到一个大小为max的新数组
    18 Item[] temp = (Item[])new Object[max]; 19 for(int i=0; i<N; i++) { 20 temp[i] = a[i]; 21 } 22 a = temp; 23 } 24 25 public void push(Item item) {
    26 //将元素添加到栈顶
    26 if(N == a.length) {//增倍条件--已满 27 resize(2*a.length);//增大数组空间(增加一倍) 28 } 29 a[N++] = item; 30 } 31 32 public Item pop() {
    //从栈顶删除元素
    33 Item item = a[--N]; 34 a[N] = null;//避免对象游离(保存一个不需要的对象的引用称为对象游离) 35 if(N>0 && N==a.length/4) {//缩小条件--空间为当前空间的1/4 36 resize(a.length/2);//缩小数组空间(缩小一半) 37 } 38 return item; 39 } 40 41 @Override 42 public Iterator<Item> iterator() { 43 return new ReverseArrayIterator(); 44 } 45 private class ReverseArrayIterator implements Iterator<Item>{ 46 private int i = N; 47 48 @Override 49 public boolean hasNext() { 50 return i > 0; 51 } 52 53 @Override 54 public Item next() { 55 return a[--i]; 56 } 57 } 58 59 }
     1 import java.util.Iterator;
     2 
     3 public class Stack<Item> implements Iterable<Item> {
     4     
     5     private Node first;  //栈顶(最近添加的元素)
     6     private int N;       //元素数量
     7     
     8     private class Node{
    //定义结点的嵌套类
    9 Item item; 10 Node next; 11 } 12 13 public boolean isEmpty() { 14 return N == 0;//或者 first == null; 15 } 16 17 public int size() { 18 return N; 19 } 20 21 public void push(Item item) { 22 //从栈顶添加元素 23 Node oldFirst = first; 24 first = new Node(); 25 first.item = item; 26 first.next = oldFirst; 27 N++; 28 } 29 30 public Item pop() { 31 //从栈顶删除元素 32 Item item = first.item; 33 first = first.next; 34 N--; 35 return item; 36 } 37 38 @Override 39 public Iterator<Item> iterator() { 40 return new ListIterator(); 41 } 42 43 private class ListIterator implements Iterator<Item>{ 44 45 private Node current = first; 46 47 @Override 48 public boolean hasNext() { 49 return current != null; 50 } 51 52 @Override 53 public Item next() { 54 Item item = current.item; 55 current = current.next; 56 return item; 57 } 58 59 } 60 61 }
  • 相关阅读:
    O-C相关-06:对象与对象的关系
    O-C相关05:方法的封装.
    O-C相关04:类方法的概述与定义和调用
    Objective-C发展历史
    O-C相关-03:面向对象概念的具体介绍
    OC相关-02:oc和c的基本差异
    0-C相关01:NSlog函数介绍。
    鞭辟入里
    objective-c中字符串长度计算
    OC多文件开发介绍
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/8376801.html
Copyright © 2011-2022 走看看