【线性表的顺序存储从结构】

指的是用一段连续的存储单元一次储存线性表的数据元素。

【线性表的顺序存储的结构代码 C语言版】

#define MAXSIZE 20               /*存储空间初始分配量*/
typedef int ElemType; /*ElemType类型依实际情况而定*/
typedef struct
{
Element data[MAXSIZE]; /*数组存储数据元素,最大值为MAXSIZE*/
int length; /*线性表当前长度为length*/
}SqlList;

【线性表的顺序存储结构需要的三个属性】

1.存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。

2.线性表的最大存储容量:数组长度MaxSize

3.线性表的当前长度:length

【数组长度和线性表长度的区别】

数组的长度:存放线性表的存储空间的长度,存储分配后这个量一般是不变的。

线性表的长度:线性表中的数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。

当然,任意时候线性表的长度是小于数组的长度的。

【地址的计算方法】

存储器中的每个存储单元都有自己的编号,这个编号称为地址。

由于每个数据元素,不管是什么类型,都需要占用一定的存储空间的,假设占用的是c个存储单元,那么线性表中第i+1个数据元US的存储位置和第i个数据元素的存储位置满足下列关系:(LOC表示获得存储位置的函数)

对于第i个数据元素ai的存储位置可以由a1推算出来:

【java描述顺序线性表】

【整体工程截图】

【线性顺序表抽象数据类型 JAVA接口 描述】

package com.Higgin.List;

public interface MyList<E> {
int size(); //返回线性表中的元素数量
boolean isEmpty(); //判断线性表是否为空
void clear(); //将线性表清空
E get(int index); //返回线性表的第index个元素
int indexOf(Object o); //在线性表中查找与给定元素o相等的元素,查找成功,则返回对应的序号;否则,返回-1表示失败
boolean add(E e); //向线性表的尾部添加指定的元素e
void add(int index,E element); //向线性表的指定位置第index处添加指定的元素
E remove(int index); //移除线性表的第index处的元素,返回删除的元素的值
}

【具体的实现类】

package com.Higgin.List;

public class MyArrayList<E> implements MyList{
private int size;
private Object[] elementData; /**
* 构造一个容量为initialCapacity的空顺序线性表
*/
public MyArrayList(int initialCapacity){
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);
this.elementData=new Object[initialCapacity];
} /**
* 返回线性表中的元素数量
*/
public int size() {
return size;
} /**
* 判断线性表是否为空
*/
public boolean isEmpty() {
return size==0;
} /**
* 将线性表清空
*/
public void clear() {
for(int i=0;i<size;i++){ //所有元素置为null
elementData[i]=null;
}
size=0; //线性表长度置为0
} /**
* 返回线性表的第index个元素
*/
public Object get(int index) {
if(index<0||index>=this.size){
throw new IndexOutOfBoundsException("Index: "+index+", Size: "+this.size);
}
return elementData[index];
}
/**
* 在线性表中查找与给定元素o相等的元素,查找成功,则返回对应的序号;否则,返回-1表示失败
*/
public int indexOf(Object o) {
if(o==null){
for(int i=0;i<size;i++){
if(elementData[i]==null){
return i;
}
}
}else{
for(int i=0;i<size;i++){
if(o.equals(elementData[i])){
return i;
}
}
}
return -1;
}
/**
* 向线性表的尾部添加指定的元素e
*/
public boolean add(Object e) {
add(size,e);
return true;
}
/**
* 向线性表的指定位置第index处添加指定的元素
*/
public void add(int index, Object element) {
if (index > size || index < 0) //当index不在范围内
throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);
if(index<size){ //若插入的位置不在表尾
for(int i=size;i>=index;i--){
elementData[i+1]=elementData[i];
}
}
elementData[index]=element;
size++;
}
/**
* 移除线性表的第index处的元素,返回删除的元素
*/
public E remove(int index) {
if(size==0){ //如果此时线性表为空
throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);
}
if (index >= size||index<0) //如果移除的位置超出范围
throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);
E oldValue=(E) elementData[index]; //存储被删除的值
if(index<size-1){ //如果删除的位置不是最后的位置
for(int i=index;i<size;i++){
elementData[i]=elementData[i+1];
}
}
elementData[size] = null; //表尾元素置为null
size--;
return oldValue;
}
}

【思路:关于 插入】

1.如果插入的位置不合理,抛出异常。

2.如果线性表长度大于等于数组的长度,抛出异常或动态增加容量。

3.从最后一个元素开始向前遍历到底index个位置,分别将他们向后移动1个位置(包括index位置)。

4.将要插入的元素填入位置index处。

5.表长size要加1。

【思路:关于删除】

1.如果表长度为0或删除的位置不合理,抛出异常。

2.取出要删除的元素。

3.从删除的元素的位置index处开始遍历到最后一个元素,分别将他们向前移动一个位置。

4.原先最后一个元素的位置要置为null。

5.表长size要减1。

【分析:线性表顺序存储结构的优缺点】

【优点】

1.无需为表中的元素之间的逻辑关系增加额外的存储空间(相对于链表)。

2.可以快速的取出表中任意位置的元素。

【缺点】

1.插入和删除操纵需要移动大量的元素,时间复杂度O(n)

2.当线性表长度变化较大时,难以确定存储空间的容量。

3.会造成存储空间“碎片”。

2.2_线性表的顺序存储结构_参考集合ArrayList的更多相关文章

  1. 线性表的顺序存储结构——java

    线性表的顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的元素.为了使用顺序结构实现线性表,程序通常会采用数组来保存线性中的元素,是一种随机存储的数据结构,适合随机访问.java中ArrayL ...

  2. C++编程练习(1)----“实现简单的线性表的顺序存储结构“

    线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素. 故可以用数组来实现顺序存储结构. 用C++编写的利用数组实现简单的读取.插入和删除功能的线性表. #include< ...

  3. 线性表的顺序存储结构之顺序表类的实现_Java

    在上一篇博文——线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构——顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...

  4. 数据结构4:顺序表(线性表的顺序存储结构)及C语言实现

    逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构. 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间 ...

  5. c数据结构 -- 线性表之 顺序存储结构 于 链式存储结构 (单链表)

    线性表 定义:线性表是具有相同特性的数据元素的一个有限序列 类型: 1:顺序存储结构 定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构 算法: #include <stdio. ...

  6. 线性表之顺序存储结构(C语言动态数组实现)

    线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...

  7. c语言数据结构之线性表的顺序存储结构

    线性表,即线性存储结构,将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构,简称线性表. 注意:使用线性表存储的数据,要求数据类型必须一致,线性表存储的数据,要么全不 ...

  8. 【Java】 大话数据结构(1) 线性表之顺序存储结构

     本文根据<大话数据结构>一书,实现了Java版的顺序存储结构. 顺序存储结构指的是用一段地址连续的存储单元一次存储线性表的数据元素,一般用一维数组来实现. 书中的线性表抽象数据类型定义如 ...

  9. 线性表 linear_list 顺序存储结构

    可以把线性表看作一串珠子 序列:指其中的元素是有序的 注意last和length变量的内在关系 注意:将元素所占的空间和表长合并为C语言的一个结构类型 静态分配的方式,分配给一个固定大小的存储空间之后 ...

随机推荐

  1. 第一个android程序所遇到问题

    1.工程package的命名空间与activity的命名空间不一致,导致setcontentview找不到layout文件 2.增加Button等控件后,Java.R中id必须在删除现有Java.R文 ...

  2. Linux--用SecureCRT来上传和下载文件

    SecureCRT下的文件传输协议有以下几种:ASCII.Xmodem.Ymodem.Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. Xmodem:这种古老的传输协议速度较慢,但由 ...

  3. 金蝶KIS 13.0专业版破解方法破解安装流程 金蝶KIS 13.0专业版安装流程

    金蝶KIS 13.0安装 1.先安装操作系统Windows server 2008 R2. 2.再安装SQL2008 R2. 3.再安装金蝶KIS 13.0专业版. 在安装时记住须要将系列号设置成为1 ...

  4. Upgrade Guide

    Upgrade Guide This guide will point out the key points to be aware of when upgrading to version 3. A ...

  5. jsp HTTP Status 405 - HTTP method GET is not supported by this URL

    package myservlet.control; import java.io.IOException; import java.io.PrintWriter; import javax.serv ...

  6. JAVA_JSON

    package cn.kjxy.JSON; import org.json.JSONArray; import org.json.JSONException; import org.json.JSON ...

  7. js 添加enter事件

    $(function () { document.onkeydown = function (e) { var ev = document.all ? window.event : e; ) { if ...

  8. 【itclx面向对象一】tcl基础语法:过程、作用域、以及itcl面向编程回顾

    学习熟悉编程的最好方法就是动手,有点面向编程思维的话,直接练习就可以.直接看demo 1.过程.作用域 #全局变量:过程外定义的变量#局部变量: 过程内部定义的变量 set a 100proc tes ...

  9. JDBC的几个步骤

    JDBC:JAVA访问数据库的解决方案.几个步骤:1.加载驱动类; 2.与数据库建立连接:         3.执行SQL语句   4.处理结果集 5.关闭连接1. 第一步:加载驱动类: 需要注意:不 ...

  10. CSS实现半透明的方法

    IE8不支持以前{filter:alpha(opacity=50);}的私有属性, 转而支持更规范的私有属性-ms-filter: “progid:DXImageTransform.Microsoft ...