数据结构(java版)学习笔记(二)——线性表之顺序表
顺序表的优点:
- 随机存取元素方便,根据定位公式容易确定表中每个元素的存储位置,所以要指定第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;
- }
- }
数据结构(java版)学习笔记(二)——线性表之顺序表的更多相关文章
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer
作者:Grey 原文地址:Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer ByteBuffer.allocate()与ByteBuffer.allocateD ...
- java jvm学习笔记二(类装载器的体系结构)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱,什 ...
- Android(java)学习笔记192:SQLite数据库(表)的创建 以及 SQLite数据库的升级
一.数据库的创建 1.文件的创建 //引用,如果文件不存在是不会创建的 File file = new File("haha.txt"): //输出流写数据 ...
- Java基础学习笔记二十二 网络编程
络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则 ...
- Java基础学习笔记二十五 MySQL
MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 ...
- Java基础学习笔记二十七 DBUtils和连接池
DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简化开发 ...
- Android(java)学习笔记135:SQLite数据库(表)的创建 以及 SQLite数据库的升级
一.数据库的创建 1.文件的创建 //引用,如果文件不存在是不会创建的 File file = new File("haha.txt"): //输出流写数据 ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- sql必知必会(第四版) 学习笔记二 视图
本书用到的几个表的建表sql语句如下: --销售产品供应商 CREATE TABLE Vendors ( vend_id varchar(20) not null, vend_name varchar ...
随机推荐
- 配置NFS固定端口
NFS启动时会随机启动多个端口并向RPC注册,为了设置安全组以及iptables规则,需要设置NFS固定端口.NFS服务需要开启 mountd,nfs,nlockmgr,portmapper,rquo ...
- JS实现数组去重方法大总结
js数组根据对象中的元素去重: var arr2 = [ { name: "name1", num: "1" }, { name: "name2&qu ...
- JavaWeb开发SSM框架搭建详解
1.需要用到的jar包:由于很多的jar包不好下载,我直接上传到百度网盘: 很多,而且不好下载,我已经整理好好了: 链接:https://pan.baidu.com/s/1iIFprmstp86uKz ...
- [Swift]LeetCode352. 将数据流变为多个不相交间隔 | Data Stream as Disjoint Intervals
Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...
- [Swift]LeetCode414. 第三大的数 | Third Maximum Number
Given a non-empty array of integers, return the third maximum number in this array. If it does not e ...
- Java运行原理及内存分析
Java运行原理及内存分析 一.Java运行原理 二.Java内存分析
- SQL执行错误#1064---保留字错误
CREATE TABLE IF NOT EXISTS `change` ( `id` INT NOT NULL AUTO_INCREMENT, `creator` VARCHAR(45) NOT NU ...
- Redis Windows下安装方法
一.安装 首先在网上下载Redis,下载地址:https://github.com/MicrosoftArchive/redis/releases 根据电脑系统的实际情况选择32位还是64位,在这里我 ...
- Hbase篇--HBase中一对多和多对多的表设计
一.前述 今天分享一篇关于HBase的一对多和多对多的案例的分析. 二.具体案例 案例一.多对多 人员-角色 人员有多个角色 角色优先级 角色有多个人员 人员 删除添加角色 角 ...
- C#版 - Leetcode 191. Number of 1 Bits-题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...