一、栈
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。(先进后出)
访问权限:栈限制了访问权限,只可以访问尾节点,也就是最后添加的元素 即栈顶的元素
1 /** 2 * 栈 先进后出 3 * @author Administrator 4 * 5 */ 6 public class MyStack { 7 private long [] arr; 8 private int top; 9 public MyStack(){ 10 arr=new long[10]; 11 top=-1;//初始化的时候栈为空 12 } 13 public MyStack(int maxSize){ 14 arr=new long [maxSize]; 15 top=-1; 16 } 17 /** 18 * 入栈 19 */ 20 public void push(long value){ 21 arr[++top]=value; 22 } 23 /** 24 * 移出栈 25 */ 26 public long pop(){ 27 return arr[top--]; 28 } 29 /** 30 * 查看 栈顶的数据 31 */ 32 public long peek(){ 33 return arr[top]; 34 } 35 /** 36 * 查看是否为空 37 */ 38 public boolean isEmpty(){ 39 return top==-1; 40 } 41 /** 42 * 查看是否满了 43 */ 44 public boolean isFull(){ 45 return top==arr.length-1; 46 } 47 //测试 48 public static void main(String[] args) { 49 MyStack myStack=new MyStack(); 50 myStack.push(12); 51 myStack.push(10); 52 myStack.push(34); 53 myStack.push(40); 54 System.out.println(myStack.peek()); 55 while(!myStack.isEmpty()){ 56 System.out.print(myStack.pop() +", "); 57 } 58 System.out.println(myStack.isEmpty()); 59 System.out.println(myStack.isFull()); 60 } 61 }
二、队列
队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),
而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front);
访问权限:队列限制了访问权限,只可以访问队头的数据,也就是最先添加的元素。
/** * 队列 先进 先出 * @author Administrator * */ public class MyQueue { private long [] arr; private int elements;//元素个数 private int front;//队列 头 private int end;//队列尾部 public MyQueue(){ arr=new long[10]; elements=0; front=0; end=-1; } public MyQueue(int size){ arr=new long[size]; elements=0; front=0; end=-1; } /** * 添加数据 队列 从尾部添加 */ public void insert(long value){ if(end==arr.length-1){ end=-1; } arr[++end]=value; elements++; } /** * 移除数据 队列从头部移出 */ public long remove(){ long value=arr[front++]; if(front==arr.length){ front=0; } elements--; return value; } /** * 查看 队列头部的数据 */ public long peek(){ return arr[front]; } /** * 查看 队列是否为空 * @return */ public boolean isEmpty(){ return elements==0; } /** * 判断队列 是否满了 */ public boolean isFull(){ return elements==arr.length; } public static void main(String[] args) { MyQueue myQueue=new MyQueue(); myQueue.insert(1001); myQueue.insert(1000); myQueue.insert(1003); myQueue.insert(1005); System.out.println(myQueue.peek()); while(!myQueue.isEmpty()){ System.out.print(myQueue.remove()+", "); } System.out.println(); System.out.println(myQueue.isEmpty()); System.out.println(myQueue.isFull()); myQueue.insert(1007); myQueue.insert(1002); myQueue.insert(1008); myQueue.insert(1009); while(!myQueue.isEmpty()){ System.out.print(myQueue.remove()+", "); } System.out.println(); System.out.println(myQueue.isEmpty()); System.out.println(myQueue.isFull()); myQueue.insert(1010); myQueue.insert(1012); myQueue.insert(1018); myQueue.insert(1019); while(!myQueue.isEmpty()){ System.out.print(myQueue.remove()+", "); } System.out.println(); System.out.println(myQueue.isEmpty()); System.out.println(myQueue.isFull()); myQueue.insert(1021); myQueue.insert(1022); myQueue.insert(1023); myQueue.insert(1024); while(!myQueue.isEmpty()){ System.out.print(myQueue.remove()+", "); } System.out.println(); System.out.println(myQueue.isEmpty()); System.out.println(myQueue.isFull()); } }