数组形式的优先队列和链表形式的优先队列
优先队列具有排序的功能,而且可以指定它的排序方法,现在暂时先不讨论按指定的排序方式,我们就先讨论一下简单的按照值的大小来排序的情况吧。
现在我们要把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优先队列_优先队列_"这个标题表明这是一个MATLAB环境下的优先队列实现,可能由excitingfbh开发者创建,版本为1.0。 描述中提到的"pq_create"是创建优先队列...
优先队列在Java编程中是一种特殊的数据结构,它遵循特定的出队顺序,通常是最小元素(最小优先队列)或最大元素(最大优先队列)先出队。这种数据结构在解决各种问题时非常有用,例如任务调度、事件驱动编程、搜索...
优先队列是一种特殊的数据结构,它允许我们按照优先级顺序处理元素。在计算机科学中,尤其是在算法和数据结构领域,优先队列常用于解决需要快速访问最高优先级元素的问题,如Dijkstra算法或Prim算法。在C语言中,...
优先队列是一种特殊的队列,它的主要特性是队首元素具有最高的优先级。在Java中,我们可以使用数组来实现优先队列。这篇文章将探讨如何利用数组实现优先队列,并通过提供的`PriorityQ.java`文件来深入理解其实现原理...
根据给定文件的信息,我们可以详细地探讨一下最大优先队列和最小优先队列的基本操作。 ### 一、优先队列概述 优先队列是一种抽象数据类型,它支持一系列基本操作,如插入、删除等,并且队列中的元素具有不同的...
优先队列是一种特殊的队列,其中元素按照优先级顺序进行排列。在计算机科学中,它是一种数据结构,常用于处理需要快速访问最高优先级元素的问题。在这个话题中,我们将深入探讨与“简单的优先队列”相关的几个核心...
优先队列是一种特殊的数据结构,它允许我们按照优先级顺序处理元素。在计算机科学中,尤其是在算法设计中,优先队列常被用于解决各种问题,如任务调度、事件驱动模拟和图形学等。本实现是用Java编程语言完成的,Java...
"STL优先队列、队列、栈" STL(Standard Template Library)中的优先队列、队列、栈是三个非常重要的数据结构,它们在实际应用中有着广泛的应用。本文将详细介绍STL中的优先队列、队列、栈,包括它们的定义、操作、...
优先队列是一种特殊的数据结构,它允许我们根据元素的优先级进行操作,通常用于处理具有紧急程度的任务。在这个实验报告中,优先队列是通过最大堆实现的,最大堆是一种完全二叉树,其中每个父节点的优先权重都大于或...
优先队列(Priority Queue)是数据结构中的一种特殊队列,它的主要特点是元素的出队顺序不是按照“先进先出”(FIFO)的原则,而是根据每个元素的优先级来决定。这种数据结构广泛应用于各种算法和系统设计中,如事件...
C语言优先队列 C语言优先队列是一种特殊的队列结构,它允许元素按照一定的优先权顺序排列。在本实现中,我们使用堆来实现优先队列的存储和排序。 知识点一:堆数据结构 堆是一种特殊的树形数据结构,它满足以下两...
2. 实现方法:使用无序线性表、有序线性表、链表等结构实现优先队列。 二、优先队列的操作 1. 查找操作:查找一个元素在优先队列中的位置。 2. 插入操作:将一个新元素插入到优先队列中。 3. 删除操作:从优先队列...
### 利用堆实现的优先队列 #### 引言 在计算机科学领域,优先队列是一种非常重要的数据结构,它被广泛应用于多种算法中,如任务调度、事件驱动模拟等场景。相比于传统队列,优先队列允许插入元素时指定一个优先级...
优先队列是一种特殊的数据结构,它在队列的基础上增加了优先级的概念。在传统的队列中,元素遵循“先进先出”(FIFO)的原则,但优先队列则根据每个元素的优先级决定出队顺序,优先级高的元素会比优先级低的元素更早...
优先队列是一种特殊的数据结构,它允许我们按照优先级处理元素。在计算机科学中,特别是在算法和数据结构领域,优先队列通常用于实现任务调度、事件驱动模拟、图的最短路径计算等场景。在C语言中,由于没有内置的...
在IT领域,多级优先队列(Multi-Level Priority Queues)是一种重要的数据结构,尤其在操作系统设计中扮演着核心角色。这种数据结构允许我们高效地处理具有不同优先级的任务,通常用于调度算法,如进程调度或任务...
堆排序实现优先队列,利用优先队列做了一个小程序,有兴趣看看
2. 优先队列的基本操作包括: - 创建一个空的优先队列 - 返回优先队列中元素的数量(Size) - 返回具有最高(或最低)优先级的元素(GetMax 或 GetMin) - 插入新元素到队列中(Insert) 优先队列的实现可以...
数据结构优先队列,是一个简易版优先队列,输入数据及权值可以对其进行插入,删除等操作。
在讨论采用优先队列式分枝限界法求解0/1背包问题之前,我们需要先了解0/1背包问题的基本概念。0/1背包问题是一种组合优化问题,它的目标是在不超过背包总承重的前提下,从给定的一组物品中选择物品,使得选取物品的...