数组:
数组是java中最基本的一中数据结构,数组一旦定义,它的长度就是固定的。数组也是一种对象,数组的对象本身的类型就是数组类型。定义数组时,一定要知名组中元素的类型。
数组有三种定义方式:
1.定义时指定数组长度,这样会使内存空间创建数组对象,但数组中每个位置的元素是默认值。原始类型,则为0,引用类型,则为null。
2.创建数组的时候就转给元素赋值。
3.仅定义一个数组变量名,然后来赋值。
Eg1:int[]ia=newint[10];
for(inti=0;i<ia.length;i++){
ia[i]=i*100;}
Eg2://仅定义了一个int类型的数组变量并没有指向数组对象,这时ia的值null
int[]ia;
//将数组变量名指向一个数组对象,数组中的每个位置默认值是0
ia=newint[5];
//字符串数组,定义时数组中的原值赋值
String[]sa=newString[]{“apple”,”orange”,”pineapple”};
用数组实现的队列:
/** * 定义一个数组转化为的队列 */ public class Array{ private int length=100; private int add=20; int count=0; // 用于传递数组初始长度和每次增加长度的构造器 public Array(int length,int add){ this.length=length; this.add=add; } //初始化数组 Object[] str = new Object[length]; // 向数组中添加元素 public void add(E e){ count++; if(count>str.length){ Object[] tem= new Object[str.length+add]; str=tem; } str[count-1]=e; } // 获得数组长度 public int size(){ return count; } // 向数组中插入元素 public void insert(int index,E e){ if(index>count||index<0){ System.out.println("下角标越界"); return; } for(int i=count-1;i>=0;i--){ if(i!=index-1){ str[i+1]=str[i]; continue; } str[index]=e; count++; return; } } // 删除数组中指定的元素 public void delete(int index){ if(index>count||index<0){ System.out.println("下角标越界"); return; } for(;index<count;index++){ initstr[index]=initstr[index+1]; } count--; } }
链表:
链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现。相对于线性表顺序结构,链表比较放表插入和删除。
队列也是一个存放东西的容器。但队列的使用比数组、链表更加灵活。一个完善的队列可以很方便的实现添加、删除、更改、获得长度、插入、查找等操作。因此通过把数组和链表转化为队列,可以实现对数组和链表的优化,增强其实用性。
一个简单链表的实现首先定义一个结点类:
/** * 定义一个结点类 */ public classMyNode { private E data; private MyNode next; public void setdata(E e){ this.data=e; } public void setnext(MyNode next){ this.next=next; } public E getdata(){ return data; } public MyNode getnext(){ return next; } }
定义一个以链表为基础的队列
/** * 定义一个以链表为基础的队列 */ public class LinkList{ MyNode root; private MyNode last; public void setroot(MyNode e){ root=e; } // 向链表中添加元素 public void add(E e){ if(root==null){ root=new MyNode(); root.setdata(e); last=root; }else{ MyNode tem=new MyNode(); tem.setdata(e); last.setnext(tem); last=tem; } } // 获得链表的长度 public int size(){ if(root!=null) { int t=1; MyNode tem=root.getnext(); while(tem!=null){ tem=tem.getnext(); t++; } return t; } return 0; } // 在指定位置插入结点 public void insert(int index,E e){ MyNode newNode=new MyNode(); if(index==1){ newNode.setdata(e); newNode.setnext(root); root=newNode; }else{ MyNode tem=root; for(int i=2;i<index;i++){ tem=tem.getnext(); } newNode.setdata(e); newNode.setnext(tem.getnext()); tem.setnext(newNode); } } // 删除指定位置的结点 public void delete(int index){ if(index==1) root=root.getnext(); else{ MyNode tem=root; for(int i=2;i<index;i++){ tem=tem.getnext(); } tem.setnext(tem.getnext().getnext()); } } }
相关推荐
- **链表适合**:如果需要频繁地插入和删除元素,或者数据的大小需要动态调整,而对随机访问要求不高的情况下,链表更为合适,例如实现LRU缓存淘汰策略、实现队列和栈等。 总的来说,选择数组还是链表取决于具体的...
本压缩包文件"数组的扩容和链表结构.zip"包含了关于Java数组扩容和链表结构存储的相关知识点,我们将详细探讨这两个主题。 首先,我们来看Java数组。数组是一种线性数据结构,它在内存中连续存储相同类型的数据元素...
界面应包括按钮来执行enqueue、dequeue、peek等操作,并显示队列当前的状态(如队列长度和元素序列)。 5 模拟队列操作的实现 模拟队列的完整实现包括以下几个步骤: 1) 定义队列类,包含存储元素的容器(如数组...
本篇将详细介绍Java数组中的插入、删除和复制操作,以及相关的实践示例。 ### 数组的插入操作 插入操作通常涉及到在数组的某个位置插入一个新元素,这可能需要将后续元素向后移动。在Java中,可以使用以下步骤实现...
线性表是计算机科学中一种基础的数据结构,它是由相同类型元素构成...在实际编程中,还应注意线性表的性能优化,例如,当数组操作不便时可以考虑使用动态数组或ArrayList,当需要高效插入删除时则可以考虑LinkedList。
环形队列是一种特殊形式的线性数据结构,它的特点是队尾和队首可以在数组的最后一个元素和第一个元素之间循环移动,从而实现高效的数据插入和删除操作。在Java中实现环形队列,通常会使用数组或链表作为底层数据容器...
在这个主题中,我们将深入探讨Java中队列的实现,包括顺序队列(SqQueueCycle)和链队列(LinkQueue)。 1. **队列的基本概念** 队列是一种线性数据结构,遵循“先进先出”(FIFO,First In First Out)原则。它...
本教程主要探讨的是如何在Java编程语言中实现单链表的基本操作,特别是如何获取链表的长度。下面我们将深入讨论相关知识点。 首先,我们需要理解单链表的概念。单链表是由一系列节点构成的,每个节点包含两部分:...
【JAVA数组学习教程】 在Java编程中,数组是一种基础且重要的数据结构...在实际编程中,根据需求选择合适的数据结构,例如链表、队列或栈,以及何时使用数组,何时使用集合类,都是提高程序效率和可维护性的重要决策。
数组可以作为这些数据结构的基础实现,如用数组模拟链表、实现队列的FIFO(先进先出)和栈的LIFO(后进先出)特性。 通过学习和实践上述知识点,对于Java算法题中的数组问题,你将能够游刃有余地进行解答。不断练习...
- Java中的`java.util.List`接口提供了多种实现,如`ArrayList`(基于数组实现,快速访问,慢速插入/删除)和`LinkedList`(基于链表实现,快速插入/删除,慢速访问)。 - 列表操作包括`add()`(在指定位置添加...
链表的基本操作包括插入、删除、查找等,这些操作可以通过定义在链表类中的方法来实现。下面是一些关键方法的介绍: - **`deleteAll()`**:清空整个链表,重置所有控制变量。 - **`reset()`**:将`Pointer`设置为`...
Java数组是程序设计中基础且重要的概念,它允许我们存储同一类型的多个数据项在一个单一的结构中。在Java中,数组是一种对象,可以容纳固定大小的同类型元素序列。了解和掌握Java数组的相关知识点对于任何Java程序员...
LinkedList实现了List接口,基于双向链表,插入和删除操作更快;HashSet实现了Set接口,不允许重复元素,内部使用哈希表实现;HashMap是键值对的集合,提供快速的查找和存储。 4. 增删改查:集合提供了丰富的API,如...
本文将探讨如何在Java中实现链表的去重与合并,特别关注有序链表的操作。 首先,我们来理解链表的基本概念。链表不同于数组,它的元素不是连续存储的,而是由一系列节点构成,每个节点包含数据以及指向下一个节点的...
Java中可以使用数组或链表来实现栈。栈的操作包括压栈、出栈、获取栈顶元素等。压栈可以使用push方法,该方法将元素添加到栈顶。出栈可以使用pop方法,该方法将栈顶元素删除。获取栈顶元素可以使用peek方法,该方法...
2. 无数组越界问题:与数组实现的队列相比,链表在插入和删除时无需考虑索引范围。 ### 链表队列的基本操作 - **Enqueue(入队)**:在队尾插入新元素。在链表中,这意味着创建一个新节点,设置其数据为要插入的...
在这个名为"单向链表实现的叫号程序"的案例中,我们可以通过分析`CallNum.java`文件来理解如何利用单向链表来实现一个简单的财务叫号系统。 首先,单向链表不像数组那样有一个连续的内存空间,它的每个元素(节点)...
在Java中,数组实现的队列可能会遇到“假溢出”的问题,即数组未满但看起来已满,因为head和tail重合了。解决这个问题的一种方法是使用环形数组,使得tail可以再次回到数组的起点。 链式队列则是通过链表来实现,每...
在环形数组队列中,当进行插入和删除操作时,我们可以通过简单的数学运算快速定位下一个插入或删除的位置,从而实现常数时间复杂度的插入和删除。 然而,对于链表实现的队列,虽然在队头删除元素是直接的,但要在...