在学习数据结构的过程中,了解到:
顺序存储:插入和删除的平均耗时(n-1)/2,所以时间复杂度是O(n);而查询操作的平均耗时 1,所以时间复杂度是O(1);
链式存储:插入和删除操作:第一次操作,不知道i的位置,插入和删除操作的平均耗时(n-1)/2,给顺序存储相比没有什么优势,但是如果一次插入多条记录,那么由于知道了i的位置,后 面的插入所需要的时间就是1,那么链式存储的优势就显现出来了,所以对于插入和删除数据越频 繁的操作,链式存储的效率优势就越明显。查询操作:平均耗时(n-1)/2,所以时间复杂度是O(n);
而Java中ArryList就是顺序存储,LinkedList就是双链式存储。
为了更直观的观察两种存储方式之间的区别,特举例进行说明:
package ArrayListVSLinkedList;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
/**
* Created by IntelliJ IDEA.
* User: luhba
* Date: 13-7-6
* Time: 下午7:06
* To change this template use File | Settings | File Templates.
*/
public class ArrayListVSLinkedList
{
public static void ArrayListTest(long num)
{
ArrayList list = new ArrayList() ;
long berforeTime= new Date().getTime();
for(int i=0;i<num;i++)
{
list.add(i,i);
}
long afterTime = new Date().getTime();
System.err.println("The process ArrayListTest used a total time is "+(afterTime-berforeTime) +" millisecondes !" );
}
public static void linkedList(long num)
{
LinkedList list = new LinkedList();
long berforeTime= new Date().getTime();
for(int i=0;i<num;i++)
{
list.add(i,i);
}
long afterTime = new Date().getTime();
System.err.println("The process linkedList used a total time is "+(afterTime-berforeTime) +" millisecondes !" );
}
public static void main(String[] args)
{
ArrayListVSLinkedList.ArrayListTest(100000);
ArrayListVSLinkedList.linkedList(100000);
}
}
执行的结果是:
The process ArrayListTest used a total time is 31 millisecondes !
The process linkedList used a total time is 32 millisecondes !
这个是为什么呢?顺序存储插入的速度竟然比链式存储的还要快?
答:这个例子是顺序存储的最理想的方式,不用向后移动一个element,所以速度相当。那么再举一个差别最大的例子:
package ArrayListVSLinkedList;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
/**
* Created by IntelliJ IDEA.
* User: luhba
* Date: 13-7-6
* Time: 下午7:06
* To change this template use File | Settings | File Templates.
*/
public class ArrayListVSLinkedList
{
public static void ArrayListTest(long num)
{
ArrayList list = new ArrayList() ;
long berforeTime= new Date().getTime();
for(int i=0;i<num;i++)
{
list.add(0,i);
}
long afterTime = new Date().getTime();
System.err.println("The process ArrayListTest used a total time is "+(afterTime-berforeTime) +" millisecondes !" );
}
public static void linkedList(long num)
{
LinkedList list = new LinkedList();
long berforeTime= new Date().getTime();
for(int i=0;i<num;i++)
{
list.add(0,i);
}
long afterTime = new Date().getTime();
System.err.println("The process linkedList used a total time is "+(afterTime-berforeTime) +" millisecondes !" );
}
public static void main(String[] args)
{
ArrayListVSLinkedList.ArrayListTest(100000);
ArrayListVSLinkedList.linkedList(100000);
}
}
执行的结果是:
The process ArrayListTest used a total time is 5468 millisecondes !
The process linkedList used a total time is 47 millisecondes !
差距太大了……,终于知道顺序存储与链式存储之间的差距了。
分享到:
相关推荐
数据结构是计算机科学中的核心概念,它涉及到如何高效地组织和操作数据。...总的来说,数据结构的学习是提升编程能力的关键,熟练掌握栈的顺序存储和链式存储将有助于解决复杂的问题,并优化算法效率。
顺序表和链式表是两种最基本且广泛使用的线性数据结构,它们在实际编程中有着广泛的应用,尤其是在处理大量数据时。 首先,我们来理解顺序表。顺序表是一种在内存中连续存储元素的数据结构,它的特点是可以通过索...
数据结构线性表操作的一个实验: 实验要求 顺序和链式存储的线性表的创建、获取元素、插入和删除元素等基本操作的实现。 题目要求: 输入:一组整型数据A,一组...要求:A和B使用两种存储方式:顺序存储和链式存储。
数据结构是计算机科学中的核心概念,它涉及到如何高效地存储和组织数据,以便进行各种操作。在本主题中,我们将深入探讨两种常见的队列类型:顺序队列和链式队列,以及它们在实际应用中的作用。 顺序队列,也称为...
参考资料:《数据结构》(C语言版)严蔚敏&&吴伟民&&米宁著 要求选用顺序存储结构和二叉链表存储结构实现抽象数据类型二叉树的基本操作。有个亮点是利用字符在dos界面显示二叉树的结构形态。 里面包含了完整的源程序和...
在数据结构实验报告中,线性表的存储结构被分为两大类:顺序存储结构和链式存储结构。 顺序存储结构(Sequential Storage Structure)是将线性表中的元素按顺序存储在一个连续的内存空间中。线性表的顺序存储结构...
### c++数据结构---链式栈 #### 概述 链式栈是栈的一种实现方式,它使用链表作为存储结构。与数组实现的顺序栈相比,链式栈在内存分配上更加灵活,无需预分配固定大小的空间。本文将详细介绍如何在VS2010环境下...
本资源“队列顺序存储&链式存储.rar”提供了浙江大学在中国大学MOOC上《数据结构》课程中关于队列实现的源代码,主要包含两种存储方式:顺序存储和链式存储。 队列是一种先进先出(First In First Out, FIFO)的...
链式表则是动态的数据结构,它的每个元素(节点)包含两部分:数据域和指针域,指针域指向下一个元素的地址。链式表不强制元素在内存中的连续性,因此插入和删除操作通常只需要改变少量的指针,时间复杂度可以是O(1)...
总的来说,这个程序涵盖了数据结构基础中的关键概念,包括线性表的顺序存储和链式存储,以及基本的排序算法——冒泡排序。同时,它还展示了如何通过编程实现对数据的基本操作,如求和和计数,这些都是编程中常见的...
学习链式存储是理解高级数据结构和算法的关键,如栈、队列、哈希表和图等。掌握这些操作对于进行高效的编程至关重要,特别是在处理大量数据或需要动态调整数据结构的场景下。通过模仿和实践这些代码,初学者可以更好...
(6)顺序存储、非顺序存储:数据结构可以采用顺序存储和非顺序存储两种方式,顺序存储是指按照某种顺序存储数据,而非顺序存储是指随机存储数据。 (7)一对一、一对多、多对多:数据对象之间的关系可以是一对一、...
根据给定文件的信息,我们可以详细地探讨一下线性表的顺序存储与链式存储这两种基本的数据结构实现方式。 ### 线性表的顺序存储 #### 结构定义 线性表的顺序存储指的是将线性表中的元素按照其在表中的逻辑顺序依次...
数据结构顺序存储 顺序存储是一种常见的数据结构存储方式,特别是在C++编程中。顺序存储的基本思想是将数据元素存储在一个数组中,每个元素占据固定大小的空间。这种存储方式可以实现插入、删除和查找等操作。 在...
在本主题中,我们将深入探讨线性表的两种主要存储结构:顺序存储结构和链式存储结构,以及在这两种结构上实现的基本操作。同时,我们还会涉及栈这种特殊类型的线性表及其顺序和链式存储结构。 一、线性表的顺序存储...
在链式存储中,每个元素(节点)包含数据和指向下一个元素的指针,这种结构允许动态地添加或删除元素,而不必预先确定数据结构的大小。 对于图的链式存储,有两种常见的实现方式:邻接矩阵和邻接表。 1. **邻接...
相比于顺序存储结构(如数组),链式队列在插入和删除操作上具有更大的灵活性,因为无需预先分配固定大小的空间,而是根据需要动态扩展或收缩。 在实现链式队列的过程中,我们通常需要设计一组API(应用程序接口)...
1. 栈的顺序存储结构: * 顺序栈的定义:使用数组来存储栈元素,使用top变量来记录栈顶的位置。 * 顺序栈的操作:包括入栈、出栈、输出操作。在入栈时需要判断栈是否满了,否则出现空间溢出;在出栈和读取栈顶时...