首页 > 编程语言 >数据结构之顺序表(java语言版)

数据结构之顺序表(java语言版)

时间:2024-04-11 11:59:28浏览次数:26  
标签:index return display add java array 数据结构 public 语言版

顺序表是最简单的线性表,也就是数组。很多语言都把把它当做内置的基本数据类型,这里的数组没有对应数据结构的操作。

数组是顺序存储的结构,连续分配一段内存用于存储数据。在逻辑结构和物理结构上都是连续的。

数组

顺序表建立

在java内置的数组上建立顺序表。

public class Array{
	private Object[] data;//容器
	private int size;//实际长度
    private int cap;//容量

	
	public Array() {//默认构造方法
		size=0;
		cap=15;
		data=new Object[cap];
	}


	public Array(int cap) {
		size=0;
		this.cap=cap;//传入容器容量
		data=new Object[cap];
	}

}

基本操作

顺序表有容量,那么就需要判空和判满。

public boolean isEmpty() {//判空
		if(this.getSize()==0) {
			return true;
		}
		return false;
	}
	
public boolean isFull() {//判满
		if(this.getSize()==this.cap) {
			return true;
		}
		return false;
	}
public int getSize() {//得到实际长度
		return size;
	}

查询数据和插入都是通过索引,所以需要判断索引是否异常。

public void isError(int index){//索引异常
        if(index<0||index>=getSize()){
            System.out.println("\n索引异常,结束程序");
            System.exit(0);
        }
    }

查询元素

通过索引查询元素

public Object get(int index){//查询元素
        if(isError(index)){
            return null;
        }
        return this.data[index];
    }

删除元素

从头部删除,尾部删除,以及通过索引删除。

从尾部移除元素最简单,直接将实际长度减一即可。

public Object remove() {//移除
		return this.data[--size];
    }

从头部或者通过索引移除数据,则操作比较麻烦,被移除的数据位置需要由后面的数据顶上。

在这里插入图片描述

public Object del(int index){//删除元素
        if(isError(index)){
            return null;
        }
        if(index==size-1){
            return remove();
        }
        for(int i=index;i<getSize()-1;i++){
            this.data[i]=this.data[i+1];
        }
        size--;
        return this.data[index];
    }

public Object removeHead(){//从头部移除
        return del(0);
    }

增加元素

public boolean add(Object e) {//增加元素
		if(this.isFull()) {
			System.err.println("容器已满,无法添加\n程序结束");
			System.exit(0);
		}
		this.data[size]=e;
		this.size++;
		System.out.println("add success");
		return true;
    }

遍历

遍历就是访问数组中每个数据。

插入的逻辑和删除一样,移动数据,可以自己尝试实现。

public void display() {//遍历
		System.out.println("display: ");
		for(int i=0;i<this.getSize();i++) {
			System.out.print(" "+this.data[i]);
		}
		System.out.println("\nover...");
    }
    

插入

插入和删除逻辑是一样,移动数据。

 public boolean insert(int index,Object e){//插入

        if(index==getSize()){//先判断是否是追加,再判断索引是否越界 
            return add(e);
        }

        if(isError(index)){//索引越界判断
            return false;
        }
       
        for(int i=size-index;i>0;i--){//将每个数据向后移动一位
            this.data[index+i]=this.data[index+i-1];
        }
        this.data[index]=e;
        size++;
        return true;
    }

一个简单的顺序表或者说数组就完成了。

测试

public static void main(String[] args) {
        Array array=new Array();
        array.add("hello");
        array.add("ok");
        array.add("----");
        array.add("nice");
        array.add(3);

        array.display();

        array.remove();
        array.del(3);
        array.display();
        array.insert(2, "well");
        array.insert(1, "ooo");
        array.display();
        
    }

得到以下结果:

add success
add success
add success
add success
add success
display:
 hello ok ---- nice 3
 display  over...
display:
 hello ok ----
 display  over...
display:
 hello ooo ok well ----
 display  over...

数据结构与算法学习目录

标签:index,return,display,add,java,array,数据结构,public,语言版
From: https://www.cnblogs.com/cgl-dong/p/18128712

相关文章

  • 数据结构之栈(java语言版)
    栈(stack):在逻辑上是一种线性存储结构,它有以下几个特点:1、栈中数据是按照"后进先出(LIFO,LastInFirstOut)"方式进出栈的。2、向栈中添加/删除数据时,只能从栈顶进行操作。栈通常包括的三种操作:push、peek、pop。push--向栈中添加元素。peek--返回栈顶元素。pop--返......
  • 数据结构之队列(java语言版)
    队列(Queue):在逻辑上是一种线性存储结构。它有以下几个特点:1、队列中数据是按照"先进先出(FIFO,First-In-First-Out)"方式进出队列的。2、队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作。队列通常包括的两种操作:入队列和出队列。队列的种类也很多,单向队列,双向队列,循......
  • 数据结构之二叉树(java语言版)
    之前的都是线性结构,而树结构在计算机应用中的应用更加广泛。linux中的目录结构,某些数据库的底层存储等,都是采用树结构进行构架的。树的概念线性表是一对一的关系,而树是一对多的关系。树的结点:包含一个数据元素及若干指向子树的分支;孩子结点:结点的子树的根称为该结点的孩子;双......
  • 使用java代码删除nexus maven仓库中的jar包和pom.xml等组件
    pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://ma......
  • 数据结构之图(java语言版)
    图是比树更复杂的结构,树是一对多的关系,图是多对多的关系。一、基本概念1、定义:图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的;其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边或弧"(edege)。通常记为,G=(V,E)。2、根据边是否有方向,将图可以划分......
  • 数据结构之Hash(java语言版)
    Hash表Hash也叫散列、哈希,是一种根据key-value对进行存储的数据结构。每个value对应一个key,这样查找的时候就无需遍历。Hash表使用数组作为底层结构,数组中每个区域都存储着Hash,这就是Hash表。列表、数组、树这些数据结构在查询数据时的时间复杂度通常为O(n),而Hash的时间复杂......
  • 数据结构之二叉搜索树(java语言版)
    之前介绍了树,主要实现了二叉树的代码。在二叉树的基础上有许多衍生的树,如二叉搜索树、哈夫曼树等,今天学习一下二叉搜索树。二叉搜索树二叉搜索树是二叉树的一种,是应用非常广泛的一种二叉树,英文简称为BST又被称为:二叉查找树、二叉排序树特点任意一个节点的值都大于其左子树所......
  • 数据结构之链表(c语言版)
    链表是线性表,链表的特点就是可以动态增减元素。种类有单向链表、双向链表,循环链表。一、单链表单链表的储存思想使用指针表示节点之间的逻辑关系,它的储存单元可以连续也可以不连续,每个储存单元需要储存信息和储存与后继节点的地址信息,储存单元又称之为节点。单链表由头指针唯......
  • 数据结构之栈(c语言版)
    栈(stack):在逻辑上是一种线性存储结构,它有以下几个特点:1、栈中数据是按照"后进先出(LIFO,LastInFirstOut)"方式进出栈的。2、向栈中添加/删除数据时,只能从栈顶进行操作。栈通常包括的三种操作:push、peek、pop。push--向栈中添加元素。peek--返回栈顶元素。pop--返......
  • 数据结构之队列(c语言版)
    队列(Queue):在逻辑上是一种线性存储结构。它有以下几个特点:1、队列中数据是按照"先进先出(FIFO,First-In-First-Out)"方式进出队列的。2、队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作。队列通常包括的两种操作:入队列和出队列。队列的种类也很多,单向队列,双向队列,循......