美文网首页
数据结构之数组

数据结构之数组

作者: 每天十分钟玩转测试 | 来源:发表于2019-06-25 10:54 被阅读0次

数组是一种线性数据结构。

特点:

-  一组连续的内存空间,来存储一组具有相同类型的数据。

时间复杂度:

- 查找: O(1)
- 插入: O(n)
- 删除: O(n)

代码实现:

定义基本的数组结构:

type Array struct {
  data []int 
  length uint 
}

func NewArray(capacity uint) *Array {
  if capacity == 0 {
      return nil 
  }
  return &Array{
      data: make([]int, capacity, capacity),
      length: 0,
  }
}

数组的长度:

func (this *Array) Len() uint {
    return this.length
}

是否越界:

func (this *Array) isIndexOutOfRange(index uint) bool {
    if index >= uint(cap(this.data)){
        return true
    }
    return false
}

数据插入:

func (this *Array) Insert(index uint, v int) error {
    // 判断是否满了
    if this.Len() == uint(cap(this.data)) {
        return errors.New("full array")
    }
    // 判断插入位置是否插入到尾部
    if index != this.length && this.isIndexOutOfRange(index) {
        return errors.New("out of index range")
    }
    
    for i:= this.length; i > index; i-- {
        // index后的数据后移空出位置
        this.data[i] = this.data[i-1]
    }
    
    this.data[index] = v 
    this.length++
    return nil 
}

func (this *Array) InsertToTail(v int) error {
    // 尾部插入
    return this.Insert(this.Len(), v)
} 

删除操作:

func (this *Array) Delete(index uint) (int, error) {
    if this.isIndexOutOfRange(index) {
        return 0, errors.New("out of index range")
    }
    v := this.data[index]
    for i:= index; i <this.Len() -1; i++ {
        this.data[i] = this.data[i+1]
    }
    this.length--
    return v, nil 
}

数据打印:

 func (this *Array) Print() {
//   只要实现了Print方法,fmt.Print时就会调用此方法
    var format string
    format += fmt.Sprintf("%+v", this.data[0])
    for i:= uint(1); i< this.Len(); i++ {
        format += fmt.Sprintf("=>%+v", this.data[i])
        fmt.Println(format)
    }
}

这样基本上就实现了golang版本的Array的插入删除和下标取值的基本操作,
在Array实现的过程中,最重要的是警惕下标越界。

相关文章

  • 重温:数据结构与算法 - 03数组

    数据结构与算法之美 - 数组 数据结构与算法之美-学习大纲 什么数组? 数组是一种 线性表 数据结构。它用一组 连...

  • 数据结构与算法

    线性数据结构 数据结构之数组[https://www.jianshu.com/p/2237c4287a25] 数据...

  • 2020-07-16

    1、看完谷粒商城31 2、恋上数据结构之动态数组

  • 数据结构:数组

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 数组 数组是一...

  • 链表

    数据结构之链表 前面我们学习了三种线性结构的数据结构,动态数组,栈和队列,但是这三种数据结构其实说到底都是数组,即...

  • 01.数据结构之数组篇

    文章为极客时间《数据结构与算法之美》的学习笔记。 什么是数组? 数组是一种线性表数据结构。它用一组连续的内存空间,...

  • 数据结构之数组

    程序员可能都听说过:算法 + 数据结构 = 程序。今天就来了解下数据结构的其中一种——数组吧。数组的标准定义是:一...

  • 数据结构之数组

    数组是一种线性数据结构。 特点: 时间复杂度: 代码实现: 定义基本的数组结构: 数组的长度: 是否越界: 数据插...

  • 数据结构之数组

    数据结构之数组 这个系列是在学习慕课网玩转数据结构课程的学习笔记,用JAVA语言来重新系统的整理一下数据结构的知识...

  • 数据结构之数组

    数组是最基础的数据结构,你可能觉得它非常简单。其实真的非常简单,但里面有一些细节还是稍微要注意一下的。 先看一下数...

网友评论

      本文标题:数据结构之数组

      本文链接:https://www.haomeiwen.com/subject/cxzzqctx.html