数据结构(java版)学习笔记(二)——线性表之顺序表
2023-02-18 16:38:15 时间
顺序表的优点:
- 随机存取元素方便,根据定位公式容易确定表中每个元素的存储位置,所以要指定第i个结点很方便
- 简单,直观
顺序表的缺点:
- 插入和删除结点困难
- 扩展不灵活,难以确定分配的空间
- 容易造成浪费
顺序表的实现:
这里我简单说一下吧,Sqlist类实现了ListIntf接口,也就是我们上一节中所提到的接口,之后eclipse中就会提示我们复写ListIntf中的方法,我们根据顺序表的特点,逐一复写即可
详情看注释吧~
PS:所有的参数i都是序号,从1开始
import java.util.Scanner; public class SqList implements ListIntf{ final int maxlen = 1000; //线性表中可容纳最多数据元素数目 String v[] = new String[maxlen]; int len =0;//len是长度,1开始,是位序号 /** * * @return 返回线性表中可容纳最多数据元素数目 */ int getmaxlen(){ return maxlen; } public SqList(){ //构造方法中实现相关的接收数据操作 Scanner sc = new Scanner(System.in); int n; String[] a = new String[maxlen]; System.out.println("请输入需要的数据个数:"); n=sc.nextInt(); sc.close(); for(int i=0;i<n;i++){ a[i] = "a"+i;//a[0]的数值是 a0,a[1]的数值是a1,以此类推…… } setData(a); } /** * 将String数组a赋值给String数组v * @param String数组 */ public void setData(String[] a){ v = a; } @Override public int size() { return len; } @Override public void clear() { v = new String[maxlen]; } @Override public boolean isEmpty() { return len==0; } @Override public String get(int i) { return v[i-1]; } @Override public int indexOf(String s) { int i; for(i=0;i<len;i++){ if(v[i].equals(s)){ return i+1; } } System.out.println("顺序表中不存在该元素!!"); return 0; } @Override public String getPre(String s) { //当前是顺序表,是顺序存储结构,无需实现此方法 return null; } @Override public String getNext(String s) { //当前是顺序表,是顺序存储结构,无需实现此方法 return null; } @Override public void insertElementAt(String s, int i) { //首先判断顺序表是否已满,其次判断i是否合法,之后再进行插入操作 if(len==maxlen){ System.out.println("顺序表已满!"); return;//结束判断,跳出判断语句 }else{ if(i<1||i>len){ System.out.println("输入的序号不合法!"); return; }else{ for(int j=len-1;j>=i-1;j--){ v[j+1]=v[j]; } v[i-1] =s; len++; return; } } } @Override public String remove(int i) {
String string; if(i<1||i>len){ System.out.println("输入序号不合法!"); return null; }else{ string = v[i-1]; for(int j=i-1;j<len;j++){ v[j-1] = v[j]; } len--; return string; } } @Override public String remove(String s) { // TODO Auto-generated method stub String string; for(int i=0;i<len;i++){ if(v[i].equals(s)){ string = v[i]; remove(i+1);//这里的i是索引(下标),索引(下标)加1成为序号 return string; } } System.err.println("当前顺序表中没有该元素"); return null; } }
相关文章
- 2022 JuiceFS 社区用户调研结果出炉
- MetaForce佛萨奇开发案例,MetaForce佛萨奇2.0智能合约系统开发流程及源码
- spring 定时几种实现方式
- 算法遇记 | 字符串段拆插问题 - 富文本
- 深入分析MetaForce佛萨奇2.0波场链丨币安链丨马蹄链智能合约系统开发成熟技术案例及代码详解
- 【Flutter 异步编程 - 拾】 | 探索 Stream 的转换原理与拓展
- 佛萨奇2.0系统丨佛萨奇dapp智能合约系统开发(详情)丨佛萨奇2.0源码模式
- 猿如意中的【editorconfig-222.2889.3】工具详情介绍
- 佛萨奇矩阵公排开发系统丨佛萨奇系统开发(正式版)丨佛萨奇dapp开发源码设计
- 猿如意中的【Qt Creator】工具详情介绍
- Spring IoC、AOP、Transaction、MVC 归纳小结
- fl studio21水果软件都更新了些啥功能?
- spring boot 的thymeleaf真的是那么随便就可以用的吗?弄不好你就会遇到很头疼的事
- CorelDRAW2023最新版本在哪里下载有哪些新功能
- 生物信息数据分析教程视频——11-筛选相关性基因
- 谷歌浏览器:Unchecked runtime.lastError: The message port closed before a response was received
- ABAP之选择屏幕真假必输的详细使用方式
- SAP 之SD模块常用权限检查
- 阐述DAPP智能合约流动性质押挖矿分红系统开发技术详细及代码分析
- spring boot整合pagehelper分页插件