简单数组转栈和队列
数组转栈
对于数组转栈,首先要定义一个标记指针指针index指向栈的栈底,也就是数组的首部。根据栈的原理,压栈一次index+1.当压栈的数量等于数组长度,报错溢出。
代码如下:
package com.栈队组;
public class Array_To_Stack{
/*
* 数组转为栈。
* 定义一个数组,定义一个指针index。
* 建立一个方法setSize(),用来定义栈的长度,且index=0;
* 定义压栈方法push(int num),判断index的大小防止溢出,num进栈,index++
* 定义出栈方法pop(),判断index大小防止溢出,index指向的数出栈,index--;
*/
private static Integer arr [] ;
private static Integer index ;
public static void setSize(int initSize){
if(initSize<0){
throw new IllegalArgumentException("栈不能小于0!") ;
}
arr = new Integer[initSize] ;
index = 0 ;
}
public static void push(int num){
if(index==arr.length){
throw new ArrayIndexOutOfBoundsException("栈已满!") ;
}
arr[index++] = num ;
}
public static Integer pop(){
if(index<0){
throw new ArrayIndexOutOfBoundsException("栈没有数据!") ;
}
return arr[--index] ;
}
public static void main(String[] args) {
setSize(5);
push(1);
push(2);
push(3);
push(4);
push(5);
System.out.println(pop());
System.out.println(pop());
System.out.println(pop());
System.out.println(pop());
System.out.println(pop());
}
}
数组转队列
对于数组转队列不能简单的直接进队列和出队列。需要把队列的首部和尾部做好标记,当需要进(出)队列的时候可以直接操作。定义start和end指向队列的首部(数组的首部)。定义一个size,用来统计队列里元素的个数。当元素个数等于数组长度,报错溢出。
代码如下:
package com.栈队组;
public class Array_To_Queue {
private static Integer arr[] ;
private static Integer end ;
private static Integer start ;
private static Integer size ;
public static void setSize(int initSize){
if(initSize<0){
throw new IllegalArgumentException("队列的大小不能小于 0") ;
}
arr = new Integer[initSize] ;
size = 0;
start = 0 ;
end = 0;
}
public static void push(int num){
if(size == arr.length){
throw new ArrayIndexOutOfBoundsException("队列已满!") ;
}
size ++ ;
start = start == arr.length - 1 ? 0 : start +1 ;
arr[start] = num ;
}
public static Integer pop(){
if(size<0){
throw new ArrayIndexOutOfBoundsException("队列已空!");
}
size -- ;
int temp = end ;
end = end == arr.length - 1 ? 0 : end +1 ;
return arr[end] ;
}
public static void main(String[] args) {
setSize(5);
push(1);
push(2);
push(3);
push(4);
push(5);
System.out.println(pop());
System.out.println(pop());
System.out.println(pop());
System.out.println(pop());
System.out.println(pop());
}
}