java-栈-队列

 

 

栈实现代码:

 

/**
 * 自定义栈
 * @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 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值