栈和队列2

以上次队列为例

泛型:

泛指一切数据类型

需要float,就创建一个float类型的数组,

需要char就创建char类型数组。

如果我们只定义了int类型的数据,所能存储下来的数据类型有限。

所以想到了泛型。

在类后面打上"<>",里面可以写任意东西。

比如类型都为王

public class Queue<王> {
    private 王[] arr;
    private int f =0; //放入
    private int r =0; //放出

    public Queue(int Size){
        arr = (王[]) new Object[Size];
    }

    //添加数据
    public void add(王 value){
        if(f - r == arr.length){
                     王[] brr = (王[]) new Object[arr.length *2];
            for (int i = r;i<f;i++){
                brr[i] = (王) arr[i % arr.length];
            }
            arr = brr;
        }
        arr[f % arr.length] = value;
        f++;
    }

    //取出数据
    public void get(){
        if (r == f){
            System.out.println("已经没有数据了");
            return;
        }
        System.out.println(arr[r % arr.length]);
        r++;
    }
	
}

所以王 就是当前的泛型。

public static void main(String[] args){
    Queue queue = new  Queue(Suze: 8);
    queue.add("123");
    queue.get();
    
    Queue queue1 = new  Queue(Suze: 8);
    queue1.add(1);
    queue1.get();
}

存储String类型的数据可以。

做个基本的对比:

package zhan;

public class QueueInteger {
	 private Integer[] arr;//定义Integer的数据
	    private int f = 0;
	    private int r =0; //放出
	    
	    public QueueInteger(int Size){
	        arr = new Integer[Size];
	    }

	    //添加数据
	    public void add(int value){
	        if(f - r == arr.length){
	            Integer[] brr = new Integer[arr.length *2] ;
	            for (int i = r;i<f;i++){
	                brr[i] = arr[i % arr.length];
	            }
	            arr = brr;
	        }
	        arr[f % arr.length] = value;
	        f++;
	    }

	    //取出数据
	    public void get(){
	        if (r == f){
	            System.out.println("已经没有数据了");
	            return;
	        }
	        System.out.println(arr[r % arr.length]);
	        r++;
	    }
}
package zhan;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Queue1 queue1 = new Queue1(8);
		queue1.add("123");
		queue1.add(1);
		queue1.add(1.8);
		queue1.get();
		queue1.get();
		queue1.get();
	}

}

java当中定义好的栈和队列。

package duilie;

import java.util.Stack;

public class StackTest {
	public static void main(String[] args) {
		//java开发人员给我们提供了栈
		//
		//1.empty() 检测栈是否为空
		//2.peek() 查看栈顶对象,但是不从栈内移除
		//3.pop() 查看栈顶对象,并从栈顶移除
		//4.push() 数据压栈
		//5.search() 返回对象在栈中的位置
		Stack<Integer> stack = new Stack();
		System.out.println("检测栈是否为空 = " + stack.empty());
		stack.push(1);
		stack.push(2);
		stack.push(3);
		stack.push(4);
		stack.push(5);
		System.out.println("检测栈是否为空 = " + stack.empty());
		System.out.println(stack.peek());
		System.out.println(stack.peek());
		System.out.println(stack.pop());
		System.out.println(stack.pop());
		System.out.println(stack.search(1));
		System.out.println(stack.search(4));
	}
}

 

 java提供好的队列。


import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class StackTest {
	public static void main(String[] args) {
		//java开发人员给我们提供了队列
		//LinkedList ----- 链表  -----实现了队列的接口  ---》 接口当中有的是方法的定义  ----》实现接口就实现了接口当中的所有方法
		Queue<String> queue = new LinkedList<>();
		//offer 、 add()   ---->  相对列当中添加数据;add() 在方法存储失败的时候直接抛出异常,offer()在存储失败的时候直接返回false;
		//poll、remove ----》数据的删除,remove()在删除失败的时候会抛出异常,poll()在删除失败的时候返回null
		//peek()、element() ----> 查看队列的头部元素;element()在查找失败的时候会抛出异常,peek()在查找失败的时候会返回null
		
		queue.offer("a");
		queue.offer("b");
		queue.offer("c");
		queue.offer("d");
		queue.offer("e");
		queue.offer("f");
		
		for(String q: queue) {
			System.out.println(q);
		}
		
		System.out.println("-------------");
		queue.poll();//删除一个元素
		for(String q: queue) {
			System.out.println(q);
		}
		
		System.out.println("-------------");
		
		//System.out.println(queue.peek());
		queue.peek();
		for(String q: queue) {
			System.out.println(q);
		}
		

	}
}

调用poll 先进先出,移除a

 调用peek。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值