`
茖-荌
  • 浏览: 31511 次
社区版块
存档分类
最新评论

优先队列2

阅读更多

数组形式的优先队列和链表形式的优先队列                 

    优先队列具有排序的功能,而且可以指定它的排序方法,现在暂时先不讨论按指定的排序方式,我们就先讨论一下简单的按照值的大小来排序的情况吧。

现在我们要把100个整数放进优先队列,下面我们对比一下这两种队列的效率。

数组的比较代码:

public void add(int i){
    	int[] arr=new int[array.length+1];//每加入一个元素就要创建一个比原来数组大1长度的数组
    	int index=getIndex(0,array.length,i);
    	for(int t=0;t<index;t++){//给新数组拷贝前半部分的元素
    		arr[t]=array[t];
    	}
    	for(int s=index;s<array.length;s++){//拷贝后半部分的元素
    		arr[s+1]=array[s];
    	}
    	arr[index]=i;//在对应的位置插入元素
    	array=arr;//让原来的数组重新指向新的数组
  }
/**
     * 通过二分法找出需要插入的元素的下标
     * @param first 数组的起始下标
     * @param end 数组的终止下标
     * @param i 要插入的元素
     * @return
     */
     private int getIndex(int first,int end,int i){
    	 int index = 0;
    	 if(first==end){//如果区间已经固定在一个下标,这就是要插入的下标
    		index=first;
    	 }else if((end-first)==1){//如果这个区间只有两个数
    		 if(i>array[first]){
    			 index=first;
    		 }else{
    			 index=end;
    		 }
    	 }else{//否则进行折半
    		 int temp=(first+end)/2;
    		if(i>array[temp]){//如果大于这个数,就在后半区间查找
    			 index=getIndex(first,temp,i);
    		}else{//否则在前半区间查找
    			 index=getIndex(temp,end,i);
    		}
    	 }
    	 return index;    	 
     }
}

 

   链表形式的代码,这要是添加元素的部分,具体的代码前面有

 

//往队列里面添加元素的方法
	public void add(int i){
		LinkNode link=root;//一个中间变量
		for(int k=0;k<size+1;k++){
			link=link.getNext();//获得下一个节点
			if(i>link.getObj()||link.getNext()==null){//如果要插入的元素大于这个节点里的元素,就插入
				LinkNode temp=new LinkNode(i);//创建一个新节点
				LinkNode back=link.getBack();//获得上一个节点
				back.setNext(temp);//上一个节点指向新节点
				temp.setBack(back);//新节点指向上一个节点
				temp.setNext(link);//新节点指向下一个节点
				link.setBack(temp);//上一个节点指向新节点
				break;//跳出循环
			}
		  }
		
		size++;
	}

 

显然用数组的形式找出要插入的位置比链表快一些,但是插入的时候数组要比链表更加麻烦,因为它要创建一个比原来长一个单位的数组,然后又得重新拷贝原来的数据。同样删除数据的时候,也需要频繁拷贝原来数组的数据。所以没有什么是绝对好的,而要看在什么情况下,有就是再有一个参照的标准下,我们才能比较出聊个东西的好和坏。

 

<!--EndFragment-->

分享到:
评论

相关推荐

    priority_queue_1.0_excitingfbh_matlab优先队列_matlab优先队列_优先队列_

    "priority_queue_1.0_excitingfbh_matlab优先队列_matlab优先队列_优先队列_"这个标题表明这是一个MATLAB环境下的优先队列实现,可能由excitingfbh开发者创建,版本为1.0。 描述中提到的"pq_create"是创建优先队列...

    优先队列-java可以选择属性和升序降序

    优先队列在Java编程中是一种特殊的数据结构,它遵循特定的出队顺序,通常是最小元素(最小优先队列)或最大元素(最大优先队列)先出队。这种数据结构在解决各种问题时非常有用,例如任务调度、事件驱动编程、搜索...

    用堆实现优先队列

    优先队列是一种特殊的数据结构,它允许我们按照优先级顺序处理元素。在计算机科学中,尤其是在算法和数据结构领域,优先队列常用于解决需要快速访问最高优先级元素的问题,如Dijkstra算法或Prim算法。在C语言中,...

    用数组实现的优先队列(JAVA)

    优先队列是一种特殊的队列,它的主要特性是队首元素具有最高的优先级。在Java中,我们可以使用数组来实现优先队列。这篇文章将探讨如何利用数组实现优先队列,并通过提供的`PriorityQ.java`文件来深入理解其实现原理...

    最大和最小优先队列的基本操作

    根据给定文件的信息,我们可以详细地探讨一下最大优先队列和最小优先队列的基本操作。 ### 一、优先队列概述 优先队列是一种抽象数据类型,它支持一系列基本操作,如插入、删除等,并且队列中的元素具有不同的...

    简单的优先队列

    优先队列是一种特殊的队列,其中元素按照优先级顺序进行排列。在计算机科学中,它是一种数据结构,常用于处理需要快速访问最高优先级元素的问题。在这个话题中,我们将深入探讨与“简单的优先队列”相关的几个核心...

    优先队列算法实现(Java)

    优先队列是一种特殊的数据结构,它允许我们按照优先级顺序处理元素。在计算机科学中,尤其是在算法设计中,优先队列常被用于解决各种问题,如任务调度、事件驱动模拟和图形学等。本实现是用Java编程语言完成的,Java...

    STL-优先队列-队列-栈

    "STL优先队列、队列、栈" STL(Standard Template Library)中的优先队列、队列、栈是三个非常重要的数据结构,它们在实际应用中有着广泛的应用。本文将详细介绍STL中的优先队列、队列、栈,包括它们的定义、操作、...

    优先队列实验报告

    优先队列是一种特殊的数据结构,它允许我们根据元素的优先级进行操作,通常用于处理具有紧急程度的任务。在这个实验报告中,优先队列是通过最大堆实现的,最大堆是一种完全二叉树,其中每个父节点的优先权重都大于或...

    优先队列(Priority Queue)是一种特殊类型的队列

    优先队列(Priority Queue)是数据结构中的一种特殊队列,它的主要特点是元素的出队顺序不是按照“先进先出”(FIFO)的原则,而是根据每个元素的优先级来决定。这种数据结构广泛应用于各种算法和系统设计中,如事件...

    C语言优先队列

    C语言优先队列 C语言优先队列是一种特殊的队列结构,它允许元素按照一定的优先权顺序排列。在本实现中,我们使用堆来实现优先队列的存储和排序。 知识点一:堆数据结构 堆是一种特殊的树形数据结构,它满足以下两...

    优先队列、图等总结及习题.docx

    2. 实现方法:使用无序线性表、有序线性表、链表等结构实现优先队列。 二、优先队列的操作 1. 查找操作:查找一个元素在优先队列中的位置。 2. 插入操作:将一个新元素插入到优先队列中。 3. 删除操作:从优先队列...

    利用堆实现的优先队列

    ### 利用堆实现的优先队列 #### 引言 在计算机科学领域,优先队列是一种非常重要的数据结构,它被广泛应用于多种算法中,如任务调度、事件驱动模拟等场景。相比于传统队列,优先队列允许插入元素时指定一个优先级...

    优先队列 优先队列.rar

    优先队列是一种特殊的数据结构,它在队列的基础上增加了优先级的概念。在传统的队列中,元素遵循“先进先出”(FIFO)的原则,但优先队列则根据每个元素的优先级决定出队顺序,优先级高的元素会比优先级低的元素更早...

    C-优先队列

    优先队列是一种特殊的数据结构,它允许我们按照优先级处理元素。在计算机科学中,特别是在算法和数据结构领域,优先队列通常用于实现任务调度、事件驱动模拟、图的最短路径计算等场景。在C语言中,由于没有内置的...

    多级优先队列.zip

    在IT领域,多级优先队列(Multi-Level Priority Queues)是一种重要的数据结构,尤其在操作系统设计中扮演着核心角色。这种数据结构允许我们高效地处理具有不同优先级的任务,通常用于调度算法,如进程调度或任务...

    优先队列源代码

    堆排序实现优先队列,利用优先队列做了一个小程序,有兴趣看看

    广东工业大学-优先队列和二叉堆.pdf

    2. 优先队列的基本操作包括: - 创建一个空的优先队列 - 返回优先队列中元素的数量(Size) - 返回具有最高(或最低)优先级的元素(GetMax 或 GetMin) - 插入新元素到队列中(Insert) 优先队列的实现可以...

    数据结构优先队列

    数据结构优先队列,是一个简易版优先队列,输入数据及权值可以对其进行插入,删除等操作。

    采用优先队列式分枝限界法求解0/1背包问 题.pdf

    在讨论采用优先队列式分枝限界法求解0/1背包问题之前,我们需要先了解0/1背包问题的基本概念。0/1背包问题是一种组合优化问题,它的目标是在不超过背包总承重的前提下,从给定的一组物品中选择物品,使得选取物品的...

Global site tag (gtag.js) - Google Analytics