java数据结构——线性表的顺序存储实现
一、描述
线性结构特点:
(1)存在唯一的一个被称作“第一个”的数据元素
(2)存在唯一的一个被称作“最后一个”的数据元素
(3)除第一个之外,集合中的每个数据元素均只有一个前驱
(4)除最后一个之外,集合中的每个数据元素均只有一个后继
线性表:是n个数据元素的有限序列。常用的两种存储结构为:线性表的顺序存储结构和线性表的链式存储结构。
线性表的顺序表示:指的是用一组地址连续的存储单元依次存储线性表的数据元素。
本篇主要讲线性表的顺序存储。 二、源码
2.1 sequencelist.java
package com.yds.list;
import java.util.arrays;
public class sequencelist《t》{
//默认长度
private int default_size = 2;
//定义一个数组用于保存线性表的长度
private object[] elementdata;
//用于保存数组长度
private int capacity;
//保存顺序表中当前元素的个数
private int size = 0;
/**
* 构造一个默认长度的空线性表
*/
public sequencelist(){
capacity = default_size;
elementdata = new object[capacity];
}
/**
* 用一个初始化元素来创建线性表
* @param element 初始化元素
*/
public sequencelist(t element){
this();
elementdata[0] = element;
size++;
}
/**
* 用一个元素和指定长度来创建线性表
* @param element 元素
* @param initsize 指定长度
*/
public sequencelist(t element,int initsize){
capacity = 1;
if(capacity《initsize){
capacity = initsize +2;
}
elementdata = new object[capacity];
elementdata[0] = element;
size++;
}
/**
* 向顺序表中插入元素
* @param element 待插入的元素
* @param index 待插入的位置
*/
public void insert(t element,int index){
if(index《0||index》size){
throw new indexoutofboundsexception(“数组越界异常”);
}
ensurecapacity(size+1);
//把index以后的元素都后移一位
system.arraycopy(elementdata, index, elementdata, index+1, size-index);
elementdata[index] = element;
size++;
}
/**
* 表长
* @return
*/
public int length(){
return size;
}
/**
* 向表中添加元素
* @param element
*/
public void add(t element){
insert(element, size);
}
/**
* 得到线性表存储的对象
* @param index 获得的位置
* @return 得到的结果
*/
public t get(int index){
if(index《0||index》size)
throw new indexoutofboundsexception(“数组越界异常”);
return (t)elementdata[index];
}
/**
* 判断线性表是否为空
* @return
*/
public boolean isempty(){
return size==0;
}
/**
* 清空线性表
*/
public void clear(){
arrays.fill(elementdata, null);
size = 0;
}
/**
* 获取指定位置的前一个元素
* @param index 线性表位置,若是取线性表最后一个元素,必须index = size,
* size为线性表元素个数
* @return
*/
public t priorelem(int index){
if(index》0&&index《size+1)
return (t)elementdata[index-1];
else {
throw new indexoutofboundsexception(“数组越界异常”);
}
}
/**
* 删除指定位置的元素
* @param index
*/
public void delete(int index){
if(index《0||index》size-1){
throw new indexoutofboundsexception(“数组越界异常”);
}else{
//把数组前移一位
system.arraycopy(elementdata, index+1, elementdata, index, size-index-1);
size--;
//清空最后一个元素
elementdata[size]=null;
}
}
/**
* 获取指定线性表位置的后一个元素
* @param index 线性表位置,若是取线性表第0个元素,必须index=-1
* @return
*/
public t nextelem(int index){
if (index==-1) {
return (t)elementdata[0];
}
else if (index《size-1&&index》-1) {
return (t)elementdata[index+1];
}else{
throw new indexoutofboundsexception(“数组越界异常”);
}
}
/**
* 确保数组所需长度大于数组原有长度
* @param mcapacity 数组所需长度
*/
private void ensurecapacity(int mcapacity){
if(mcapacity》capacity){
capacity=mcapacity+2;
// system.out.println(“capacity:”+capacity);
elementdata = arrays.copyof(elementdata, capacity);
}
}
}
2.2 javamain.java
package com.yds.list;
public class javamain {
public static void main(string[] args) {
// todo auto-generated method stub
sequencelist《string》 list = new sequencelist《string》();
system.out.println(“isempty:”+list.isempty());
string la[] = {
“3”
};
for (int i = 0; i 《 la.length; i++) {
list.add(la[i]);
}
system.out.println(“isempty:”+list.isempty());
for (int i = 0; i 《 la.length; i++) {
system.out.println(list.get(i));
}
system.out.println(“length:”+list.length());
system.out.println(“priorelem:”+list.priorelem(1));
list.insert(“7”, 0);
system.out.println(“--------------------”);
for (int i = 0; i 《 list.length(); i++) {
system.out.println(list.get(i));
}
system.out.println(“length:”+list.length());
system.out.println(“--------------------”);
system.out.println(“priorelem:”+list.priorelem(1));
system.out.println(“nextelem:”+list.nextelem(0));
system.out.println(“--------------------”);
list.delete(1);
for (int i = 0; i 《 list.length(); i++) {
system.out.println(list.get(i));
}
list.clear();
system.out.println(“isempty:”+list.isempty());
system.out.println(“----------sequencelist(t element)----------”);
sequencelist《string》 list1 = new sequencelist《string》(“5”);
for (int i = 0; i 《 la.length; i++) {
list1.add(la[i]);
}
for (int i = 0; i 《 list1.length(); i++) {
system.out.println(list1.get(i));
}
system.out.println(“-------sequencelist(t element,int initsize)--------”);
sequencelist《string》 list2 = new sequencelist《string》(“5”,3);
for (int i = 0; i 《 la.length; i++) {
list2.add(la[i]);
}
for (int i = 0; i 《 list2.length(); i++) {
system.out.println(list2.get(i));
}
}
DRAM与存储器价格带动汽车IC市场爆发
滑动窗口算法解决子串问题教程
TCL飞利浦IIC维修实例
特斯拉希望2019年在华建厂采用本地化设计
3D打印机器人手臂的制作教程
Java数据结构的线性表是怎样的
中美贸易摩擦加剧 国巨、华新科同期衰退幅度明显扩大
英飞凌正在受到全球汽车需求疲软的冲击影响
FCBAG封装集成电路在失效分析中常用的检测设备与技术
手持ATP荧光检测仪的产品概述介绍
魅族Pro6Plus怎么样?魅族Pro6Plus最新消息:魅族Pro6Plus提供NFC功能为噱头?被网友指不厚道?
厦门优迅一项MCU芯片相关专利公布
工业自动化系统中PLC数据采集网关有什么功能
覆盖范围1000米!DIY大功率高增益无线路由器
中国联通独家获得eSIM试点批复
北京全市基本实现了5G基站独立组网与非独立组网双连接
三雄极光新品发布 走“芯”又走心
手机处理器有什么作用
Vishay推出用于3D电视的快门式眼镜的红外接收器TSMP6000
全自动在线激光打标机的优势