数据结构—顺序表详解

目录(一)线性表的介绍(二)顺序表(一)线性表的介绍线性表:线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。(1)逻辑上是线性结构,物理...
摘要由CSDN通过智能技术生成
目录
(一)线性表的介绍
(二)顺序表

(一)线性表的介绍

  • 线性表:线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
  • 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
    (1)逻辑上是线性结构,物理结构连续——顺序表;
    (2)逻辑上是线性结构,物理结构不连续——链表。

(二)顺序表

将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。

  • 顺序表是线性表,逻辑结构与存储位置吻合。

  • 一般采用数组存储。

  • 顺序表的分类:

静态顺序表 使用定长数组存储
动态顺序表 使用动态开辟的数组存储

注:使用动态顺序表可以自由控制内存大小,避免开辟内存不够或者开辟内存过大的问题。

  • 将表中元素依此存入数组
    i: int[] array————存在实际数据(可以理解为一座可以容纳n各人的房子)
    ii: int size————存在数据个数(可以理解为方子中实际住了多少人)
    在这里插入图片描述

1. 头插

  • 头插:即在顺序表的第一个元素之前插入一个新的元素。
  • 思想:
    图2:
    在这里插入图片描述
    (1)若要在第一个元素的位置插入一个新的元素,则原来所有的元素都必须后移一个位置。需后移size个元素。
    (2)为了使后移的元素不被覆盖,后移的顺序用改为:从后往前移。
    (3)确定空间下标 与 数据下标
    数据下标:可以理解为移动前元素的下标;
    空间下标:可以理解为移动以后元素的下标。

空间下标:[size,1]
数据下标:[size-1,0]

(4)array[空间下标] = array[数据下标];
数据下标=空间下标-1
(5)array[0] = 新元素;
(6)size++;

2. 尾插

  • 尾插:在顺序表得最后一个元素后面添加一个元素
  • 思想:
    图3:
    在这里插入图片描述
    (1)顺序表中所有得元素都不需要移动,直接在最后插入一个新的元素
    (2)array[size] = 新元素;
    (3)size++

3. 从中间任何位置插入

  • 思想:
    图4:
    在这里插入图片描述
    (1)从中间任何位置插入,也包括从头插和尾插。
    (2)明确要插入新元素的位置index,不能越界。(index>=0 && index <= size);
    (3)将index及其之后的元素全部后移一个位置;
    (4)先后移,再插入,且从后往前移动;
    (5)确定空间下标[size,index+1];
    (6)确定数据下标[size-1,index];
    (7)array[空间下标] = array[数据下标];
    数据下标=空间下标-1
    (8)array[index] = 新元素;
    (9)size++

4. 头删

  • 头删:即把顺序表中得第一个元素删除
  • 思想:
    图5:
    在这里插入图片描述
    (1)删除第一个元素,则其后的元素就必须前移一个位置,需要移动的元素个数为size-1;
    (2)移动顺序:从前往后;
    (3)确定空间下标[0,size-2];
    (4)确定数据下标[1,size-1];
    (5)array[空间下标] = array[数据下标];
    数据下标=空间下标+1
    (6)移动完之后: this.array[–this.size] = 0。

5. 尾删

  • 尾删:即删除顺序表中的最后一个元素。
  • 思想:
    (1)其他元素都不用移动,只需要删除最后一个元素即可
    (2)this.array[–this.size] = 0;

6. 从中间任何位置删除

  • 思想:
    图6:
    在这里插入图片描述
    (1)确定index得位置;
    (2)将该位置及之后的所有元素前移一个位置;
    (3)移动顺序:从前往后移动;
    (4)确定数据下标:[index+1,size-1];
    (5)确定空间下标:[index,size-2];
    (6)array[空间下标] = array[数据下标];
    (7)移动完之后,this.array[–this.size] = 0;

7,顺序表增删的具体代码:

(1)定义接口,接口中定义要实现的方法


/**
 * author:kelly_fanfan
 */
interface IArrayList {
   
    //顺序表的增删查改

    //头插
    //把item插入到线性表的前面
    void 
  • 14
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值