数据结构——顺序表

本文深入探讨了顺序表的概念,介绍了顺序表作为线性表的一种实现方式,其通过连续的内存地址存储元素,利用物理相邻关系反映逻辑关系。文章详细讲解了顺序表的基本操作,包括插入、删除、查找等,并提供了具体的Java实现代码示例。
摘要由CSDN通过智能技术生成

顺序表

 顺序表是在计算机内存中以数组的形式保存的线性表。
 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
 采用顺序存储结构的线性表通常称为顺序表。
顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

  • 顺序表的基本操作:
package mypratice;
import java.util.Arrays;
/**
 * Package: mypratice
 * Description:
 * Author: zker
 * Date: Created in 2018/11/27 13:02
 * Company: zhang
 * Copyright: Copyright (c) 2018
 */
class SqlistTable{
    public int[] element;   //对象数组存储顺序表的数据元素
    int usedsize;  //顺序表的元素个数

    public SqlistTable(int size){
        this.element = new int[size];
    }

    public SqlistTable(){
        this(10);   调用类已经声明的指定参数列表的构造方法
    }
    //判断顺序表是否已满
    public boolean isFull(){
        if (this.usedsize == this.element.length){
            return true;
        }
        return false;
    }
    //在指定位置pos插入一个数
    public boolean InsertValue(int pos, int value){
        if (isFull()){
            //顺序表已满,动态扩容
            this.element = Arrays.copyOf(this.element,2 * this.element.length);
        }if (pos < 0 || pos > this.usedsize){
            return false;
        }else {
            for (int i = this.usedsize - 1;i >= pos;i --){
                this.element[i + 1] = this.element[i];  //移动元素,逐步往后移
            }
            this.element[pos] = value; //将数插入到指定pos
            usedsize ++;
        }
        return true;
    }
    //判断顺序表是否为空
    public boolean isEmpty(){
        if (this.usedsize == 0){
            return true;
        }
        return false;
    }
    //查找关键字key的下标
    public int SearchKey(int key){
        if (isEmpty()){
            return -1;
        }
        for (int i = 0; i < this.usedsize ; i++) {
            if (this.element[i] == key){
                return i;
            }
        }
        return -1;
    }
    //删除关键字key的值,第一次出现的key
    public boolean DeleteKey(int key){
        int index = SearchKey(key); //先查找顺序表中是否存在key 若存在返回下标,若不存在返回-1
        if (index < 0){             //如果有:删除  从找到数字的下标开始删除
            return false;
        }else {
            for (int i = index ;i < this.usedsize -1; i ++){
                 this.element[i] = this.element[i + 1];  //后面的数覆盖前面的
            }
            this.usedsize --;    //删除后,顺序表元素个数减一
            return true;
        }
    }
    //得到pos 位置的值
    public int GetValue(int pos){
        if (pos < 0 || pos > this.usedsize){
            throw new UnsupportedOperationException("pos位置不合法或者顺序表为空");
            // return -1 ;
        }else{
            return this.element[pos];
        }
    }
    //打印顺序表
    public void Print(){
        for (int i = 0; i < this.usedsize; i++) {
            System.out.print(this.element[i] + " ");
        }
        System.out.println();
    }
}
public class Sqlist {
    public static void main(String[] args) {
        SqlistTable sqlistTable = new SqlistTable();
        for (int i = 0; i < 10 ; i ++){
            sqlistTable.InsertValue(i,i); //指定位置插入
        }
        sqlistTable.Print();
        System.out.println("======");
        sqlistTable.InsertValue(2,2);
        sqlistTable.Print();
        System.out.println("=========");

        System.out.println(sqlistTable.DeleteKey(1));
        System.out.println("========");

        System.out.println(sqlistTable.SearchKey(3));
        System.out.println("========");
        System.out.println(sqlistTable.GetValue(5));

    }
}
//output:
0 1 2 3 4 5 6 7 8 9 
======
0 1 2 2 3 4 5 6 7 8 9 
=========
true
========
3
========
5

顺序表的插入:
在这里插入图片描述
Over…数据结构新篇章,顺序表建议画图思考问题,走一走理一理,造轮子啊,,明天也要加油呀yayyayyya

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值