重温一遍数据结构之顺序存储结构(golang版)
发布时间:2020-12-16 09:43:01 所属栏目:大数据 来源:网络整理
导读:目的 因为最近工作中碰到了一些关于数据结构的问题,发现有些生疏了,所以想重新自己再理一遍,就当是给自己的记录,之所以用golang主要也是因为对goalng比较感兴趣,写起来也比较顺手。 本意也不是想分享关于什么是数据结构,因为这种概念性的东西没有什么
目的因为最近工作中碰到了一些关于数据结构的问题,发现有些生疏了,所以想重新自己再理一遍,就当是给自己的记录,之所以用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)) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |