zoukankan      html  css  js  c++  java
  • 数据结构之单链表(golang版)

    线性表之单链表

    package main
    
    //线性表中的链式存储结构
    //第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表
    
    import (
        "fmt"
    )
    
    type Elem int
    
    type 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)
    }
    
  • 相关阅读:
    四、网络层
    四、路由协议
    四、最长前缀匹配
    四、路由转发
    四、分片
    五、TCP的可靠传输你怎么看
    存储周期
    判断素数
    需求说明书的内容
    块级元素——盒子模型1
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/11351893.html
Copyright © 2011-2022 走看看