线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像。通常,称这种存储结构的线性表为顺序表。特点是:逻辑上相邻的数据元素,其物理次序上也是相邻的。

顺序表的存储示意图

假设线性表的每个元素与占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储起始位置。则线性表中地i+1个数据元素的存储位置LOC(a i+1)和第i个数据元素的存储位置LOC(a i)之间有如下关系:

通常的,线性表的地i个数据元素ai的存储位置为:

每一个数据元素的存储位置都和线性表中的起始位置相差一个常数,这个常熟和数据元素在线性表中的位序成正比。所以,只要确定了存储线性表的起始位置,线性表中任意数据元素都可以随机存取。所以,线性表的顺序存储结构是一种随机存取的存储结构。

实现顺序表(java)

首先建立一个List接口,用来定义顺序表的一些操作

package 线性表的顺序结构;

public interface List {

//返回顺序表的大小

public int size();

//判断线性表中是否为空

public boolean isEmpty();

//向线性表中插入数据元素

public boolean insert(int index, Object obj) throws Exception;

//删除线性表中指定元素

public boolean delete(int index) throws Exception;

//获取线性表的指定元素

public Object getElem(int index);

//判断数据元素是否在链表中

public int searchList(Object obj);

//销毁线性表

public void destroyList();

//将线性表置为空表

public void clearList();

//返回线性表中第一个值与obj相同的元素在线性表中的位置

public Object locateElem(Object obj);

}

实现顺序表的操作方法:

package 线性表的顺序结构;

public class SqList implements List {

//默认的顺序表的最大长度

final int DefaultSizs = 10;

//顺序表的长度最大值

int MaxSize;

//顺序表的当前长度

int size;

//用于存储顺序表的数据元素

Object[] listArray;

public SqList() {

this.init(this.DefaultSizs);

}

public SqList(int size) {

this.init(size);

}

/**

* 初始化顺序表

* @param size

*/

public void init(int size) {

this.MaxSize = size;

this.size = 0;

this.listArray = new Object[size];

}

@Override

/**

* 获得顺序表的长度

*/

public int size() {

// TODO Auto-generated method stub

return size;

}

@Override

/**

* 判断顺便表是否为空

*/

public boolean isEmpty() {

// TODO Auto-generated method stub

return size == 0;

}

@Override

/**

* 在指定位置插入数据元素到顺序表

*/

public boolean insert(int index, Object obj) throws Exception {

// TODO Auto-generated method stub

if(index < 1 || index > size + 1) return false;

if(size >= MaxSize) return false;

for(int j = size - 1; j >= index; j--) {

this.listArray[j + 1] = this.listArray[j];

}

this.listArray[index - 1] = obj;

++size;

return true;

}

@Override

/**

* 删除顺序表中指定位置的数据元素

*/

public boolean delete(int index) throws Exception {

// TODO Auto-generated method stub

if(index < 1 || index > size) return false;

for(int j = index; j <= size - 1; j++) {

this.listArray[j - 1] = this.listArray[j];

}

--size;

return true;

}

@Override

/**

* 获得指定数据元素

*/

public Object getElem(int index) {

// TODO Auto-generated method stub

if(index < 1 || index > size) return null;

return this.listArray[index - 1];

}

@Override

/**

* 查找数据元素是否在顺序表中

* 若在表中,返回该数据元素在顺序表的序号

*/

public int searchList(Object obj) {

// TODO Auto-generated method stub

for(int j = 0; j < size; j++) {

if(this.listArray[j] == obj) return j + 1;

}

return 0;

}

public static void main(String[] args) {

SqList list = new SqList(2);

try {

list.insert(1, 100);

list.insert(2, 50);

list.insert(3, 20);

list.insert(4, 90);

for (int i = 1; i <= list.size; i++) {

System.out.println("第" + i + "个数为" + list.getElem(i));

}

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

/**

* 销毁顺序表

*/

public void destroyList() {

// TODO Auto-generated method stub

this.listArray = null;

this.size = 0;

}

@Override

/**

* 清空顺序表

*/

public void clearList() {

// TODO Auto-generated method stub

if(this.listArray != null && this.listArray.length != 0) {

this.listArray = new Object[this.MaxSize];

}

}

@Override

public Object locateElem(Object obj) {

// TODO Auto-generated method stub

for(int j = 0; j < size; j++) {

if(this.listArray[j] == obj) return j + 1;

}

return null;

}

}

但是在上面的代码中我们和容易的看到一个缺点,那就是存放数据元素的数组是定长的,即,上面实现的顺序表是静态顺序表。那么当数据量很大的时候,我们需要进行扩容,否则无法存储下所有数据。

修改SqList类,增加一个判断是否需要扩容的方法:

//进行扩容

public void seqListDempty() {

if(size == MaxSize) {

MaxSize *= 2;

Object[] newArr = new Object[MaxSize];

for (int i = 0; i < size; i++) {

newArr[i] = this.listArray[i];

}

this.listArray = newArr;

}

}

同时修改insert()方法:

@Override

/**

* 在指定位置插入数据元素到顺序表

*/

public boolean insert(int index, Object obj) throws Exception {

// TODO Auto-generated method stub

if(index < 1 || index > size + 1) return false;

if(size >= MaxSize) seqListDempty();

for(int j = size - 1; j >= index; j--) {

this.listArray[j + 1] = this.listArray[j];

}

this.listArray[index - 1] = obj;

++size;

return true;

}

这样我们就实现了动态顺序表。

java 线性表的表示和实现_线性表中顺序表的的理解和实现(java)相关推荐

  1. 在mysql中删除表正确的是什么_在MySQL中删除表的操作教程

    丢弃现有MySQL的表是很容易的.但是需要非常小心,删除任何现有的一个表后将无法恢复,因为数据丢失. 语法: 下面是通用的SQL语法丢弃(删除)MySQL表: DROP TABLE table_nam ...

  2. 顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换

    顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换 作者: 冯向阳 时间限制: 1S 章节: DS:线性表 问题描述 : 目的:使用自行设计的顺序表ADT或STL中的ve ...

  3. 顺序表的实现(附带寻找中间数函数、顺序表快速排序函数)

    笔者近日在学习数据结构(基于严蔚敏版数据结构教材),在学习过程中也出现了不少问题和解决问题之后的一些感悟. 顺序表又称顺序存储结构,是线性表的一种,专门存储逻辑关系为"一对一"的数 ...

  4. python代码大全表解释-Python中顺序表的实现简单代码分享

    顺序表python版的实现(部分功能未实现) 结果展示: 代码示例: #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object ...

  5. c语言创建一个顺序表主函数,用C语言来创建一个顺序表(数据结构部分)

    顺序表的创建需要用到结构体,构造一个结构体来存储数据,顺序表申请的内存是连续的.创建顺序表的思路按照数据的"增删改查来进行编写"下列是顺序表的创建代码 创建头文件: sqlist. ...

  6. java 获取oracle表结构_获取Oracle中所有表的列表?

    回答(19) 2 years ago 我们可以从以下查询获取所有表格,包括列详细信息: SELECT * FROM user_tab_columns; 2 years ago 使用sqlplus更好地 ...

  7. 用计算机计算线性卷积的基本规则,实验三_线性卷积与圆周卷积的计算.doc

    实验三_线性卷积与圆周卷积的计算 电信类课程试验报告 学 院:基础信息工程系 别:电子信息工程课程名称:数字信号处理姓 名:学 号:日 期:实验三实验名称:线性卷积与圆周卷积的计算一.实验目的 (1) ...

  8. mysql 每条记录大小_计算数据库中各个表的数据量和每行记录所占用空间

    很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tablespaceinfo ( nameinfo VARCHAR(500) , row ...

  9. 线性表中顺序表基本运算的实现---数据结构(C)

    线性表的顺序存储结构,顺序表基本运算的实现 #include<stdio.h> //输入输出头文件 #include<stdlib.h> //malloc和free都在这个头文 ...

最新文章

  1. 一个后台开发工程师的“窦娥冤”!
  2. 使用C#实现网站用户登录 (转)
  3. HTML+CSS实现旋转太极图动态效果
  4. Learning Perl chapter 4 练习题
  5. .NET Core微服务 权限系统+工作流(二)工作流系统
  6. STM32F0使用LL库实现DMA方式AD采集
  7. 6-7 使用函数输出水仙花数_学习C语言居然对printf函数不理解???
  8. 这才是程序员春运抢票的正确姿势!
  9. 21.IO-multiplexing方式实现Netcat
  10. python版本可执行可嵌入_Python程序打包成exe可执行文件的方法探究
  11. LODOP打印当前日期时间的方法
  12. 小学计算机应用到英语课教案,人教版小学英语三年级上册unit one hello!文具单词教学信息技术应用成果(教学设计方案).doc...
  13. python中image库_python Image库使用入门
  14. win7不休眠方式设置
  15. 关于以太网没有有效的ip配置问题解决方法
  16. CS5801 HDMI转4K 4lane_DP/eDP方案
  17. 认认真真推荐几个优质公众号
  18. stm32Cubemx实用篇(三):DAC电压输出和ADC电压检测以及内部温度传感器测温
  19. 使用MySQL,请用好 JSON 这张牌!
  20. 革命性新疗法后 第三例艾滋病治愈病例可能出现了!

热门文章

  1. 【渝粤题库】陕西师范大学400011 思想政治教育学科教学论 作业(专升本)
  2. 【渝粤题库】国家开放大学2021春2219房屋构造与维护管理题目
  3. Loadruner压数据库oracle,LoadRunner连接Oracle数据库(转)
  4. 计算机怎么录制视频教程,怎么录制视频教程?查看电脑具体录屏方法
  5. python用psf函数_python学习之-类的内置函数
  6. 信号与系统 chapter4 单位脉冲与单位阶跃序列
  7. C++一天一个程序(五)
  8. python声明编码为gbk_Python字符串编码坑彻底详细解决
  9. [HNOI2019]校园旅行
  10. 共享文件夹不能访问的问题解决