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)
    }
    
  • 相关阅读:
    UC_online在线抽奖_新浪UC(Tab页功能)
    Asp.Net上传文件示例(保存文件路径到数据库)
    中国十大美丽女主播
    行业应用软件项目经理三步曲
    TVB十大女星比美十大名花
    SQLServer和Oracle常用函数对比
    如何撰写商业计划
    带农历的日历
    ASP+VML制作统计图的源程序
    Winamp网页播放器
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/11351893.html
Copyright © 2011-2022 走看看