知识点

线性表的顺序结构存储结构简称为顺序表。

线性表逻辑顺序相邻,顺序表存储位置相邻。

便于随机存取。

删除和插入可能要移动大量元素,效率低。

解决溢出的方法是新建另一个大容量数组,效率低。

实现

List接口:public interface MyList {

boolean isEmpty(); //判断是否为空

int listLength(); //返回表的长度

void add(Object object); //添加元素

boolean delete(int index); //删除元素

boolean insert(int index, Object object); //插入元素

Object get(int index); //取表元素

int find(Object object); //查找某元素 返回索引

void display(); //输出

void clear(); //清空

}

SqList:public class SqList implements MyList{

private Object[] data;

private int length;

public SqList(int maxSize) {

//初始化顺序表 构造一个maxSize大小的顺序表

length = 0;

data = new Object[maxSize];

}

public boolean isEmpty() {

// 判断是否为空

return length == 0;

}

public int listLength() {

// 返回顺序表的长度

return length;

}

public void add(Object object) {

//添加元素

if (length == data.length) { //如果数组已经满了 扩大两倍

resize(2*length);

}

data[length++] = object;

}

private void resize(int max) {

//动态调整数组大小

Object[] temp = new Object[max];

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

temp[i] = data[i];

}

data = temp;

}

public boolean delete(int index) {

// 删除元素

if (length == data.length) { //满了 导致最后一个删不掉 扩充

resize(2*length);

}

if (index < 0 || index > length) {

return false;

}

for (int i = index - 1; i < length; i++) { //下标从要删除的地方开始移动 每次往前移一个

data[i] = data[i+1];

}

length --;

return true;

}

public boolean insert(int index, Object object) {

// 插入元素

if (length == data.length) { //满了 扩充

resize(2*length);

}

if (index < 0) {

return false;

}

for (int i = length; i >= index-1; i--) { //最后开始 每个往后移一个

data[i] = data[i-1];

}

data[index-1] = object;

length ++;

return true;

}

public Object get(int index) {

// 得到指定位置元素

if (index < 0 || index > length) {

return null;

}

return data[index-1];

}

public int find(Object object) {

// 按元素查找

int i = 0;

while (i < length && !data[i].equals(object)) {

i ++;

}

if (i >= length) {

return -1;

} else {

return i+1;

}

}

public void display() {

// 输出顺序表

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

System.out.print(data[i] + " ");

}

System.out.println();

}

public void clear() {

//清空顺序表

if (length != 0) {

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

data[i] = null;

}

length = 0;

}

}

}

Test:public class Test {

public static void main(String[] args) {

SqList sqList = new SqList(5);

sqList.add("hello");

sqList.add("world");

sqList.add("hahah");

sqList.add("open");

sqList.add("your");

System.out.println(sqList.isEmpty());

System.out.println(sqList.listLength());

sqList.display();

if (sqList.delete(5)) {

sqList.display();

} else {

System.out.println("Wrong");

}

if (sqList.insert(2, "what")) {

sqList.display();

} else {

System.out.println("Wrong");

}

System.out.println(sqList.get(2));

System.out.println(sqList.find("what"));

sqList.clear();

sqList.display();

}

}

结果:

ps:代码中用到了算法中的1.3的resize方法。

欢迎指正!

顺序表倒置java_数据结构-顺序表 java实现-Go语言中文社区相关推荐

  1. golang杀死java_用Golang来保护Java程序-Go语言中文社区

    #反编译带来的困扰 对于一个开发给自己组织内部用的程序,我们是不怎么需要考虑程序被反编译的事情的,但是对于商业软件来说,这又显得有必要,毕竟国内软件行业的竞争还是非常的激烈,大家可以把竞争对手的程序搞 ...

  2. java玫瑰花代码_给爱人的玫瑰花表白程序代码--Java版-Go语言中文社区

    1 书写表白语句的frame(渐入功能) package com.wanju.blessing; import java.awt.Color; import java.awt.Container; i ...

  3. linux 设置 java.library.path,Linux下修改java.library.path-Go语言中文社区

    第一步:打印出当前的java.library.path有哪些目录: 执行  vi  Test.java 切换编辑模式  i 插入如下代码: public class Test { public sta ...

  4. 顺序表倒置java_倒置顺序表

    已知数组中存放了两个线性表(a1,a2,a3....am)和(b1,b2,b3......bn),设计一个算法,用尽可能少的辅助空间将两个线性表的位置互换. (1).线性表位置互换一: 从b1开始的把 ...

  5. c语言构造一个空线性表l,数据结构线性表顺序结构的定义与实现C语言-Go语言中文社区...

    大家好,今天给大家总结了一下数据结构里面的线性表的顺序结构,顺序表表示的是用一组地址连续的存储单元依次存储线性表的数据元素,所以顺序结构的实现一般采用数组的方式来实现,存储空间也采用动态分配的方式.在 ...

  6. 两顺序栈共享Java_数据结构与算法(三),栈与队列

    上一篇<数据结构与算法(二),线性表>中介绍了数据结构中线性表的两种不同实现--顺序表与链表.这一篇主要介绍线性表中比较特殊的两种数据结构--栈与队列.首先必须明确一点,栈和队列都是线性表 ...

  7. 广义表取表头表尾_数据结构广义表的递归算法

    Hello同学们,又到了美妙的星期三,很开心又和大家见面了.这次我们要来讲一讲关于广义表的那些事儿! 俗语说:"与其临渊羡鱼,不如退而结网." 希望通过今天的学习大家可以有所收获. ...

  8. python顺序表数组_数据结构 | 顺序表

    什么是数据结构? 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都 ...

  9. 用mysql创建职工表_【典型例题】数据库——用MySQL来建立创建员工表;-Go语言中文社区...

    作业: 创建员工表(employee),要求包含字段(工号.姓名.年龄.性别.薪资.部门),主键为工号. 要求命令行完成以下操作:(禁止使用图形工具软件) 1)添加三条员工信息 分别是: 1,张三,1 ...

最新文章

  1. SQL SERVER 2008 利用发布订阅方式实现数据库同步
  2. 【BDTC 2015】深度学习分论坛:DL的图像识别、语音识别应用进展及MxNet开源框架设计
  3. eclipse如何导出WAR包
  4. 2022年跨境品牌出海新玩法策略:Tiktok+速卖通平台运营必不可少
  5. HDU - 6016 Count the Sheep(二分图+思维)
  6. 0914-npm EACCES: permission denied权限问题官网终极解决办法
  7. android实现截图功能吗,Android实现拍照截图功能
  8. ctrl z推出查看文本怎么结束_最实用的10个电脑常用快捷键!Ctrl+Z的鬼才反向了解一下!...
  9. Odin靶机WriteUp
  10. 计算机网络安全技术简答题,计算机网络安全技术简答题
  11. [ZZ] Adventures with Gamma-Correct Rendering
  12. 网络协议--05--IP子网划分
  13. 深度分析NandFlash—硬件实现机制
  14. 计算机毕业设计Java超市网站(源码+系统+mysql数据库+lw文档)
  15. AOP防止表单重复提交
  16. 几款常用LED显示屏驱动芯片介绍及选择VK1624
  17. 最新SWAPIDC本地后台登陆 – 替换包
  18. softether 穿越防火墙原理
  19. 数学 ( 解高次同余方程 )——Discrete Logarithm Problem ( UVA 7457 )
  20. 玩客云刷Armbian带docker详细教程(附所有软件)

热门文章

  1. 第三章 直接连接的网络
  2. Cesium不改源码支持坐标系为4490的ArcGIS Rest缓存服务的解决方案,代码为TypeScript编写(vx gzh【图说GIS】)
  3. php在线备忘录,PHP设计模式 - 备忘录模式
  4. 2014年中南大学上机复试
  5. dcdc aam模式_AAM的完整形式是什么?
  6. 字体在ppt中可以整体替换吗_PPT字体替换其实很简单
  7. 网上书店系统/书店管理系统的设计与实现
  8. 便签 java_基于安卓Android的便签笔记APP设计(Android studio)
  9. AUTO_ACKNOWLEDGE和CLIENT_ACKNOWLEDGE
  10. emd matlab工具箱,Matlab-EMD工具箱