ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

双端队列

2021-07-10 21:00:08  阅读:254  来源: 互联网

标签:Node firsts 队列 双端 next element null 节点


目录

一、双端队列的定义

二、双端队列代码实现 

1、定义节点

2、队首入队

3、队尾入队

4、队首出队

5、队尾出队

6、输出队列

7、主函数

8、最终效果展示


一、双端队列的定义

双端队列(deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。双端队列的队首和队尾都满足栈先进后出的原则。它队首和队尾都支持入队和出队的操作。

双端队列图:

 

 


二、双端队列代码实现 

注意:从双端队列图可以看出不管是队头还是队尾都符合栈先进后出的原则。

1、定义节点

public  class Node{
		private String element;
		private Node prev;
		private Node next;
		 Node(Node prev,String element,Node next) {
			this.prev =prev;
			this.element=element;
			this.next=next;
		}
	}
	private Node first;//第一个节点
	private Node last;//最后一个节点

2、队首入队

public void First_Push(String elem) {
		Node firsts=first;//将首节点赋值给firsts
		Node node=new Node(null,elem,firsts);//调用node创建新节点
		first=node;//新节点赋值给第一个节点
		if(firsts == null) {//判断首节点是否是null如果是就把新节点赋值给尾节点
			last=node;
		}else {//首节点非空则把首节点的前指针指向新创建的节点实现队首插入的效果
			firsts.prev=node;
		}
	}

3、队尾入队

	public void Last_Push(String elem) {
		Node lasts=last;//将尾节点赋值给lasts
		Node node = new Node(lasts,elem,null);//调用node创建新节点
		last =node;//新节点赋值给最后一个节点
		if(lasts == null) {//判断尾节点是否是null如果是就把新节点赋值给首节点
			first=node;
		}else {//尾节点非空则把尾节点的后指针指向新创建的节点实现队尾插入的效果
			lasts.next = node;
		}
	}

4、队首出队

	public String First_Pop() {
		if(first == null)return null;//如果队首是空则表示该队列没有任何数据返回null
		Node firsts =first;//将第一个节点赋值给firsts
		String element =firsts.element;//将第一个节点的数据赋值给element
		Node next = firsts.next;//将第一个节点的下一位赋值给next节点
		firsts.element = null;
        firsts.next = null;
        first=next;//将下一个节点赋值给第一个节点实现出队的效果
        if (next == null)//如果下一个节点是空则直接将最后一个节点赋值为null
            last = null;
        else
            next.prev = null;//如果下一个节点非空,则把该节点前指针指向null
        return element;
	}

5、队尾出队

public String Lats_Pop() {
        if (last == null) return null;//如果队尾是空则表示该队列没有任何数据返回null
        Node lasts = last;//将最后一个节点赋值给lasts
        String element = lasts.element;//将最后一个节点的数据赋值给element
        Node prev = lasts.prev;
        lasts.element = null;
        lasts.prev = null;
        last = prev;//将前一个节点赋值给最后一个节点实现出队的效果
        if (prev == null)//如果前一个节点是空则直接将第一个节点赋值为null
            first = null;
        else
            prev.next = null;//如果前一个节点非空,则把该节点后指针指向null
        return element;
    }

6、输出队列

 public void print() {
		 Node firsts =first;
	        while (firsts !=null){
	            System.out.print(firsts.element);
	            if(firsts.next!=null)System.out.print("->");
	            firsts = firsts.next;
	        }
	    }

7、主函数

public static void main(String[] args) {
		DoubleEndsQueue deq = new DoubleEndsQueue();
		deq.First_Push("1");
		deq.Last_Push("3");
		deq.First_Push("2");
		deq.First_Push("5");
		System.out.print("入队之后的队列:");
		deq.print();
		System.out.println();
		String pop=deq.First_Pop();
		System.out.println("弹出"+pop);
		deq.print();
		
	}

8、最终效果展示

 

 

标签:Node,firsts,队列,双端,next,element,null,节点
来源: https://blog.csdn.net/qq_48241564/article/details/118639342

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有