线性表之顺序存储结构
第三章
线性表:零个或多个数据元素的有限序列。
若将线性表标记为(a1,a2,...ai-1,ai,ai+1,...,an),
当i=1,2,...n-1时,ai有且仅有一个直接后继,
当i=2,3,...,n时,ai有且仅有一个直接前驱。
线性表的抽象数据类型:
《大话数据结构》中是C语言版,这里是java版的。
基本操作:
1)线性表的制空操作: clear()
2)线性表判空操作: isEmpry()
3)求线性表的长度: length()
4)取元素操作: get(i)
5)插入操作: insert(i,x)
6)删除操作: remove(i)
7)查找操作: indexOf(x)
8)输出操作: display()
Java接口描述
public interface IList {public void clear();public boolean isEmpty();public int length();public Object get(int i);public void insert(int i,Object x);public void remove(int i);public int indexOf(Object x);public void display(); }
可继续参考:http://blog.csdn.net/sdliujiangbo/article/details/8068570
例子:A并B代码:
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;public class AandB {public static void main(String[] args) {// TODO Auto-generated method stubList<Integer> A = new ArrayList<Integer>(Arrays.asList(3,5,8,11));List<Integer> B = new ArrayList<Integer>(Arrays.asList(2,6,8,9,11,15,20));System.out.println("集合A:"+A); System.out.println("集合B:"+B); List<Integer> tmp = new ArrayList<Integer>(B);tmp.removeAll(A);System.out.println("集合B-A:"+tmp); List<Integer> result = new ArrayList<Integer>(A);result.addAll(tmp);System.out.println("集合B-A+A(去掉重复值):"+result);A.addAll(B);Collections.sort(A);System.out.println("A+B(保留重复值按序排列):"+A);} }
View Code
线性表的顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素。
顺序存储结构需要三个属性:
1)存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
2)线性表的最大存储容量:数组长度MaxSize.
3)线性表的当前长度:length.
注意区别:数组长度&&线性表长度
数组长度:存放线性表的存储空间的长度,存储分配后这个量一般不变的。
线性表长度:线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。
在任意时刻,线性表的长度应该小于等于数组的长度。
地址计算方法:
假设每个数据元素占用c个存储单元,那么线性表中第i+1个数据元素的存储位置和第i个数据元素的存储位置满足下列关系。(LOC表示获得存储位置的函数)
LOC(ai+1)=LOC(ai)+c
所以对于第i个数据元素ai的存储位置可以由ai推算出:
LOC(ai)=LOC(a1)+(i-1)*c
顺序结构的插入与删除
1、获得元素的操作
2、插入操作
插入算法的思路:
1)如果插入位置不合理,抛出异常;
2)如果线性表长度大于等于数组长度,则抛出异常或动态增加容量;
3)从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
4)将要插入元素填入位置i处;
5)表长加1.
实现代码:
public boolean insertElem(int i, T t) { if(length == MAXSIZE) { //线性表已经满了 System.out.println("该线性表已经满了"); return false; } if(i < 1 || i > MAXSIZE) { //插入位置不在范围内 System.out.println("该位置不合法"); return false; } if(i < length) { //插入位置不在表尾 for(int j = length; j >= i; j--) { //将要插入位置后数据元素向后移动一位 data[j] = data[j - 1]; } } data[i - 1] = t; //插入新元素 length++; //线性表长度增加 return true; }
View Code
3、删除元素
删除算法的思路:
1)如果删除位置不合理,抛出异常;
2)取出删除元素;
3)从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;
4)表长减1.
//删除元素 public T deleteElem(int i) { if(length == 0) { //"线性表为空" System.out.println("线性表为空"); return null; } if(i < 1 || i > length) { //删除位置不在范围内 System.out.println("该位置不合法"); return null; } T t = data[i -1]; for(int j = (i - 1); j <= (length - 1); j++) { data[j] = data[j+1]; } length--;//线性表长度减少 return t; }
删除操作代码
线性表的顺序存储结构,在存,取数据时间复杂度都是O(1)
而插入或删除时,时间复杂度都是O(n)。
线性表顺序存储结构的优缺点:
优点:
·无须为表示表中元素之间的逻辑关系而增加额外的存储空间
·可以快速地存取表中任意位置的元素。
缺点:
·插入和删除操作需要移动大量元素
·当线性表长度变化大时,难以确定存储空间的容量
·造成存储空间的”碎片“
java数据结构之线性表代码实现:http://blog.csdn.net/yaerfeng/article/details/38293401
线性表的顺序存储结构(java版):http://hjj20040849.iteye.com/blog/1816838
转载于:https://www.cnblogs.com/cailingsunny/p/4556042.html
线性表之顺序存储结构相关推荐
- 数据结构和算法:(3)3.1线性表的顺序存储结构
-----------------------1.线性表基础操作------------------------ 线性表:(List)由零个或多个数据元素组成的有限序列. 首先他是一个序列,元素之间是 ...
- C和C++线性表的顺序存储结构
C和C++线性表的顺序存储结构 基本概念 设计与实现 优点和缺点 基本概念 设计与实现 插入元素算法 判断线性表是否合法 判断插入位置是否合法 把最后一个元素到插入位置的元素后移一个位置 将新元素插入 ...
- 《数据结构》c语言版学习笔记——线性表的顺序存储结构
线性表的顺序存储结构 第一章 线性表的顺序存储结构 文章目录 线性表的顺序存储结构 前言 一.顺序存储结构的建立 1.条件 2.代码 二.顺序存储结构的获得元素 1.条件 2.代码 三.顺序存储结构的 ...
- 线性表的顺序存储结构之顺序表类的实现_Java
在上一篇博文--线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构--顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...
- 数据结构开发(3):线性表的顺序存储结构
0.目录 1.线性表的本质和操作 2.线性表的顺序存储结构 3.顺序存储结构的抽象实现和具体实现 3.1 SeqList 3.2 StaticList 和 DynamicList 4.顺序存储线性表的 ...
- 线性表之顺序存储结构相关算法学习
作为一名准备干一辈子的程序员,学习算法还是很有必要的.所以从基础开始了.学习教材 是大话数据结构. 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素.代码 参照教材 采用c ...
- 线性表:2.线性表的顺序存储结构--顺序表及C语言实现
逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为 线性表的顺序存储结构 . 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中, ...
- 数据结构之线性表之顺序存储结构(3)
1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数 ...
- 线性表的顺序存储结构及基本操作
学习书籍<大话数据结构>,自学完后,总结一下,以后也好复习 ,欢迎互相交流. 线性表的基本操作功能如下: InitList(*L): 初始化操作,建立一个空的线性表L L ...
最新文章
- python fun
- vivadohlsdsp_Vivado HLS学习笔记
- vmware虚拟机不识别usb设备
- 深度学习之生成对抗网络(1)博弈学习实例
- arcore_如何使用ARCore和Android Studio构建增强现实Android应用
- oracle 会话 lock,相克军_Oracle体系_随堂笔记014-锁 latch,lock
- php返回上一层的函数6,[PHP]实用函数6第1/2页
- 137_Power BI 自定义矩阵复刻Beyondsoft Calendar
- HTML5学习笔记---Html5简单理解,发展情况...
- android 多线程类,Android 多线程处理之多线程用法大集合
- Codevs 1205 单词反转(Vector以及如何输出string)
- YGC 问题排查,又涨姿势了!
- error: Failed dependencies: 	perl(Data::Dumper) is needed by MySQL-server-5.6.46-1.el7.x8
- Hadoop相关核心配置文件说明
- 国家二级计算机考试大纲,计算机国家二级考试大纲.doc
- Android校园购物app案例(javaweb服务端)
- WorkPlus 赋能数字政府迈入发展新阶段
- srsLTE 源码分析 UE_07 PLMN选择
- APS入门7-数字化车间智能排产调度实战
- 12个最常用的正则表达式,帮助你解决50%的问题
热门文章
- 将list集合中按照某个字段排序(从大到小),然后将list中的对象倒序
- Maven详解及相关操作
- mvc razor html.list,NetCore Web应用开发-HTML,C#,Razor补充
- 31岁了学python还是arm_学嵌入式的,学完了51单片机,下一步呢,是学stm32还是学arm呢.有些迷茫还有Linux等。怎么一步步学好...
- C#记事本的简单开发
- Redis数据库 | 快速入门 | 自学笔记
- w3c html.css,W3C教程(6):W3C CSS 活动
- 使命召唤为啥显示新服务器玩家,《使命召唤8》建立服务器和加入自己、别人服务器方法...
- lua_shared_dict的incr方法
- DButils入门及结果处理器选择