栈实现代码:
/**
* 自定义栈
* @author zm
* 注意体会 pop()的arr[top--] 和 push(long num)方法的arr[++top] = num;
*
*/
public class Stack {
private long[] arr;
private int top; // 栈顶元素角标位置
//0 构造函数
public Stack(){
arr = new long[10];
top = -1;
}
public Stack(int size){
arr = new long[size];
top = -1;
}
// 入栈
public void push(long num){
arr[++top] = num;
}
// 出栈
public long pop(){
return arr[top--];
}
// 查看栈顶元素
public long peek(){
return arr[top];
}
// 判定是否为空
public boolean isEmpty(){
return top == -1;
}
// 判定是否满
public boolean isFull(){
return top == arr.length -1;
}
public static void main(String[] args) {
Stack stack = new Stack(4);
stack.push(12);
stack.push(29);
stack.push(0);
stack.push(7);
System.out.println("isEmpty: " + stack.isEmpty());
System.out.println("isFull: " + stack.isFull());
System.out.println("lastElement: " + stack.peek());
while(!stack.isEmpty()) {
System.out.print(stack.pop() + " ,");
}
}
}
2 队列实现代码:
/**
* 自定义队列
* @author zm
* 注意体会 构造函数中 front = 0; end = -1的用法,
* 这里用数组arr来接收数据模拟队列,那么数组的 第一个元素(即队列的头,对应角标为0)
* 在添加方法中,继续添加,则不断向数组添加,角标不断增加--->arr[++end] = val
* 删除方法中,对应于将数组从最左侧开始一一移除,即arr[front++], 先返回arr[0],在一处
*
*
*/
public class Quene {
// 0 数据结构
public int[] arr;// 接收数据的容器
private int elements;//有效数据大小
private int front; //队头角标
private int end;//队尾角标
// 1 构造函数
public Quene(){
arr = new int[10];
elements = 0;
front = 0;
end = -1;
}
public Quene(int size){
arr = new int[size];
elements = 0;
front = 0;
end = -1;
}
// 2 常用方法
// 添加数据, 队尾添加
public void insert(int val) {
arr[++end] = val;
elements++;
}
// 删除数据 注意 这里的删除,仅仅是利用数组来模拟删除的效果,不是真正删除,如果你遍历你对象的数组,得到的结果仍旧是 插入的数据
public int remove() {
elements--;
return arr[front++];
}
// 查看数据, 从队头查看
public int peek(){
return arr[front];
}
// 判定是否为空
public boolean isEmpty(){
return elements == 0;
}
// 判定是否为满
public boolean isFull(){
return elements == arr.length;
}
/**
* @param args
*/
public static void main(String[] args) {
Quene quene = new Quene();
quene.insert(1);
quene.insert(2);
quene.insert(3);
quene.insert(4);
quene.insert(5);
System.out.println("isEmpty: " + quene.isEmpty());
System.out.println("isFull: " + quene.isFull());
System.out.println("the front element is: " + quene.peek());
while(!quene.isEmpty()){
System.out.print(quene.remove() + " ");
}
}
}
2.1 附图:
3 java实现循环队列:
/**
* 自定义循环队列
* @author zm
* 和Quene类的区别仅仅在于 insert() remove()上, 如果增加到队尾,则end指针指向-1 如果删除数据到数组尾部最后时,front指向0
* 注意体会 insert的判定条件 if(end == arr.length - 1) 和 remove方法判定条件 if(front == arr.length)
*
*
*/
public class CycleQuene {
// 0 数据结构
public int[] arr;// 接收数据的容器
private int elements;//有效数据大小
private int front; //队头角标
private int end;//队尾角标
// 1 构造函数
public CycleQuene(){
arr = new int[10];
elements = 0;
front = 0;
end = -1;
}
public CycleQuene(int size){
arr = new int[size];
elements = 0;
front = 0;
end = -1;
}
// 2 常用方法
// 添加数据, 队尾添加
public void insert(int val) {
if(end == arr.length - 1){
end = -1;
}
arr[++end] = val;
if(end != arr.length - 1){
elements++;
}
}
public int remove() {
// 先得到数值, 在判定是否是最后一个元素,如果是的话,那么处理必须要返回的这个数值外,还有将头指针指向数组角标0
int value = arr[front++];
if(front == arr.length){
front = 0;
}
elements--;
return value;
}
// 查看数据, 从队头查看
public int peek(){
return arr[front];
}
// 判定是否为空
public boolean isEmpty(){
return elements == 0;
}
// 判定是否为满
public boolean isFull(){
return elements == arr.length;
}
/**
* @param args
*/
public static void main(String[] args) {
CycleQuene quene = new CycleQuene(3);
quene.insert(1);
quene.insert(2);
quene.insert(3);
quene.insert(4);
//quene.insert(5);
System.out.println("isEmpty: " + quene.isEmpty());
System.out.println("isFull: " + quene.isFull());
System.out.println("the front element is: " + quene.peek());
while(!quene.isEmpty()){
System.out.print(quene.remove() + " ");
}
/*int[] arr = quene.arr;
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}*/
}
}
结果:
isEmpty: false
isFull: true
the front element is: 4
4 2 3