上一篇说的是线性表中的顺序存储结构,他的读取复杂度虽然是o(1),但是它的缺点也很明显,插入和删除需要移动很多元素,而且需要分配一块连续的内存区域
线性表之单链表单链表在一定程度上解决了一部分上面的问题,而且也不要一大块连续的内存区域,代码如下
package main//线性表中的链式存储结构//第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表import ( "fmt")type Elem inttype linkNode struct { Data Elem Next *linkNode}//生成头节点func New() *linkNode { //下面的data可以用来表示链表的长度 return &linkNode{0,nil}}//在链表的第i个位置前插入一个元素e,复杂度为o(n)func (head *linkNode) Insert(i int,e Elem) bool { p := head j := 1 for nil != p && j < i { p = p.Next j++ } if nil == p || j > i { fmt.Println("pls check i:",i) return false } s := &linkNode{Data: e} s.Next = p.Next p.Next = s return true}//遍历链表func (head *linkNode) Traverse() { point := head.Next for nil != point { fmt.Println(point.Data) point = point.Next } fmt.Println("--------done----------")}//删除链表中第i个节点,复杂度为o(n)func (head *linkNode) Delete(i int) bool { p := head j := 1 for (nil != p && j < i) { p = p.Next j++ } if nil == p || j > i { fmt.Println("pls check i:",i) return false } p.Next = p.Next.Next return true}// 获取链表中的第i个元素,复杂度为o(n)func (head *linkNode) Get(i int) Elem { p := head.Next for j:= 1; j< i ;j++ { if nil == p { //表示返回错误 return -100001 } p=p.Next } return p.Data}func main() { linkedList := New() linkedList.Insert(1,9) linkedList.Insert(1,99) linkedList.Insert(1,999) linkedList.Insert(1,9999) linkedList.Insert(1,99999) linkedList.Insert(1,999999) linkedList.Traverse() linkedList.Delete(4) linkedList.Traverse() e := linkedList.Get(4) fmt.Println(e)}总结
以上是内存溢出为你收集整理的重温一遍数据结构之单链表(golang版)全部内容,希望文章能够帮你解决重温一遍数据结构之单链表(golang版)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)