`
沐刃青蛟
  • 浏览: 7448 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

数组队列总结

 
阅读更多

 

    数组队列是一种大小可以改变,类型没有定死的类似数组的工具。不过与数组相比,它更具有灵活性。因为它不但不用担心越界问题,而且因为泛型(类似c++中模板的东西)的存在而支持各种类型。

 

   以下是数组队列的功能实现代码:

 

import List.Student;

public class ArrayList <E> {
	
	private Object[] array;
	private int size;
	private int addNum;
	
	public int getSize()
	{
		return size;
	}
	//构造函数一
	public ArrayList(int addNum)
	{
		this.addNum=addNum;
		size=0;
		array = new Object [addNum];
	}
	//构造函数二
	public ArrayList()
	{
		/*
		 *   this的三种用法 :
		 *      1.调用属性 :    this.属性名
		 *      2.调用方法 :    this.方法名
		 *      3.调用构造方法: this.(实参)
		 */
		//调用构造函数一  
		this(5);
	}
	//增加元素
	public void add(E elem)
	{
		//判断是否越界(实现不受长度控制的关键)
		if(size==array.length)
		{
			//越界则创建新数组
			Object []temp=new Object[addNum+size];
			//复制元素到新数组中
			for(int i=0;i<array.length;i++)
			{
				temp[i]=array[i];
			}
			//指向新数组名,便可以继续使用array了
			array=temp;
		}
		array[size]=elem;
		//修改大小
		size++;
	}
	//删除
	public void remove(int index)
	{
		//判断
		if(index>=0&&index<size){
			//修改大小
			size--;
			//index后面的元素向前移动一位
			for(int i=index;i<size;i++)
			{
				array[i]=array[i+1];
			}
		}
	}
	//修改
	public void change(int index,E elem)
	{
		//判断
		if(index>=0&&index<size)
			array[index]=elem;     //把值给要改变的位置的元素
	}
	//查找
	public  void find(E elem)
	{
		//记录下标位置
		int index=0;
		//判断有无此元素的标志
		int flag=0;
		//遍历寻找
		for(int i=0;i<size;i++)
		{
			if(array[i].equals(elem))
			{
				//找到就输出
				System.out.println("index="+index);
				//记录标志
				flag=1;
			}
			index++;
		}
		//判断有无
		if(flag==0)
			System.out.println("无此元素");
	}
	//插入
	public void insert(int index,E elem)
	{
		//判断
		if(index>=0&&index<size){
			//判断是否越界
			if(size==array.length)
			{
				//越界则创建新数组
				Object []temp=new Object[addNum+size];
				//遍历复制元素
				for(int i=0;i<array.length;i++)
				{
					temp[i]=array[i];
				}
				//指向新数组
				array=temp;
			}
			//修改大小
			size++;
			//index 后面的元素都向后移动一位
			for(int i=size-2;i>=index;i--)
			{
				array[i+1]=array[i];
			}
			//index位置的值为插入的值
			array[index]=elem;
		}
	}
	//输出
	public void showInfo()
	{
		for(int i=0;i<size;i++)
		{
			System.out.print(array[i]+"  ");
		}
		System.out.println();
	}
	//递归法输出
	public void showInfo2(int size)
	{
		//终止条件
		if(size==1)
		{
			System.out.print(array[this.size-size]+"  ");
		}
		else 
		{
			System.out.print(array[this.size-size]+"  ");
			showInfo2(size-1);
		}
	}
	
	public void showInfo2()
	{
		showInfo2(this.size);
		System.out.println();
	}
	
	public static void  main(String [] args)
	{
		ArrayList <Student> list = new ArrayList<Student>();
		for(int i=0;i<10;i++)
		{
			list.add(new Student("学生"+(i)));
		}
//		System.out.println("size="+list.getSize());
//		list.showInfo2();
//		list.remove(0);
//		System.out.println("size="+list.getSize());
//		list.showInfo();
//		list.change(5, new Student("qinglong"));
//		System.out.println(list.getSize());
//		list.showInfo();
//		list.find(new Student("学生0"));
//		list.insert(0, new Student("qwerty"));
//		System.out.println(list.getSize());
		list.showInfo();
	}
	
}


 

     学生类如下:

 

public class Student {
	
	private String name;
	//构造函数
	public Student(String name)
	{
		this.name=name;
	}
	//重写toString方法
	public String toString()
	{
		return name;
	}
	//重写eqauls方法
	public boolean eqauls(Student stu)
	{
		return  name.equals(stu.name);
	}
	
}

 

 

其中    调用构造方法: this.(实参)   也是第一次碰到。

 

     我的这个数组对列虽然实现了,但有个缺陷,就是我所有的方法都是void类型。这样当我要用到某些东西的时候,可能就不行了。所以其中一些方法应该return一些东西。

 

 

 

 

 

分享到:
评论

相关推荐

    循环链表队列 循环数组队列的代码实现

    总结而言,循环链表队列和循环数组队列各有优势,选择哪种实现方式取决于具体的应用场景和性能需求。链表队列在动态调整队列大小时更为灵活,而数组队列在固定大小的情况下,能够提供更好的空间效率和访问速度。

    队列数组实现

    ### 队列数组实现 #### 概述 在计算机科学中,队列是一种非常基本的数据结构,它遵循先进先出(FIFO)的原则。队列可以被用来解决多种问题,比如任务调度、缓存管理等。队列可以通过多种方式实现,其中一种常见的...

    基于数组的队列

    ### 基于数组的队列 #### 概述 本篇内容介绍了一种改进的基于数组实现的队列结构,特别之处在于引入了一个`tag`标记来优化队列的操作判断逻辑,使得队列在判空(判断是否为空)与判满(判断是否已满)时更加高效...

    数组实现循环队列(有bug版)

    ### 数组实现循环队列(有bug版) #### 概述 本文档主要介绍了一种基于数组实现的循环队列的代码实现,并对该代码进行了分析,指出了其中存在的问题及可能的原因。 #### 循环队列简介 循环队列是一种特殊的数据...

    数据结构队列总结

    **循环队列**是数组实现的一种优化,通过将数组视为首尾相连的环形结构,可以更有效地利用数组空间。在循环队列中,当队尾到达数组末尾时,可以继续从数组开头开始存储元素,避免了不必要的数组复制操作。 #### ...

    循环队列的总结

    相比于传统的队列,循环队列利用数组的循环特性,避免了队列满或空时需要重新分配内存的问题,提高了空间利用率和操作效率。在本文中,我们将深入探讨循环队列的概念、实现方式以及其优缺点。 ### 循环队列概念 ...

    数据结构中数组,队列,栈

    数据结构是计算机科学中至关重要的基础概念...总结来说,数组、栈和队列是数据结构的基础,理解它们的概念和操作对于理解和设计复杂的算法至关重要。在实际编程中,灵活运用这些数据结构可以提高程序的效率和可维护性。

    C语言实现使用静态数组.zip

    下面将详细介绍静态数组及其在C语言中的应用,以及如何实现一个简单的静态数组队列。 首先,静态数组是固定大小的数组,其大小在声明时必须确定,之后不能更改。在C语言中,声明静态数组的基本语法如下: ```c ...

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

    总结一下,C++中的循环队列可以通过数组和链表两种方式实现,每种实现都有其特点。数组实现访问速度快,但处理满队列和空队列需要特殊考虑;链表实现插入和删除操作灵活,但访问速度较慢。模板机制使得循环队列可以...

    JS使用数组实现的队列功能示例

    在JavaScript中实现队列数据结构主要有两种方式:使用数组和使用对象。本篇文档将探讨如何使用数组来实现一个队列,并展示它的基本操作,如添加元素、删除元素、读取队首和队尾元素等。 ### 队列的概念与特点 队列...

    c++链表队列的实现

    3. **访问速度**:相比于数组队列,链表队列在访问数据时可能效率较低,因为需要遍历链表才能到达指定位置。 4. **实现复杂度**:链表队列的实现通常比数组队列更复杂一些,涉及到指针的操作。 ### 三、C++中链表...

    对几种队列的总结

    本篇文章将对几种常见的队列进行深入的总结和探讨。 首先,我们来看最基本的**线性队列**,也称为顺序队列。线性队列在内存中通常是通过数组实现的,它的入队操作在队尾进行,出队操作在队头进行。当队列满时,可以...

    栈、队列和数组.ppt

    总结来说,栈、队列和数组是编程中基础且重要的数据结构,理解它们的概念和实现方式对于编写高效代码至关重要。栈用于回溯、表达式求解、括号匹配等问题,队列用于任务调度、缓冲区管理等,数组则常作为基础结构用于...

    基于STM32串口环形队列

    总结来说,“基于STM32串口环形队列”的设计旨在提升串口通信的效率和可靠性,通过合理利用内存资源和中断处理机制,实现高效的数据收发。byte_queue-master项目提供了一个实用的模板,开发者可以在此基础上根据具体...

    duilie.rar_删除队列

    在计算机科学中,队列是一种基础且重要的数据结构,它遵循先进先出(FIFO,First In ...在实际编程中,根据具体需求选择合适的数据结构实现队列,如固定大小的数组队列、动态扩展的链表队列或支持双向操作的双端队列。

    C语言_初始化队列+入队列+出队列+销毁队列

    与数组实现的队列相比,链式队列能够更灵活地处理数据,特别是在动态变化的数据集合中。 #### 二、链式队列的关键概念 - **节点(Node)**:链式队列中的每个元素都是一个节点。 - **头指针(front)**:指向队列的第一...

    数据结构,队列的实现,包括链式和数组式

    总结,队列作为一种基础数据结构,有链式和数组式两种主要实现方式,每种都有其特点和适用场景。链式队列适合于动态变化的元素数量,而数组式队列则提供了一种简洁且效率较高的解决方案。在C++中,我们可以通过...

    链式队列的基本运算

    链式队列是一种在计算机科学中广泛使用的数据结构,它基于链表实现,与传统的数组队列相比,具有更大的灵活性。在本程序中,我们主要关注链式队列的六个核心操作,这些操作对于理解和应用链式队列至关重要。 1. **...

    数据结构 队列部分 队列的删除等相关操作

    在队列的实现中,我们可以看到,队列的元素是通过数组来存储的,而front和rear指针是用来控制队列的元素的添加和删除的。 队列的添加操作 在上面的代码中,我们可以看到,队列的添加操作是通过将元素添加到队列的...

    线性表、堆栈、队列

    总结起来,线性表、堆栈和队列是数据结构的基础,它们在算法设计和程序实现中有着广泛应用。理解并掌握这些概念,以及如何在C++中实现它们,对于提升编程技能和解决实际问题至关重要。通过实践和学习,我们可以更好...

Global site tag (gtag.js) - Google Analytics