学习一门语言我们基本都会用到数组和链表,那么这两种结构肯定是有各自的优缺点的,俗话说没有对比就没有伤害哈(),不管是一个什么东西都 是如此,接下来我就来分析分析他们各自的特点(没有分析到位的话不要见怪哈,请尽情下评论区留言,一起交流交流)
数组:我们知道不管是一维数组还是二维数组培训它们在内存里面的地址都 必须是连续的
优点:既然地址是连续的那么必然给我查找数据提供了极大的方便,让我们很容易的就能根据下标找到你需要的数据,提高了我们的效率
缺点:我们刚刚在它的优点中只讲到提高我们查找数据的效率,因为毕竟我们对数组的运用不只是查找数据,还有增加数据,插入数据,删除数据等一些操作;由于数组的特殊性,使得我们在进行这些操作的时候不能对其进行直接操作,还要重新开辟一个新的数组并使其长度增加来存放数据,这样的工作模式给我们带来了很大的不便,影响了效率
链表:链表的地址不是连续的,可以随意存放,删除等操作,通过引用来关联数据,链表可以分为单向的和双向的
优点:链表和数组的差别就在于链表在对数据进行插入和删除的时候可以不用开辟新的空间,只需要找到需要操作的结点就可以了,大大提高了人我们的效率
缺点:数组利于了查找,那链表就不利于查找咯
下面是我们上课的时候做的关于一个双向链表的练习
/** * 双向链表 * @author Administrator * * @param <E> */ public class MyLinkList<E> { public Node<E>head=null; public Node<E>last=null; public int num=0; //增加数据 public void add(E e){ //创建一个新结点 Node<E> node=new Node<E>(e); //判断链表中是否有结点,如果有就将node作为链表的最后一个结点 if(last!=null){ last.next=node; node.front=last; last=node; }//如果没 有那么node既是头结点也是尾结点 else{ head=node; last=node; } num++; } //插入数据 public void insert(int index,E e){ //创建一个新的结点 Node<E> node=new Node<E>(e); //找到index的结点位置 Node<E> n1=getNode(index); //找到n1的前一个结点 Node<E> n2=n1.front; n2.next=node; node.front=n2; node.next=n1; n1.front=node; num++; } //根据下标删除数据 public void delete(int index){ Node<E> node=getNode(index); Node<E> n1=node.front; Node<E> n2=node.next; n1.next=n2; n2.front=n1; num--; } //根据内容删除数据 public void delete(E e){ int index=getIndex(e); delete(index); } //修改数据 public void updata(int index, E e){ Node<E> node=getNode(index); node.data=e; } //取出数据 public E get(int index){ Node<E> node=getNode(index);//创建结点调用根据下标找结点的函数 return node.data; } //根据内容确定下标 private int getIndex(E e){ int index=-1; Node<E> n=head; while(n!=null){ index++; //判断n所指向的结点的值是否和我们要找的那个值相等,相等退出,否则将n指向下一个结点 if(n.data.equals(e)){ break; } n=n.next; } return index;//返回找到的结点的下标 } //根据下标确定结点 private Node<E> getNode(int index){ //定义一个变量为一个不存在的值 int t=-1; //判断index是否在结点数据内 if(index>=0&&index<num){ //定义一个n指向头结点 Node<E> n=head; //判断n所指向的结点的值是否为空 while(n!=null){ t++; //判断t是否和我们要查找的下标相等,如果相等就说明找到了我们要找的结点,就返回结点n //否则就将n指向它的下一个结点 if(t==index){ break; } n=n.next; } return n; } else{ // 抛出异常 throw new IndexOutOfBoundsException("下标超出边界!index:" + index + ",size:" + num); } } //结点的个数 public int size(){ return num; } } //内部的结点类,主要是为MyLinkList服务 class Node<E> { //链表的三大基本属性 //结点的数据 E data; //对下一个结点的引用 Node<E> next; //对上一个结点的引用 Node<E> front; //创建结点对象的时候必须指定数据 public Node(E e){ data=e; } }
主函数
public static void main(String[] args) { MyLinkList<String> list = new MyLinkList<String>(); //增加数据 list.add("aa"); list.add("bb"); list.add("cc"); list.add("dd"); list.add("ee"); //插入数据 list.insert(2,"nana"); //修改数据 list.updata(1, "tx"); //根据下标删除数据 list.delete(3); //根据内容删除数据 list.delete("tx"); //输出 for(int i=0;i<list.size();i++){ String s=list.get(i); System.out.println(s); } }
相关推荐
数组和链表的使用场景 在计算机科学中,数组和链表是两种基本的数据结构,它们都是线性表的实现方式,但它们有着不同的存储结构和访问方式,从而导致不同的使用场景。 数组是一种连续存储的数据结构,即在内存中...
在实际应用中,数组和链表有着不同的使用场景。数组适合静态存储,动态添加,内存为一连续的地址,查询较快,而链表适合动态存储,扩展性强,只能顺着指针的方向查询,速度较慢。 我们可以得出结论:数组大小固定,...
然而,数组和链表有着根本的区别,这些区别决定了它们在不同的场景下的应用。 数组 数组是一种连续存储的数据结构,即数组中的元素在内存中是连续存储的。这使得数组在查找数据时效率非常高,因为内存地址是连续的...
-数组和链表结构(Python)" Python列表是一个非常常用的数据结构,但是它究竟是数组还是链表实现的?在Python中,列表是使用链表结构实现的,但是在某些情况下,也可以使用数组结构来实现。那么,为什么Python列表...
数组和链表是两种基本且常用的数据结构,它们各有优缺点,适用于不同的场景。 数组是一种顺序存储结构,它在内存中占据一块连续的空间。数组的主要优点在于其随机访问的高效性,可以通过索引直接访问任意位置的元素...
与数组不同,链表中的元素不一定是连续存储的,这使得插入和删除操作更加灵活和高效。然而,由于链表中的元素不是直接通过索引访问的,因此访问特定元素通常需要从头节点开始逐个遍历,这可能导致效率较低。 #### ...
数组和链表是两种基本的数据结构,它们各自有其适用的场景和特点。在计算机科学中,选择合适的数据结构对于程序的效率和性能至关重要。 数组是一种线性数据结构,它在内存中以连续的方式存储元素。这意味着数组的...
本资源主要讲解了使用C语言实现堆栈的两种方法:使用数组和链表。堆栈是一种常用的数据结构,它可以用来实现递归算法、表达式求值、语法分析等。 第一种方法是使用数组实现堆栈。在这种方法中,我们需要定义一个...
数组、链表和集合的区别和应用场景以及堆和栈的区别 数组和集合的区别: 1. 数组的长度是固定的,而集合的长度是动态不固定的。 2. 数组的存储类型是单一的,同一个数组只能存储同一数据类型的数据,而集合可以...
数组适合于数据量固定、访问频率较高的场景,而链表则更适合于数据量动态变化较大、需要频繁插入和删除的场合。理解它们的区别有助于我们在实际开发中选择最合适的数据结构来解决问题。在选择合适的数据结构时,还...
Java 数组链表效率对比 Java 中的数组和链表是两种常用的数据结构,它们都可以用来存储和操作数据。然而,在实际开发中,选择合适的数据结构和遍历方式对程序的性能和效率有着非常重要的影响。下面我们将对 Java 中...
"go语言通过数组和链表的方式实现队列" 从给定的文件信息中,我们可以生成以下知识点: 1.队列的定义:队列是一种特殊的线性表,只能在队列的尾部添加元素,在队列的头部删除元素,先进先出(FIFO)。 2.go语言中...
下面是对PHP数组和链表之间区别的详细解释。 1. **逻辑结构** - **数组**:数组是一种线性数据结构,其所有元素在内存中是连续存储的。在PHP中,数组可以存储不同类型的数据,并且可以通过索引(下标)快速访问。...
在编程领域,数组和链表是两种基础但重要的数据结构,它们在实现各种系统和算法时发挥着关键作用。在这个“学生成绩管理系统”中,我们看到了如何利用这两种数据结构来存储和操作学生成绩。下面我们将深入探讨这两个...
数组和链表的区别和优缺点总结 数组和链表是两种基本的数据结构,它们在内存存储上的表现不一样,所以也有各自的特点。 数组的特点: * 数组是连续的内存区域,需要预留空间,在使用前要先申请占内存的大小,可能...
Java集合,HashMap底层实现和原理(1.7数组+链表与1.8+的数组+链表+红黑树) 在Java集合中,HashMap是一个常用的数据结构,它基于Map接口实现,元素以键值对的方式存储,并且允许使用null键和null值。由于key不允许...
"数据结构:数组和链表的区别以及各自的优缺点" 数据结构是计算机科学中研究的基本概念之一,数组和链表是两种最基本的数据结构形式。它们在计算机科学和其他相关领域中发挥着重要的作用。 数组是将元素在内存中...
这种差异会影响到数组和链表的使用场景。 2. 内存布局 数组在内存中是连续的,即数组的每个元素在内存中是相邻的。链表在内存中是不连续的,即链表的每个元素在内存中的地址是随机的。这也会影响到数组和链表的...
"数组和链表" 数组和链表是两种常见的线性数据结构,它们都是由具有相同类型的n(n≥0)个数据元素组成的有限序列。...数组和链表是两种常见的线性数据结构,它们各自的优缺点,选择哪种数据结构取决于具体的应用场景。
数组和链表是两种基本的数据结构,它们在存储和操作数据方面有着显著的区别。理解这些差异对于优化算法和设计高效的数据结构至关重要。 首先,数组是一种将同一类型的数据元素集合在一起的数据结构。每个元素都有一...