数据结构(java版)学习笔记(二)——线性表之顺序表

时间:2022-12-16 13:28:40

顺序表的优点:

  1. 随机存取元素方便,根据定位公式容易确定表中每个元素的存储位置,所以要指定第i个结点很方便
  2. 简单,直观

顺序表的缺点:

  1. 插入和删除结点困难
  2. 扩展不灵活,难以确定分配的空间
  3. 容易造成浪费

顺序表的实现:

这里我简单说一下吧,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;
} }

数据结构(java版)学习笔记(二)——线性表之顺序表的更多相关文章

  1. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  2. Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer

    作者:Grey 原文地址:Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer ByteBuffer.allocate()与ByteBuffer.allocateD ...

  3. java jvm学习笔记二(类装载器的体系结构)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao                 在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱,什 ...

  4. Android(java)学习笔记192:SQLite数据库(表)的创建 以及 SQLite数据库的升级

    一.数据库的创建 1.文件的创建      //引用,如果文件不存在是不会创建的   File  file = new File("haha.txt"):     //输出流写数据 ...

  5. Java基础学习笔记二十二 网络编程

    络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则 ...

  6. Java基础学习笔记二十五 MySQL

    MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 ...

  7. Java基础学习笔记二十七 DBUtils和连接池

    DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简化开发 ...

  8. Android(java)学习笔记135:SQLite数据库(表)的创建 以及 SQLite数据库的升级

    一.数据库的创建 1.文件的创建      //引用,如果文件不存在是不会创建的   File  file = new File("haha.txt"):     //输出流写数据 ...

  9. Java设计模式学习笔记&lpar;二&rpar; 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  10. sql必知必会&lpar;第四版&rpar; 学习笔记二 视图

    本书用到的几个表的建表sql语句如下: --销售产品供应商 CREATE TABLE Vendors ( vend_id varchar(20) not null, vend_name varchar ...

随机推荐

  1. JVM之Class文件结构

    每一个class文件对应一个类或者接口,但是一个类或者接口不一定生成class文件,classloader直接生成. 8为字节为基础的二进制流,各个数据项按照严格的顺序排列在class文件中,没有任何 ...

  2. 非常非常非常好!path-sum-iii

    https://leetcode.com/problems/path-sum-iii/ 最终我还是没做出好的解法.还是看的别人的解法. 即使看了别人的解法,开始还实现错了. 还有很长的路要走. pac ...

  3. Python流程控制

    if语句: --Pyhon中的IF跟其他语言类似,if包含一个逻辑表达式,使用表达式比较,在比较的结果的基础上做出判断 --if expression: statement(s) 注意:Python使 ...

  4. java 双重检查模式

    java 双重检查模式 在并发环境下 兼顾安全和效率 成例(Idiom)是一种代码层次上的模式,是在比设计模式的层次更具体的层次上的代码技巧.成例往往与编程语言密切相关.双重检查成例(Double C ...

  5. Android中数据库的操作流程详解

    Android中数据库的操作方法: 1.Android平台提供了一个数据库辅助类来创建或打开数据库. 这个辅助类继承自SQLiteOpenHelper类.继承和扩展SQLiteOpenHelper类主 ...

  6. Spring 部分常用注解

    最近在Spring-MVC的项目,把一些自己在项目中使用到的注解整理一下. 1.@Controller 对应表现层的Bean,也就是Struts中对应的Action: 使用这个注解之后,就是把当前Be ...

  7. ES6 Number

    1. 新增Number.EPSILON(误差检查函数)

  8. Matplotlib 简单的使用

    Matplotlib是一个Python 2D绘图库, 只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等. 有关示例,请参阅示例图和缩 import matplotlib.pyplot ...

  9. 对oracle中SQL优化的理解

    Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择:1.降低目标SQL语句的资源消耗.2.并行执行目标SQL语句.3.平衡系统 ...

  10. 爬虫的基本操作 requests &sol; BeautifulSoup 的使用

    爬虫的基本操作 爬虫基础知识 什么是爬虫? 在最开始,还没有诞生Google和百度等一系列搜索引擎的公司的时候,人们进入一些公司的网站只能通过在浏览器地址栏输入网址的方式访问,如同在很早之前前手机不流 ...