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

自定义队列

阅读更多

队列 一.数组与一般队列的区别

1.数组在定义的时候必须得指定数据类型和数组的长度。

2.数组在内存中的存储是连续的,它的每个元素都有对应的下标。

3.队列是一种自定义的数据结构,它的功能是可以自己编写的。

4.一般的队列可以实现动态的增加数据的长度,这样在使用的时候就会比数组要灵活的多。

5.一般的队列还可以任意插入或删除数据,而数组却不能直接实现。

6.一般对列还有其他的功能,这可以自己增加。

二.队列的泛型

1.一般队列不足:因为在定义的时候已经指定了它的数据类型,所以它只能用在相应的数据类型。如果要给不同 的数据类型使用,又必须得重新写相应数据类型的队列。

2.为了弥补一般队列的不足,我们可以定义泛型队列,它就能很好解决以上的不足。

3.泛型队列是只在定义的时候不指明其数据类型,而是用<任意字母>(一个标记)代替数据类型,但是在创建对 象的时候必须得指明它的数据类型。

4.泛型队列的优点:可以被任意数据类型使用,这样可以提高它重复使用的效率。

5.格式:

public class 类名<任意字母>()

{

/* *在Java中所有的类都是Object类的子类,

子类可以自动转型为父类 *基本的数据类型不能作为对象,

但它们都会有相应的类 */ //更多自定义的方法 }

实例:

 

public class mylist<E> {
	//将数组定义为Object数组,表示能存放Java中所有的对象
	private Object[] src = new Object[0];
	

	/**
	 * 将指定的数据放入队列容器中
	 * 
	 * @param e
	 *            要放入队列容器的数据
	 */
	public void add(E e) {
		//定义一个新数组,长度是原始数组长度+1
		Object dest[] = new Object[src.length+1];
		
		//将新元素放入新数组最后一个下标位置
		dest[src.length] = e;
		//将原始数组中的元素按照下标顺序拷贝到新数组
		for(int i=0;i<src.length;i++){
			dest[i] = src[i];
		}
		
		//将原数组名指向新数组
		src = dest;
	}

	/**
	 * 取出指定下标位置的元素
	 * 
	 * @param index
	 *            要取出的元素的下标
	 * @return 返回取得的元素
	 */
	public E get(int index) {
		//得到src对应下标的元素
		E e = (E)src[index];
		return e;
	}

	/**
	 * 删除指定位置的元素
	 * 
	 * @param index
	 *             要删除的元素的下标
	 */
	public void delete(int index) {
		//创建一个长度比src小1的数组
		Object [] arr =new Object[src.length-1];
		//拷贝下表之前的元素
        for(int i=0;i<index;i++){
        	arr[i]=src[i];
        }
        //拷贝下标之后的元素
        for(int j=index;j<src.length;j++){
        	arr[j]=src[j+1];
        }
        //修改后让src指向arr
        src=arr;
	}

	/**
	 * 将指定位置的元素修改为指定的值
	 * 
	 * @param index
	 *            要修改的元素的下标
	 * @param num
	 *            修改之后的新值
	 */
	public void modify(int index, E e) {
		src[index] = e;
	}

	/**
	 * 在指定的位置插入指定的元素值
	 * 
	 * @param index
	 *            要插入元素的位置
	 * @param e
	 *            要插入的元素
	 */
	public void insert(int index, E e) {
       //创建一个比src大1的数组
	    Object [] arr =new Object[src.length+1];
	    //拷贝添加的元素下标之前的元素
	    for(int i=0;i<index;i++){
	    	arr[i]=src[i];
	    }
	    //添加要插入的元素
	    arr[index]=e;
	    //拷贝添加元素下标之后的元素
	    for(int j=index;j<arr.length;j++){
	    	arr[j+1]=src[j];
	    }
	    //让src重新指向arr
	     src=arr;
	}

	/**
	 * 得到容器中元素个数的方法
	 * 
	 * @return 返回容器中的元素个数
	 */
	public int size() {
		//队列长度就是src数组的当前长度
		int len = src.length;
		return len;
	}
}
 

 

6.创建对象的时候,类名<数据类型>=new 类名<数据类型>();

分享到:
评论

相关推荐

    我的画图板1.0<细说1.准备工作,自定义队列>

    准备工作,自定义队列&gt;”表明这是一个关于软件开发的项目,特别提到了“准备工作”和“自定义队列”。这通常意味着开发者在创建一个名为“我的画图板1.0”的应用程序时,正在为其基础架构进行规划,其中自定义队列是...

    自定义队列,XML,文件夹

    本文将深入探讨Java中自定义队列的操作、XML文件的处理以及如何进行文件夹操作。 首先,让我们来讨论自定义队列。在计算机科学中,队列是一种先进先出(FIFO)的数据结构,它在Java中可以通过实现`java.util.Queue`...

    索引队列-C#中的自定义队列

    标题 "索引队列-C#中的自定义队列" 指向了一个特定的数据结构实现,即在C#编程环境中创建一个支持索引访问的队列。在标准的`System.Collections.Generic.Queue&lt;T&gt;`类中,元素只能通过入队(Enqueue)和出队...

    java 自定义Queue队列

    自定义Queue队列意味着我们需要创建一个类来实现Queue接口,以满足特定的需求或性能优化。 首先,让我们了解一下`java.util.Queue`接口提供的主要方法: 1. `void add(E e)`: 向队列尾部添加元素,如果队列已满,...

    ios-自定义Operation队列实现直播礼物动画.zip

    在这个“ios-自定义Operation队列实现直播礼物动画.zip”项目中,开发者利用自定义的`NSOperation`子类来构建一个动画队列,用于处理直播过程中的礼物动画效果。直播礼物动画是提升用户互动体验的重要组成部分,它...

    自定义C++队列类

    自定义的C++队列类,可以建立队列,Push元素,枚举元素等

    custom_queue:通用对象的自定义队列实现

    `custom_queue`项目旨在提供一个通用的对象自定义队列实现,它允许开发者根据具体需求定制队列的行为,例如添加特殊操作、同步机制或优化性能。该项目依赖于GSON、Google的异步库以及Jackson Core,这些库分别用于...

    swift-iOS动画队列-仿映客刷礼物效果

    在这个项目中,我们可以找到实现动画队列的关键类或组件,如`PresentAnimView`,它可能是一个自定义的UIView子类,负责处理礼物的展示动画。 1. **动画设计**:在实现刷礼物效果时,我们需要设计每个礼物的动画,这...

    android自定义消息队列

    标题“android自定义消息队列”指的是开发者为Android应用创建一个自定义的消息传递机制,这通常涉及到线程间通信和任务调度。描述中的“实现的简单的开始,暂停功能”意味着这个自定义消息队列能够控制任务的执行...

    自定义的栈与队列

    自定义队列的实现方式有: 1. 双端队列(Deque):可以同时在两端进行入队和出队操作,例如C++中的`std::deque`。 2. 链表:使用链表,入队在尾部插入节点,出队则删除头部节点。 3. 循环数组:当数组满时,通过循环...

    数组和队列反转

    但如果你想自定义队列,你可以创建一个类,包含一个数组作为底层数据结构,并实现添加元素(Enqueue)、移除元素(Dequeue)以及检查队首元素(Peek)等方法。以下是一个简单的自定义队列的C#实现: ```csharp ...

    C++实现队列的创建、插入、删除

    在C++中,我们可以使用标准模板库(STL)中的`queue`容器来方便地实现队列操作,但为了深入理解其工作原理,也可以自定义队列结构。下面将详细探讨如何在C++中创建、插入和删除队列。 1. 队列的创建: 在C++中,...

    node.js+redis实现消息队列

    2 自定义队列 http://127.0.0.1:8000/get?queueName=队列名称 获取队列内容: http://127.0.0.1:8000/getList?队列名称 http://127.0.0.1:8000/getList queueName 获取队列长度: http://127.0.0.1:8000/getLen ...

    C++实现一个队列

    C++标准库中提供了`&lt;queue&gt;`头文件来支持队列操作,但有时为了学习、理解数据结构的底层原理或者实现特定功能,我们需要自定义队列。本篇文章将深入探讨如何使用C++实现一个简单的队列。 首先,我们需要定义队列的...

    自己用C++实现的字符串和队列代码

    但有时为了学习和理解,或者在特定需求下,开发者会选择自定义队列。"myQueue.rar"文件可能就包含这样的实现。自定义队列的基本操作包括: 1. **初始化**:创建一个空队列。 2. **入队**(enqueue):在队尾添加...

    队列queue的实现

    虽然C++标准库提供了`std::queue`,但在某些情况下,我们可能需要自定义队列的实现,例如为了优化性能、满足特定需求或进行教学目的。下面是一个简单的基于数组实现的队列: ```cpp template class Queue { ...

    C# winform可忽略消息的自定义消息队列

    为了解决这个问题,我们可以采用自定义消息队列来优化处理流程,从而实现异步处理,避免UI线程被长时间占用。 标题中的“C# Winform可忽略消息的自定义消息队列”指的是创建一个特定的机制,允许在WinForm应用中,...

    一个NodeJS和redis做的基于http协议的队列

    2 自定义队列 http: 127 0 0 1:8000 postPut post方式提交json串 {&quot;postData”:”入队内容&quot; &quot;queueName&quot;:&quot;队列名称”} 出队: 1 默认队列 http: 127 0 0 1:8000 get 2 自定义队列 ...

    C++队列代码

    在某些特定场景下,可能需要自定义队列实现,例如为了优化性能或者实现特殊功能。这时,可以使用C++的继承机制,创建一个新的类来继承`std::queue`,并覆盖其成员函数。自定义队列通常需要重写`push`、`pop`、`front...

    支持多线程和泛型的阻塞队列

    2. **数据成员**:使用`std::queue`或自定义队列结构,以及`std::mutex`和`std::condition_variable`来实现同步。 3. **方法声明**:包括`push()`, `pop()`, `take()`, `try_pop()`, `size()`等操作,这些方法需要...

Global site tag (gtag.js) - Google Analytics