重温一遍数据结构之线性表(golang版)

woshicixide · · 1923 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

目的

因为最近工作中碰到了一些关于数据结构的问题,发现有些生疏了,所以想重新自己再理一遍,就当是给自己的记录,之所以用golang主要也是因为对goalng比较感兴趣,写起来也比较顺手。
本意也不是想分享关于什么是数据结构,因为这种概念性的东西没有什么太大意义,其实最重要的是让自己能看懂自己写了些什么,但是代码中写了非常详细的注释,所以基本都是以代码为主

线性表之顺序存储结构

以下代码是线性表中的顺序存储结构,基本略去了些容错的考虑,还是以实现功能为主

package main

//线性表中的顺序存储结构

import (
    "fmt"
)

// 线性表中存储的数据类型
type Elem int

type SqList struct {
    //最大长度
    maxsize int
    // 当前长度
    length int
    //保存数据
    data   []Elem
}

//初始化
func New(maxsize int) *SqList {
    return &SqList{maxsize: maxsize, data: make([]Elem, maxsize)}
}

//检查线性表是否为空
func (list *SqList) IsEmpty() bool {
    return 0 == list.length
}

//判断线性表是否已满
func (list *SqList) IsFull() bool {
    return list.length == list.maxsize
}

//在i个位置之前插入新的元素e,复杂度为O(n)
func (list *SqList) Insert(i int, e Elem) bool {
    if i < 1 || i > list.length {
        fmt.Println("pls check i:", i)
        return false
    }

    for k := list.length; k > i-1; k-- {
        list.data[k] = list.data[k-1]
    }
    list.data[i-1] = e
    list.length++
    return true
}

//删除位置为i的元素,复杂度为O(n)
func (list *SqList) Del(i int) bool {
    if i < 1 || i > list.length {
            fmt.Println("pls check i:", i)
        return false
    }
    for k := i - 1; k < list.length-1; k++ {
        list.data[k] = list.data[k+1]
    }

    list.data[list.length-1] = 0
    list.length--
    return true
}

//获取第i个位置的元素,复杂度为O(1)
func (list SqList) GetElem(i int) Elem{
    if i < 1 || i > list.length {
        fmt.Println("pls check i:", i)
        return -1
    }
    return list.data[i-1]
}

//追加一个元素
func (list *SqList) append(e Elem) bool {
    if list.IsFull() {
        fmt.Println("list is fulle")
        return false
    }
    list.data[list.length] = e
    list.length++
    return true
}

func main() {
    sq := New(10)

    sq.append(99)
    sq.append(999)
    sq.append(9999)
    sq.append(99999)
    fmt.Println(sq)

    sq.Insert(4, 888)
    fmt.Println(sq)

    //fmt.Println(r)
    sq.Del(2)
    fmt.Println(sq)

    fmt.Println(sq.GetElem(3))
}

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:woshicixide

查看原文:重温一遍数据结构之线性表(golang版)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1923 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传