zoukankan      html  css  js  c++  java
  • java实现链式队列

    java实现链式队列。。。比较简单

    package datastruct;
    
    public class QueueLink implements Queue {
    
    	// 定义一个节点内部类
    	class Node {
    		private Object data;
    		private Node next;
    
    		public Node(Object obj) {
    
    			this.data = obj;
    
    		}
    
    		public Node() {
    			
    		}
    
    	}
    
    	// 定义链式队列的一些属性
    	private Node head; // 头指针(引用)
    	private Node rear; // 尾指针(引用)
    	private int length; // 队列的长度,开始为1
    	private Node temp; // 临时指针(引用)
    
    	// 初始化队列,空头指针
    	public QueueLink() {
    		head = new Node();
    		rear = head;
    		length = 1;
    
    	}
    
    	// 初始化队列,有数据头指针
    	public QueueLink(Object obj) {
    		head = new Node(obj);
    		rear = head;
    		length = 1;
    	}
    
    	public boolean clear() {
    		// TODO Auto-generated method stub
    		if(this.length==1){
    			
    			return true;
    		}else if(length==2){
    			
    			head.next=null;
    			//没有引用的节点java会自动回收内存
    			
    		}else {
    			
    			while(head.next.next!=null){
    				head.next=head.next.next;
    				
    				
    			}
    			
    			head.next=null;
    			return true;
    			
    		}
    		return false;
    		
    		
    		
    	}
    
    	// 判空
    	public boolean isEmpty() {
    		// TODO Auto-generated method stub
    
    		if (this.length() == 1) {
    
    			return true;
    		} else {
    
    			return false;
    		}
    	}
    
    	// 获得队列的长度
    	public int length() {
    		// TODO Auto-generated method stub
    		return this.length;
    	}
    
    	// 添加一个节点
    	public void offer(Object x) {
    		this.temp = new Node(x);
    
    		// 队列使用尾插法
    		rear.next = temp;
    		rear = temp;
    		this.length++;
    
    		// TODO Auto-generated method stub
    
    	}
    
    	// 查看第一个节点
    	public Node peek() {
    		// TODO Auto-generated method stub
    		if (length == 1) {
    
    			temp=null;
    		} else {
    
    			temp= head.next;
    		}
    		return temp;
    	}
        //删除第一个节点
    	public Node poll() {
    		// TODO Auto-generated method stub
    		
    		
    		if(length==1){
    			//无法删除
    			temp=null;
    			
    		}else
    		
    		if(length==2){
    			this.temp= head.next;
    			//置空下一个节点就可以了
    			head.next=null;
    			length--;
    			
    		}else{
    			this.temp= head.next;
    			this.head.next=this.head.next.next;
    			length--;
    		}
    		
    		
    		
    		return temp;
    	}
    	//test
    	public static void main(String[] args) {
    		QueueLink linkQueue = new QueueLink();
            System.out.println("队列是否为空:"+linkQueue.isEmpty());
            System.out.println("连续入队-------------------------------");
            for(int i=0;i<5;i++){
                linkQueue.offer((char)(97+i));
            }
            System.out.println("队列长度为:"+linkQueue.length());
            System.out.println("队首元素为:"+linkQueue.peek().data);
     
            //出队
            System.out.println("连续出队-------------------------------");
            for(int i=0;i<4;i++){
                Object data=linkQueue.poll();
            }
            System.out.println("队列长度为:"+linkQueue.length());
    
    
    		
    		
    		
    	}
    
    }
    

      结果为:

    队列是否为空:true
    连续入队-------------------------------
    队列长度为:6
    队首元素为:a
    连续出队-------------------------------
    队列长度为:2
    

      

  • 相关阅读:
    nuxt项目打包上线,以及nuxt项目基础代码分享
    SVG学习之stroke-dasharray 和 stroke-dashoffset 详解
    从零开始使用mocha测试
    小程序开发,视频播放和下载
    小程序开发中遇到的坑
    记录一次面试中的HTTP请求相关问题
    css3 min-content,max-content,fit-content, fill属性
    GC的 算法和种类
    JVM 的运行机制
    各种同步控制工具的使用
  • 原文地址:https://www.cnblogs.com/zhongyimeng/p/9950689.html
Copyright © 2011-2022 走看看