线性表的顺序存储及JAVA实现
来源:互联网 发布:领淘宝优惠券的app 编辑:程序博客网 时间:2024/05/22 00:53
线性表是线性结构的典型代表
线性表是一种最基本、最简单的数据结构,数据元素之间仅有单一的前驱和后继关系。线性表不仅具有广泛的应用,而且也是其他数据结构的基础。
线性表的定义
线性表是n个具有相同类型的数据元素的有限序列。数据元素的个数称为线性表的长度。长度等于零是称为空表。
线性表的数据元素具有抽象的数据类型,在设计具体的应用程序时,数据元素的抽象类型将被具体的数据类型所取代。
线性表的顺序存储结构及实现——顺序表
顺序表是用一段地址连续的存储单元依次存储线性表的数据元素。通常用一维数组来说实现顺序表,也就是把线性表中相邻的元素存储在数组中相邻的位置,从而导致了数据元素的序号和存放它的数组下表之间的一一对应。
用数组存储顺序表,就意味着要分配固定长度的数组空间,因此,必须确定数组的长度,即存放线性表的数组空间的长度。因为在线性表中可以经行插入操作,则数组的长度就要大于当前线性表的长度。数组的长度和线性表的长度不是同一概念。(数组的长度大于线性表的长度)
设顺序表的每个元素占用c个存储单元,则第i个元素的存储地址为:LOC(ai)=LOC(a1)+(i-1)*c;
顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址,计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为随机存取结构。
优点——随机存取,读取数据速度快。
缺点——增加、删除元素需要大量移动元素。表的容量难以确定。造成存储空间的碎片。数组要求占用连续的存储空间,即使存储单元数超过所需的数目,如果不连续也不能使用。
JAVA中的应用:ArrayList。
package data.LineList.SequenceList;import java.util.ArrayList;/** * 顺序表的实现 * @author zhouhai * */public class SeqList<E> { private Object [] data=null;//data,用来保存该线性表数据的数组 private int capacity;//线性表的容量,即数组的长度! private int current;//线性表包含元素的个数 /** * 初始化没有声明大小,则设置为10 */ SeqList(){ this(10); } /* * 初始化线性表,声明保存数据的数组的大小 * */ public SeqList(int initialSize) {// TODO Auto-generated constructor stub if(initialSize>=0){ this.capacity=initialSize; data=new Object[initialSize]; current=0; }else{ throw new RuntimeException("初始化数组长度不能小于零"+initialSize); } } /** * 在线性表的末尾加元素,在加入之前先确定线性表是否已经满了 */ public boolean addElement(E e){ ensureCapacity(); data[current]=e; ++current; return true; } /** * 检查存储数据的数组容量,如果数组已经满,则增加容量,否则不操作 */ public void ensureCapacity(){ int index; if(current==capacity){ capacity*=2;//将线性表的容量扩大两倍 Object [] newData=new Object[capacity]; //将原来数组中的元素复制到新数组中 for(int i=0;i<capacity/2;i++){ newData[i]=data[i]; } data=newData; } } /** * 返回下表为index的元素 */ public E get(int index){ validateIndex(index); return (E) data[index]; } /** * 在指定的位置插入元素 */ public void set(int index,E e){ validateIndex(index); } /** * 验证下标是否合法,非法是抛出异常 */ public void validateIndex(int index){ if(index<0||index>=current){ throw new RuntimeException("无效的下标:"+index); } } /** * 返回当前顺序表的大小 * @return */ public int getSize(){ return current; } /** * 在指定位置加入指定元素 * @param index 待插入的位置 * @param e 待插入的元素 */ public boolean insert(int index,E e){ validateIndex(index); ensureCapacity();//确保容量 //将 for(int temp=current;temp>index;temp--){ data[temp]=data[temp-1]; } data[index]=e; ++current; return true; } /** * 删除下表为index的元素 */ public boolean delete(int index){ validateIndex(index); for(int temp=index;temp<capacity-1;temp++){ data[temp]=data[temp+1]; } data[current-1]=null; current--; return true; } }
- 线性表的顺序存储及JAVA实现
- java实现线性表的顺序存储
- 线性表的Java实现--顺序存储
- 【线性表】顺序存储、链式存储的实现及操作
- 线性表的顺序存储及操作实现
- 线性表的顺序存储及操作实现
- 数据结构:线性表的顺序存储--Java实现
- 用Java实现线性表的顺序存储结构
- Java数据结构——线性表的顺序存储实现
- java实现数据结构中线性表的顺序存储
- 线性表顺序存储结构的具体实现过程--java
- java 实现线性表之顺序存储
- 线性表的顺序存储的实现
- 线性表的顺序存储实现
- 数组实现线性表的顺序存储
- 线性表的顺序存储实现
- 线性表的动态顺序存储实现
- C++实现顺序存储的线性表
- 编程之道--Book One -The Silent Void
- 登录跳转到自己想要的页面
- MySQL 针对 MyISAM 表锁的解决方案
- Leetcode: Remove Nth Node From End of List
- Java构造时成员初始化的陷阱
- 线性表的顺序存储及JAVA实现
- 编程之道--Book Two - The Ancient Masters
- Project Euler problem 66
- 【opencv&VS2008】关于cvFlip的那些事
- AT91SAM9G45 gpio驱动编程
- 和菜鸟一起学linux之本地git中心仓库建立
- 美国共180万公务员
- 编程之道--Book Three - Design
- 【wireshark】fedora 或者ubuntu 源码编译安装wireshark1.70