1. 线性表的顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素。
2. Java实现线性表的顺序存储结构:
// 顺序存储结构
public class SequenceList {
private static final int DEFAULT_SIZE = 10; // 默认初始化数组大小
private int size; // 当前数组大小
private static Object[] array;
public SequenceList() {
init(DEFAULT_SIZE);
}
public SequenceList(int size) {
init(size);
}
// 初始化数组大小
public void init(int size) {
this.size = 0;
array = new Object[size];
}
public void add(int index, Object obj) {
checkSize(index);
if (size == array.length) {// 判断size如果等于length, 说明原数组装满了
Object[] newArray = new Object[array.length * 3 / 2 + 1];//创建一个更大的数组
System.arraycopy(array, 0, newArray, 0, array.length);//将原有数据复制到新数组
array = newArray; // array指向新数组
}
for (int j = size; j > index; j--) {
array[j] = array[j - 1]; // 将要插入位置后的数据元素往后移动一位
}
array[index] = obj;
size++;
}
// 删除一个元素
public void remove(int index) {
if (size == 0) {
throw new RuntimeException("list已空");
}
checkSize(index);
for (int j = index; j < size - 1; j++) {
array[j] = array[j + 1];
}
size--;
}
// 通过索引获取元素
public Object get(int index) {
checkSize(index);
return array[index];
}
// 显示所有元素
public void display() {
for (int i = 0; i < size; i++) {
System.out.print(" " + array[i]);
}
}
// 获取列表长度
public int size() {
return size;
}
// 列表是否为空
public boolean isEmpty() {
return size == 0;
}
private void checkSize(int index) {
if (index < 0 || index > size) // 判断如果获取的index越界, 抛出异常
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
}
// 测试程序
public class SequenceTest {
public static void main(String[] args) {
SequenceList seqList = new SequenceList();
seqList.add(0, 1);
seqList.add(1, 2);
seqList.add(2, 3);
seqList.add(3, 4);
seqList.add(4, 5);
seqList.add(5, 6);
seqList.add(6, 7);
seqList.add(7, 8);
seqList.add(8, 9);
seqList.add(9, 10);
seqList.add(10, 11);
seqList.add(11, 12);
seqList.display();
System.out.println();
seqList.remove(1);
seqList.display();
}
}
3. 插入和删除的时间复杂度:
元素插入到第i个位置或者删除第i个元素,需要移动n-i个元素,根据概率原理,每个位置插入或删除元素的可能性是相同的,为(n-1)/ 2。平均的时间复杂度为O(n)
4. 线性表顺序存储的优缺点:
优点:无须为表中元素逻辑关系而增加额外的存储空间,同时可以快速存取表中任一位置的元素。
缺点:插入和删除操作需要移动大量的元素,当线性表长度变化较大时,难以确定存储空间的容量。
分享到:
相关推荐
数据结构:线性表(顺序存储).ppt
线性表是一种最简单、最常用的数据结构。 如:到银行取钱时排队;学生花名册;书目顺序……所谓线性是指:在数据元素的非空有限集合中:1、存在唯一的一个被称做“第一个”的数据元素。 2、存在唯一的一个被称做...
数据结构教学课件:线性表顺序表.ppt
利用C++实现以下经典数据结构与算法:线性表(顺序表、链表、静态链表、三元组)、栈(双栈、共享栈)、队列(任务调度、循环队列、双向队列、链队列)、数组(特殊矩阵、稀疏矩阵压缩)、串(朴素模式匹配、KMP算法...
线性表顺序存储结构的操作及其应用实验,编写C语言描述的线性表操作的12种算法的顺序存储结构实现的代码;
实验 二 基于链式存储结构 实现线性表的基本的 常见的运算 提示: ⑴ 提供一个实现功能的演示系统 ⑵ 具体物理结构和数据元素类型自行选定 ⑶ 线性表数据可以使用磁盘文件永久保存
数据结构:线性表(链接存储).ppt
1、实现线性表的顺序存储结构 2、熟悉C++程序的基本结构,掌握程序中的头文件、实现文件和主文件之间的相互关系及各自的作用 3、熟悉顺序表的基本操作方式,掌握顺序表相关操作的具体实现 **实验内容** 对顺序存储...
实验一:线性表的存储结构定义及基本操作
数据结构与算法:线性表的题库
简单的线性表顺序存储的示例,代码主要完成在顺序存储中的插入及删除元素的操作。 本程序在VS2008下编译通过
数据结构:线性表求一元多项式的值,用C++实现
数据结构: 线性表讲解实例。针对线性表的深入讲解。
数据结构实验报告(1) 学院: 专业: 班级: "姓名 " "学号 " "实验组" " "实验时间 "2011-10-28 "指导教师" "成绩 " " "实验项目名称 "线性表的顺序存储结构 " "实 "1. 熟练掌握线性表的基本操作在顺序存储和链式...
数据结构实验报告,线性表顺序存储结构的操作及其应用 包括实验过程,实验目的,实验总结等详细内容,仅供大家学习交流!
数据结构教学课件:线性表链表.ppt
c语言实现的线性表顺序存储结构,包括初始化,设置线性表的值,增,删,改,查。
线性表的顺序表示以及实现(C语言编写),有完整的注释。
C++数据结构 线性表顺序存储结构实现通讯录