图解顺序表+单链表-1

简介: 图解顺序表+单链表

一 图解顺序表

顺序表的概念

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。(以下我们所要进行描述的是动态顺序表,动态为数据分配一个内存空间)


顺序表的实现

在Java类与对象中,我们了解到。java是一门面向对象的编程语言,对于如何对一组数据进行增删查改。我们可以把他们放到一个类里面,通过实例化对象。直接进行相应的调用操作即可,不用过多的关心类里面是怎么实现的。对于一个动态顺序表,我们可以定义一个数组来存储这些数据,用useside来表示数组里面实际的有效数据的长度,这样我们就可以得到类的成员属性,通过对应的方法来实现。接下来我们通过图片以及代码结合,理解一下什么是顺序表。


1 抽象对应的类

class ordly {
    public int[] elem;
    public int useside;//表示数据的有效长度
    public ordly(){
        this.elem=new int[6];
    }
}


2 类的方法去实现顺序表

对于类的调用者来说就是提供了相应的接口去实现

2.1 顺序表的打印

  // 打印顺序表(代码实现)
    public void display() {
        for (int i = 0; i < useside; i++) {
            System.out.println(elem[i]+" ");
        }
    }
2.2 顺序表的新增元素

    // 在 pos 位置新增元素(代码实现)
    public boolean isfull(){
        return this.useside==elem.length;
    }
    public void add(int pos, int data) {
        if (pos<0||pos>useside){
            System.out.println("输入pos位置不合法");
            return;
        }
        if (isfull()){//判断是否需要扩容
            elem= Arrays.copyOf(elem,2*elem.length);
        }
        for (int i=useside-1;i>=pos;i--){
            elem[i+1]=elem[i];
        }
        elem[pos]=data;
        useside++;
    }
2.3判定是否包含某个元素

    // 判定是否包含某个元素(代码实现)
    public boolean contains(int toFind) {
        if(useside==0){
            System.out.println("这是一个空顺序表");
            return false;
        }
        for (int i = 0; i < useside; i++) {
            if (elem[i]==toFind){
                return true;
            }
        }
        return false;//循环走完还没找到,说明没有这个数据
    }
2.4 获取顺序表的长度
// 获取顺序表长度
    public int size() { 
    return useside;
     }
2.5 查找某个元素对应的位置

方法与是否包含一个数的方法类似

    // 查找某个元素对应的位置(代码实现)
    public int search(int toFind) {
        if (useside==0){
            System.out.println("空顺序表,没有你所要找的数据");
        }
        for (int i = 0; i < useside; i++) {
            if (elem[i]==toFind){
                return i;
            }
        }
        return -1;//没有找到
    }
2.6 获取pos位置的元素
    // 获取 pos 位置的元素(代码实现)
    public int getPos(int pos) {
            if (pos<0||pos>useside){
                System.out.println("输入位置不合法");
                return -1;
            }
            if (useside==0){
                System.out.println("这是一个空顺序表");
                return -2;
            }
            return elem[pos];
    }
2.8 把pos位置改成value
  // 给 pos 位置的元素设为 value
    public void setPos(int pos, int value) {
        if (pos<0||pos>useside){
            System.out.println("输入位置不合法");
            return;
        }
        if (useside==0){
            System.out.println("这是一个空链表");
            return;
        }
        elem[pos]=value;
    }
2.9 删除第一次出现的关键字key

    //删除第一次出现的关键字key
    public void remove(int toRemove) {
        if (useside==0){
            System.out.println("这是一个空顺序表,没有你要删除的数据");
            return;
        }
        int index=search(toRemove);
        if (index==-1){
            System.out.println("没有你要删除的元素");
        }
        for (int i = index; i <useside-1 ; i++) {
            elem[i]=elem[i+1];
        }
        useside--;
    }
2.10 清空顺序表
public void clear() {
        useside=0;
    }


这里要特别提及一下这里的清空顺序表以及删除某个元素的顺序表的操作针对的简单类型,对于引用类型。我们不是这样做的,对于这一块的源码,以及对于引用操作类型的处理,可以参考我码云上的代码,希望对你有所帮助。

码云地址


顺序表缺陷

1 对于顺序表的插入以及删除,复杂度为O(N)。

2 对于扩容处理,拷贝数组,释放旧空间,会有不小的消耗

3 对于扩容处理,还存在在浪费空间

缺陷的解决:引进链表,解决这一问题。


图解顺序表+单链表-2

https://developer.aliyun.com/article/1503984

目录
相关文章
|
存储 算法
数据结构与算法之顺序表详解
数据结构与算法之顺序表详解
50 0
|
5月前
|
存储 算法
【数据结构与算法】顺序表
【数据结构与算法】顺序表
36 0
【数据结构与算法】顺序表
|
7月前
|
存储
链表入门(单链表讲)
链表入门(单链表讲)
链表入门(单链表讲)
|
7月前
|
存储 算法
【C/数据结构与算法】:顺序表的实现
【C/数据结构与算法】:顺序表的实现
44 0
|
8月前
|
存储
图解顺序表+单链表-2
图解顺序表+单链表
40 2
|
8月前
|
存储 人工智能 算法
数据结构与算法:顺序表
数据结构与算法:顺序表
53 1
|
8月前
|
存储 算法
【数据结构与算法】3.顺序表
【数据结构与算法】3.顺序表
|
8月前
|
算法 C语言
数据结构与算法顺序表数组版
博主还在学校,写网络编程特别是后面的线程和多路I/O实在是太费精力,所以博主先把数据结构多跟新一点,也正好把学校的C语言数据结构的作业做了,正好一举两得
46 0
|
存储 算法 C语言
数据结构与算法之《顺序表》
数据结构与算法之《顺序表》
|
算法 关系型数据库 MySQL
数据结构与算法——顺序表
数据结构与算📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段和数据结构阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的 📖作者主页:热爱编程的小K 📖专栏链接:数据结构 🎉欢迎各位→点赞👏 + 收藏💞 + 留言🔔​ 💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾 今日好句:世事洞明皆学问,人情练达即文章 ———————————————— 版权声明:本文为CSDN博主「热爱编程的小K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声法——顺序表

热门文章

最新文章