我的算法日志:数据结构之栈
- 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶(top),相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈(push),它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈(push),它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
java代码实现:
1 package com.guohao.arithmetics; 2 3 import java.lang.reflect.Array; 4 5 /** 6 * 栈 7 */ 8 public class Stack<T> { 9 private T[] data; //储存栈内元素的数组 10 private int capacity; //栈的容量(栈内元素数量的最大值) 11 private int size; //栈的大小(栈内现有元素的数量) 12 private int top; //栈顶标志器 13 14 public Stack(Class<T> type, int capacity){ 15 //为了保证类型安全,Java中不允许直接用泛型声明数组,如:"dataArray = new T[capacity]"是错误的! 16 data = (T[])Array.newInstance(type, capacity); 17 this.capacity = capacity; 18 size = 0; 19 top = -1; 20 } 21 22 /** 23 * 入栈 24 * @param element 25 * @return 26 */ 27 public boolean push(T element){ 28 if(isFull()){ 29 return false; 30 } 31 32 data[++top] = element; 33 size++; 34 return true; 35 } 36 37 /** 38 * 出栈 39 * @return 40 */ 41 public T pop(){ 42 if(isEmpty()){ 43 return null; 44 } 45 46 size--; 47 return data[top--]; 48 } 49 50 /** 51 * 判断是否栈满 52 * @return 53 */ 54 public boolean isFull(){ 55 return capacity==size; 56 } 57 58 /** 59 * 判断是否栈空 60 * @return 61 */ 62 public boolean isEmpty(){ 63 return size==0; 64 } 65 66 //getter & setter 67 public T[] getData() { 68 return data; 69 } 70 71 public void setData(T[] data) { 72 this.data = data; 73 } 74 75 public int getCapacity() { 76 return capacity; 77 } 78 79 public void setCapacity(int capacity) { 80 this.capacity = capacity; 81 } 82 83 public int getSize() { 84 return size; 85 } 86 87 public void setSize(int size) { 88 this.size = size; 89 } 90 91 public int getTop() { 92 return top; 93 } 94 95 public void setTop(int top) { 96 this.top = top; 97 } 98 }