`
Java.天道2011
  • 浏览: 9450 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

用链表自定义队列

 
阅读更多
在学会了单向链表之后,我们可以用链表来自己写一个队列,要这样写队列,那就得有一个链表结点类
public class LinkNode {
	//定义结点跟数据属性
	private Object obj;
	private LinkNode node;
	//重写构造器
	public LinkNode(Object obj){
		this.obj = obj;
	}
	//定义得到数据的方法
	public Object getObj() {
		return obj;
	}
	//定义写入数据的方法
	public void setObj(Object obj) {
		this.obj = obj;
	}
	//定义得到下一个结点的方法
	public LinkNode getNode() {
		return node;
	}
	//定义连接下一个结点的方法
	public void setNode(LinkNode node) {
		this.node = node;
	}
}

然后就能写出一个自定义队列了,一个队列它需要有增加、队列大小、删除、插入、修改、得到数据等方法。
public class MyList {
	private LinkNode root=null;
	private LinkNode end = root;
	//在队列中增加元素
	public void add(Object obj){
		if(root==null){//如果根结点为null
			root = new LinkNode(obj);
			end = root;
		}else {//如果根结点不为null
			LinkNode node = new LinkNode(obj);
			end.setNode(node);
			end = node;
		}
	}
	//得到队列的大小
	public int size(){
		int count = 0;
		if(root==null){
			return count;
		}else{
			count++;
			LinkNode node = root.getNode();
			while(node!=null){
				count++;
				node = node.getNode();
			}
			return count;
		}
	}
	//得到指定位置上的数据
	public Object get(int index){
		int count = 0;
		if(index>=size()||index<0){
			throw new RuntimeException("超出范围!!!index:"+index); 
		}else{
			if(index==0){
				return root.getObj();
			}else{
				LinkNode node = root.getNode();
				while(node!=null){
					count++;
					if(count==index){ 
						return node.getObj();
						
					}
					node = node.getNode();
				}					
			}
		}
		return 0;
	}
	//移除指定位置上的数据
	public void remove(int index){
		int count =0;
		if(index>=size()||index<0){//如果下标超出范围
			throw new RuntimeException("超出范围!!!index:"+index); 
		}else{//如果下标为0
			if(index==0){
				root = root.getNode();				
			}else{//如果下标在范围内切不为0
				LinkNode node = root.getNode();
				while(node!=null){
					count++;
					if(count==index-1){ 
						LinkNode node1 = node.getNode();
						LinkNode node2 = node1.getNode();
						node.setNode(node2);
					}
					node = node.getNode();
				}
			}
		}
	}
	//在指定位置修改队列里的数据
	public void modify(int index ,Object obj){
		int count =0;
		if(index>=size()||index<0){//如果下标超出范围
			throw new RuntimeException("超出范围!!!index:"+index); 
		}else{//如果下标为0
			if(index==0){
				root.setObj(obj);				
			}else{//如果下标在范围内且不为0
				LinkNode node = root.getNode();
				while(node!=null){
					count++;
					if(count==index){ 
						node.setObj(obj);
					}
					node = node.getNode();
				}
			}
		}	
	}
	//在指定位置上插入元素
	public void insert(int index,Object obj){
		int count =0;
		if(index>=size()||index<0){//如果下标超出范围
			throw new RuntimeException("超出范围!!!index:"+index); 
		}else{//如果下标为0
			if(index==0){
				LinkNode node = new LinkNode(obj);
				LinkNode tempnode =root;
				root = node;
				node = tempnode;
				root.setNode(node);
			}else{//如果下标在范围内且不为0
				LinkNode node = root.getNode();
				while(node!=null){
					count++;
					if(count==index-1){ 
						LinkNode node1 = new LinkNode(obj);
						LinkNode tempnode = node.getNode();
						node.setNode(node1);
						node1.setNode(tempnode);
					}
					node = node.getNode();
				}
			}
		}		
	}
}

写好一个队列后我们可以来测试下
public class ListTest {
	public static void main(String []args){
		MyList list = new MyList();
		for(int i=0;i<10;i++){
		list.add("元素:"+i);
		}
		list.remove(3);
		list.modify(7, "元素:"+10);
		list.insert(0, "元素:"+11);
		list.insert(6, "元素:"+12);
		for(int i =0;i<list.size();i++){
			Object o = list.get(i);
			System.out.println(o);
		}
		System.out.println(list.size());
	}
}

结果与我们所想一致,那么自定义的队列就写好了
分享到:
评论

相关推荐

    c++链表队列的实现

    链表队列是一种使用链表结构来实现的队列数据结构。队列是一种先进先出(First In First Out, FIFO)的数据结构,即最先加入队列中的元素会最先被移除。在链表队列中,新加入的元素总是被添加到链表的尾部,而删除...

    java 自定义Queue队列

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

    数据结构:线性表、链表、队列、栈、串

    本主题将深入探讨线性表、链表、队列、栈这四种基本的数据结构,并以C++语言为例,通过相关源代码(stringData.cpp、seqList.cpp、node.cpp、seqQueue.cpp、linkQueue.cpp、linkStack.cpp、seqStack.cpp)来解析其...

    java双端队列的实现-Java实现自定义双端队列(链表和数组两种方式) 数组和链表.pdf

    Java 双端队列的实现 Java 中的双端队列(Deque)是一种特殊的队列,能够在队列的两端进行元素的添加和删除...Java 实现自定义双端队列可以通过链表和数组两种方式实现,双端队列可以充当单端队列,也可以用于充当栈。

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

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

    数据结构(顺序表 顺序链表 链队列)

    链队列是用链表实现的队列,其优点在于动态扩展容量的能力。在C++中,可以使用指针来创建队列的头部和尾部,插入(入队)操作在尾部进行,删除(出队)操作在头部进行。链队列的插入和删除操作通常比基于数组的队列...

    数据结构算法集---C++语言实现.rar_queue stack_堆栈 栈_数据结构 队列_链表_队列

    例如,栈可以用数组或链表来实现,队列通常用数组(循环数组)或双端队列(deque)来实现。 在实际应用中,这些数据结构的C++实现可能采用了模板类,允许用户选择任何类型的元素进行存储,增强了代码的通用性和灵活...

    字符串 向量 链表 栈和队列

    C++中没有内置链表类型,但可以使用`std::list`或自定义结构来实现。 再者,我们讨论**栈**,它是一种后进先出(LIFO)的数据结构。栈的操作主要有压栈(push)和弹栈(pop),类似于现实生活中的堆叠物品,最后放...

    数据结构C++版 链表,堆栈,队列

    通过这次专题实习,巩固和加深对所学相关知识点的理解,进一步熟悉基本自定义类、函数的应用加强对模块化程序设计和面向对象程序设计的理解。掌握C++语言程序设计的基本思想,了解简单的系统分析和设计方法。 在main...

    队列,栈和链表的C++实现

    C++中,可以使用标准模板库(STL)的`stack`容器来实现栈的操作,但在这个项目中,程序员选择自定义了栈的实现。栈的主要操作包括压栈(push)、弹栈(pop)、查看栈顶元素(top)以及检查栈是否为空(empty)。 接...

    面试中,经常要用到的数据结构(链表、队列、栈、二叉树、哈希表等)以及一些常用的算法

    在Java中,可以使用`LinkedList`类来实现链表操作。 2. **队列**:队列是一种先进先出(FIFO)的数据结构。Java提供了`Queue`接口,`LinkedList`和`ArrayDeque`都可以实现队列功能。 3. **栈**:栈是一种后进先出...

    C++利用链表模板类实现简易队列

    队列是一种先进先出的数据结构,队列的实现可以使用链表模板类来实现。队列的主要操作有入队、出队、打印队首元素和获取队列元素数量等。 知识点三:模板类的声明和定义 在C++中,模板类的声明和定义不能分开,...

    delphi自定义链表实例.rar

    在编程领域,Delphi是一种基于Object Pascal语言的集成开发环境(IDE),它以其高效性和强大的Windows应用程序开发能力而闻名。...在实践中,自定义链表可用于各种用途,例如缓存、队列、栈或者复杂的数据结构实现。

    自定义的栈与队列

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

    C++版链表派生栈和队列

    该代码主要是用C++语言来实现通过链表派生栈和队列

    C++循环队列模版(数组和链表两种实现方式都有)

    在C++中,循环队列可以使用数组或者链表来实现,这两种方式各有优缺点。下面我们将详细探讨这两种实现方式及其基本功能。 首先,我们来看数组实现的循环队列。数组是最基础的数据结构,它的优点是访问速度快,空间...

    Java版数据结构代码,栈,动态数组,队列,链表,二叉树

    本资源提供了Java实现的数据结构代码,包括栈、动态数组、队列、链表和二叉树,这些都是计算机科学中最基础且重要的数据结构。 1. **栈(Stack)**:栈是一种“后进先出”(LIFO)的数据结构,常用于表达式求值、...

    Python单向链表和双向链表原理与用法实例详解

    Python实现链表时,可以使用内置的类来简化操作,如`collections`模块中的`deque`可以用来模拟双向链表,但通常我们会选择自定义数据结构,以便更好地理解和控制链表的行为。 总的来说,链表在内存效率和动态性方面...

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

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

    使用python实现数组、链表、队列、栈的方法

    在Python中实现队列可以通过使用列表的append和pop方法来完成,也可以通过collections.deque来实现一个高效双端队列。 栈是一种后进先出(LIFO)的数据结构,它允许在列表的一端添加和删除元素,后添加进去的元素会...

Global site tag (gtag.js) - Google Analytics